1
0
mirror of https://github.com/avatao-content/test-tutorial-framework synced 2024-11-15 04:17:17 +00:00
test-tutorial-framework/solvable/src/event_handler_main.py

87 lines
2.8 KiB
Python
Raw Normal View History

2019-06-10 13:35:09 +00:00
import logging
2019-06-28 15:36:03 +00:00
from sys import stderr
from functools import partial
from tornado.ioloop import IOLoop
2018-07-26 12:00:24 +00:00
from tfw.fsm import YamlFSM
2019-07-12 21:26:57 +00:00
from tfw.event_handlers import FSMAwareEventHandler
2019-06-28 13:12:27 +00:00
from tfw.builtins import IdeEventHandler, TerminalEventHandler, FrontendEventHandler
from tfw.builtins import LogMonitoringEventHandler, ProcessManagingEventHandler
2019-07-05 13:37:54 +00:00
from tfw.builtins import DirectorySnapshottingEventHandler, FSMManagingEventHandler
2019-07-12 21:26:57 +00:00
from tfw.main import EventHandlerFactory, setup_signal_handlers
2019-06-28 15:36:03 +00:00
from tfw.logging import Log, Logger, LogFormatter, VerboseLogFormatter
2019-07-12 21:26:57 +00:00
from tfw.config import TFWENV
2019-07-01 12:54:47 +00:00
from tao.config import TAOENV
2019-07-05 13:37:54 +00:00
from custom_event_handlers import MessageFSMStepsEventHandler
2019-07-08 12:12:21 +00:00
from custom_event_handlers import CenatorEventHandler, TestCommandsEventHandler
2019-07-12 21:26:57 +00:00
2019-07-05 13:37:54 +00:00
LOG = logging.getLogger(__name__)
def main():
2019-07-15 11:43:34 +00:00
# pylint: disable=unused-variable
2019-06-28 15:36:03 +00:00
Logger([
Log(stderr, LogFormatter(20)),
Log(TFWENV.LOGFILE, VerboseLogFormatter())
]).start()
2019-06-18 16:51:05 +00:00
2019-07-15 11:43:34 +00:00
eh_factory = EventHandlerFactory()
# TFW builtin EventHandlers (required for their respective functionalities)
# TFW FSM
fsm_eh = eh_factory.build(FSMManagingEventHandler(
2018-07-27 11:59:14 +00:00
fsm_type=partial(
YamlFSM,
'test_fsm.yml',
2019-07-15 11:43:34 +00:00
{} # jinja2 variables, empty dict enables jinja2 without any variables
2018-07-27 11:59:14 +00:00
)
2019-07-15 11:43:34 +00:00
))
# Web IDE backend
ide_eh = eh_factory.build(IdeEventHandler(
allowed_directories=[TFWENV.IDE_WD, TFWENV.WEBSERVICE_DIR],
directory=TFWENV.IDE_WD,
exclude=['*.pyc']
2019-07-15 11:43:34 +00:00
))
# Web shell backend
terminal_eh = eh_factory.build(TerminalEventHandler())
# Handles 'deploy' button clicks
processmanager_eh = eh_factory.build(ProcessManagingEventHandler(
log_tail=2000
2019-07-15 11:43:34 +00:00
))
# Sends live logs of webservice process to frontend
logmonitor_eh = eh_factory.build(LogMonitoringEventHandler(
2018-05-30 13:23:54 +00:00
process_name='webservice',
log_tail=2000
2019-07-15 11:43:34 +00:00
))
# Manages filesystem snapshots of directories
snapshot_eh = eh_factory.build(DirectorySnapshottingEventHandler(
2018-08-07 15:03:41 +00:00
directories=[
TFWENV.IDE_WD,
TFWENV.WEBSERVICE_DIR
]
2019-07-15 11:43:34 +00:00
))
# Proxies frontend API calls to frontend
frontend_eh = eh_factory.build(FrontendEventHandler())
# Replace these with your custom event handlers
# Echoes executed commands to messages
cenator_eh = eh_factory.build(CenatorEventHandler())
# Echoes FSM steps
2019-07-12 21:26:57 +00:00
message_fsm_steps_eh = eh_factory.build(
2019-07-15 11:43:34 +00:00
MessageFSMStepsEventHandler(),
2019-07-12 21:26:57 +00:00
event_handler_type=FSMAwareEventHandler
)
2019-07-15 11:43:34 +00:00
# Catches special commands
commands_eh = eh_factory.build(TestCommandsEventHandler(
2019-07-12 21:26:57 +00:00
bashrc=f'/home/{TAOENV.USER}/.bashrc'
2019-07-15 11:43:34 +00:00
))
2019-07-08 09:42:03 +00:00
setup_signal_handlers()
IOLoop.instance().start()
if __name__ == '__main__':
main()