From 9095a9f85a13bbcb594e31773be4637eafe73f91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krist=C3=B3f=20T=C3=B3th?= Date: Wed, 24 Jul 2019 15:52:38 +0200 Subject: [PATCH] Comply new package structure --- controller/Dockerfile | 4 +- controller/opt/server.py | 23 ++++----- ...m_event_handlers.py => custom_handlers.py} | 29 ++++++------ solvable/src/event_handler_main.py | 47 +++++++++++-------- solvable/src/pipe_io_main.py | 4 +- solvable/src/test_fsm.py | 6 +-- 6 files changed, 58 insertions(+), 55 deletions(-) rename solvable/src/{custom_event_handlers.py => custom_handlers.py} (57%) diff --git a/controller/Dockerfile b/controller/Dockerfile index d09b2fd..6c1afeb 100644 --- a/controller/Dockerfile +++ b/controller/Dockerfile @@ -2,8 +2,8 @@ FROM avatao/controller:debian-buster USER root ENV PYTHONPATH="/usr/local/lib" \ - TFW_PUBLISHER_PORT=7654 \ - TFW_RECEIVER_PORT=8765 \ + TFW_PUB_PORT=7654 \ + TFW_PULL_PORT=8765 \ TFW_AUTH_KEY="/tmp/tfw-auth.key" \ CONTROLLER_PORT=5555 diff --git a/controller/opt/server.py b/controller/opt/server.py index 2fa5b44..f2c1bb6 100644 --- a/controller/opt/server.py +++ b/controller/opt/server.py @@ -4,8 +4,8 @@ import json from tornado.ioloop import IOLoop from tornado.web import RequestHandler, Application -from tfw.builtins import FSMAwareEventHandler -from tfw.main import EventHandlerFactory +from tfw.event_handlers import FSMAwareEventHandler +from tfw.main import EventHandlerFactory, setup_signal_handlers class ControllerPostHandler(RequestHandler): @@ -20,23 +20,18 @@ class ControllerPostHandler(RequestHandler): })) -class ControllerEventHandler(FSMAwareEventHandler): - def handle_event(self, message): - pass - - if __name__ == '__main__': - controller = ControllerEventHandler('controller') - controller_eh = EventHandlerFactory().build(controller) + controller_eh = EventHandlerFactory().build( + lambda *_: None, + event_handler_type=FSMAwareEventHandler + ) application = Application([( f'/{os.environ["SECRET"]}', ControllerPostHandler, - {'controller': controller} + {'controller': controller_eh} )]) application.listen(os.environ['CONTROLLER_PORT']) - try: - IOLoop.instance().start() - finally: - controller.cleanup() + setup_signal_handlers() + IOLoop.instance().start() diff --git a/solvable/src/custom_event_handlers.py b/solvable/src/custom_handlers.py similarity index 57% rename from solvable/src/custom_event_handlers.py rename to solvable/src/custom_handlers.py index 8c2b82e..48c7220 100644 --- a/solvable/src/custom_event_handlers.py +++ b/solvable/src/custom_handlers.py @@ -1,15 +1,15 @@ import logging from ast import literal_eval -from tfw.components import MessageSender -from tfw.builtins import TerminalCommandsEventHandler +from tfw.components.frontend import MessageSender +from tfw.components.terminal import TerminalCommandsHandler from tfw.main import TFWUplinkConnector LOG = logging.getLogger(__name__) -class CenatorEventHandler: +class CenatorHandler: keys = ['history.bash'] def handle_event(self, message, server_connector): # pylint: disable=no-self-use @@ -18,7 +18,7 @@ class CenatorEventHandler: MessageSender(server_connector).send('JOHN CENA', f'You\'ve executed "{command}"') -class TestCommandsEventHandler(TerminalCommandsEventHandler): +class TestCommandsHandler(TerminalCommandsHandler): # pylint: disable=unused-argument,attribute-defined-outside-init,no-self-use def command_sendmessage(self, *args): if not args: @@ -34,14 +34,13 @@ class TestCommandsEventHandler(TerminalCommandsEventHandler): TFWUplinkConnector().send_message(literal_eval(args[0])) -class MessageFSMStepsEventHandler: - def handle_event(self, message, server_connector): # pylint: disable=no-self-use - """ - When the FSM steps this method is invoked. - Receives a 'data' field from an fsm_update message as kwargs. - """ - MessageSender(server_connector).send( - 'FSM info', - f'FSM has stepped from state "{message["last_event"]["from_state"]}" ' - f'to state "{message["current_state"]}" in response to trigger "{message["last_event"]["trigger"]}"' - ) +def messageFSMStepsHandler(message, server_connector): + """ + When the FSM steps this method is invoked. + Receives a 'data' field from an fsm_update message as kwargs. + """ + MessageSender(server_connector).send( + 'FSM info', + f'FSM has stepped from state "{message["last_event"]["from_state"]}" ' + f'to state "{message["current_state"]}" in response to trigger "{message["last_event"]["trigger"]}"' + ) diff --git a/solvable/src/event_handler_main.py b/solvable/src/event_handler_main.py index de74952..fe670e5 100644 --- a/solvable/src/event_handler_main.py +++ b/solvable/src/event_handler_main.py @@ -6,16 +6,17 @@ from tornado.ioloop import IOLoop from tfw.fsm import YamlFSM from tfw.event_handlers import FSMAwareEventHandler -from tfw.builtins import IdeEventHandler, TerminalEventHandler, FrontendEventHandler -from tfw.builtins import LogMonitoringEventHandler, ProcessManagingEventHandler -from tfw.builtins import DirectorySnapshottingEventHandler, FSMManagingEventHandler +from tfw.components.ide import IdeHandler +from tfw.components.terminal import TerminalHandler +from tfw.components.frontend import FrontendHandler +from tfw.components.process_management import ProcessHandler, ProcessLogHandler +from tfw.components.snapshots import SnapshotHandler +from tfw.components.fsm import FSMHandler from tfw.main import EventHandlerFactory, setup_signal_handlers from tfw.logging import Log, Logger, LogFormatter, VerboseLogFormatter -from tfw.config import TFWENV -from tao.config import TAOENV +from tfw.config import TFWENV, TAOENV -from custom_event_handlers import MessageFSMStepsEventHandler -from custom_event_handlers import CenatorEventHandler, TestCommandsEventHandler +from custom_handlers import CenatorHandler, TestCommandsHandler, messageFSMStepsHandler LOG = logging.getLogger(__name__) @@ -31,7 +32,7 @@ def main(): eh_factory = EventHandlerFactory() # TFW builtin EventHandlers (required for their respective functionalities) # TFW FSM - fsm_eh = eh_factory.build(FSMManagingEventHandler( + fsm_eh = eh_factory.build(FSMHandler( fsm_type=partial( YamlFSM, 'test_fsm.yml', @@ -39,42 +40,50 @@ def main(): ) )) # Web IDE backend - ide_eh = eh_factory.build(IdeEventHandler( + ide_eh = eh_factory.build(IdeHandler( allowed_directories=[TFWENV.IDE_WD, TFWENV.WEBSERVICE_DIR], directory=TFWENV.IDE_WD, exclude=['*.pyc'] )) # Web shell backend - terminal_eh = eh_factory.build(TerminalEventHandler()) + terminal_eh = eh_factory.build(TerminalHandler( + port=TFWENV.TERMINADO_PORT, + user=TAOENV.USER, + workind_directory=TFWENV.TERMINADO_WD, + histfile=TFWENV.HISTFILE + )) # Handles 'deploy' button clicks - processmanager_eh = eh_factory.build(ProcessManagingEventHandler( - log_tail=2000 + processmanager_eh = eh_factory.build(ProcessHandler( + supervisor_uri=TFWENV.SUPERVISOR_HTTP_URI, + log_tail=2000, )) # Sends live logs of webservice process to frontend - logmonitor_eh = eh_factory.build(LogMonitoringEventHandler( + logmonitor_eh = eh_factory.build(ProcessLogHandler( process_name='webservice', + supervisor_uri=TFWENV.SUPERVISOR_HTTP_URI, log_tail=2000 )) # Manages filesystem snapshots of directories - snapshot_eh = eh_factory.build(DirectorySnapshottingEventHandler( + snapshot_eh = eh_factory.build(SnapshotHandler( directories=[ TFWENV.IDE_WD, TFWENV.WEBSERVICE_DIR - ] + ], + snapshots_dir=TFWENV.SNAPSHOTS_DIR )) # Proxies frontend API calls to frontend - frontend_eh = eh_factory.build(FrontendEventHandler()) + frontend_eh = eh_factory.build(FrontendHandler()) # Replace these with your custom event handlers # Echoes executed commands to messages - cenator_eh = eh_factory.build(CenatorEventHandler()) + cenator_eh = eh_factory.build(CenatorHandler()) # Echoes FSM steps message_fsm_steps_eh = eh_factory.build( - MessageFSMStepsEventHandler(), + messageFSMStepsHandler, event_handler_type=FSMAwareEventHandler ) # Catches special commands - commands_eh = eh_factory.build(TestCommandsEventHandler( + commands_eh = eh_factory.build(TestCommandsHandler( bashrc=f'/home/{TAOENV.USER}/.bashrc' )) diff --git a/solvable/src/pipe_io_main.py b/solvable/src/pipe_io_main.py index 89b7008..1b6abf9 100644 --- a/solvable/src/pipe_io_main.py +++ b/solvable/src/pipe_io_main.py @@ -3,7 +3,7 @@ from sys import stderr from tornado.ioloop import IOLoop -from tfw.builtins import PipeIOEventHandler +from tfw.components.pipe_io import PipeIOHandler from tfw.config import TFWENV from tfw.logging import Log, Logger, LogFormatter, VerboseLogFormatter from tfw.main import EventHandlerFactory, setup_signal_handlers @@ -21,7 +21,7 @@ def main(): eh_factory = EventHandlerFactory() - json_pipe_eh = eh_factory.build(PipeIOEventHandler( + json_pipe_eh = eh_factory.build(PipeIOHandler( '/tmp/tfw_send', '/tmp/tfw_recv' )) diff --git a/solvable/src/test_fsm.py b/solvable/src/test_fsm.py index f4f7639..0d41590 100644 --- a/solvable/src/test_fsm.py +++ b/solvable/src/test_fsm.py @@ -3,8 +3,8 @@ from os.path import exists from tfw.fsm import LinearFSM -from tfw.components import MessageSender -from tfw.builtins import TFWServerUplinkConnector +from tfw.components.frontend import MessageSender +from tfw.main import TFWUplinkConnector class TestFSM(LinearFSM): @@ -12,7 +12,7 @@ class TestFSM(LinearFSM): def __init__(self): super().__init__(6) - self.uplink = TFWServerUplinkConnector() + self.uplink = TFWUplinkConnector() self.message_sender = MessageSender(self.uplink) self.subscribe_predicate('step_3', self.step_3_allowed)