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

86 lines
3.2 KiB
Python
Raw Normal View History

2019-06-10 13:35:09 +00:00
import logging
from functools import partial
from tornado.ioloop import IOLoop
2018-07-26 12:00:24 +00:00
from tfw.fsm import YamlFSM
2019-08-23 13:56:03 +00:00
from tfw.event_handlers import FSMAwareEventHandler, ControlEventHandler
from tfw.components.ide import IdeHandler, DeployHandler
2019-07-24 13:52:38 +00:00
from tfw.components.terminal import TerminalHandler
2019-08-27 11:08:41 +00:00
from tfw.components.frontend import FrontendProxyHandler, FrontendReadyHandler, ConsoleLogsHandler, MessageQueueHandler
2019-07-24 13:52:38 +00:00
from tfw.components.process_management import ProcessHandler, ProcessLogHandler
from tfw.components.fsm import FSMHandler
2019-08-15 15:04:27 +00:00
from tfw.main import EventHandlerFactory, setup_logger, setup_signal_handlers
2019-07-24 13:52:38 +00:00
from tfw.config import TFWENV, TAOENV
2019-07-24 13:52:38 +00:00
from custom_handlers import CenatorHandler, TestCommandsHandler, messageFSMStepsHandler
2019-07-12 21:26:57 +00:00
2019-07-05 13:37:54 +00:00
LOG = logging.getLogger(__name__)
2019-08-27 11:08:41 +00:00
def main():
2019-07-15 11:43:34 +00:00
# pylint: disable=unused-variable
2019-08-15 15:04:27 +00:00
setup_logger(__file__)
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
2019-07-24 13:52:38 +00:00
fsm_eh = eh_factory.build(FSMHandler(
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
2019-08-27 11:08:41 +00:00
)
2019-08-23 13:56:03 +00:00
), event_handler_type=ControlEventHandler)
2019-07-15 11:43:34 +00:00
# Web IDE backend
2019-07-24 13:52:38 +00:00
ide_eh = eh_factory.build(IdeHandler(
patterns=['/home/user/workdir/*', '/srv/webservice/user_ops.py']
2019-08-23 13:56:03 +00:00
), event_handler_type=ControlEventHandler)
deploy_eh = eh_factory.build(DeployHandler())
2019-07-15 11:43:34 +00:00
# Web shell backend
2019-07-24 13:52:38 +00:00
terminal_eh = eh_factory.build(TerminalHandler(
port=TFWENV.TERMINADO_PORT,
user=TAOENV.USER,
working_directory=TFWENV.TERMINADO_WD,
2019-07-24 13:52:38 +00:00
histfile=TFWENV.HISTFILE
2019-08-23 13:56:03 +00:00
), event_handler_type=ControlEventHandler)
2019-07-15 11:43:34 +00:00
# Handles 'deploy' button clicks
2019-07-24 13:52:38 +00:00
processmanager_eh = eh_factory.build(ProcessHandler(
supervisor_uri=TFWENV.SUPERVISOR_HTTP_URI
2019-08-23 13:56:03 +00:00
), event_handler_type=ControlEventHandler)
2019-07-15 11:43:34 +00:00
# Sends live logs of webservice process to frontend
2019-07-24 13:52:38 +00:00
logmonitor_eh = eh_factory.build(ProcessLogHandler(
2018-05-30 13:23:54 +00:00
process_name='webservice',
2019-07-24 13:52:38 +00:00
supervisor_uri=TFWENV.SUPERVISOR_HTTP_URI,
log_tail=2000
2019-08-23 13:56:03 +00:00
), event_handler_type=ControlEventHandler)
2019-07-15 11:43:34 +00:00
# Proxies frontend API calls to frontend
2019-08-23 13:56:03 +00:00
frontend_eh = eh_factory.build(FrontendProxyHandler(), event_handler_type=ControlEventHandler)
2019-08-27 11:08:41 +00:00
ready = FrontendReadyHandler('step_1')
ready_eh = eh_factory.build(ready)
ready.stop = ready_eh.stop
2019-08-23 14:18:58 +00:00
message_queue_eh = eh_factory.build(MessageQueueHandler(25), event_handler_type=ControlEventHandler)
# Writes live logs to console on frontend
console_logs_eh = eh_factory.build(ConsoleLogsHandler(stream='stdout'))
2019-07-15 11:43:34 +00:00
# Replace these with your custom event handlers
# Echoes executed commands to messages
cenator_eh = eh_factory.build(CenatorHandler())
2019-07-15 11:43:34 +00:00
# Echoes FSM steps
2019-07-12 21:26:57 +00:00
message_fsm_steps_eh = eh_factory.build(
2019-07-24 13:52:38 +00:00
messageFSMStepsHandler,
2019-07-12 21:26:57 +00:00
event_handler_type=FSMAwareEventHandler
)
2019-07-15 11:43:34 +00:00
# Catches special commands
2019-07-24 13:52:38 +00:00
commands_eh = eh_factory.build(TestCommandsHandler(
2019-07-12 21:26:57 +00:00
bashrc=f'/home/{TAOENV.USER}/.bashrc'
))
2019-07-08 09:42:03 +00:00
setup_signal_handlers()
IOLoop.current().start()
if __name__ == '__main__':
main()