mirror of
https://github.com/avatao-content/baseimage-tutorial-framework
synced 2025-06-29 00:15:11 +00:00
Make files observable and refactor event handlers
This commit is contained in:
@ -10,18 +10,28 @@ from tfw.components.inotify import InotifyObserver
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class IdeInotifyObserver(InotifyObserver):
|
||||
def __init__(self, paths):
|
||||
self.uplink = TFWServerUplinkConnector()
|
||||
super().__init__(paths)
|
||||
|
||||
def on_modified(self, event):
|
||||
LOG.debug(event)
|
||||
self.uplink.send_message({
|
||||
'key': 'ide',
|
||||
'data': {'command': 'reload'}
|
||||
}, Scope.WEBSOCKET)
|
||||
BUILD_ARTIFACTS = [
|
||||
"*.a",
|
||||
"*.class",
|
||||
"*.dll",
|
||||
"*.dylib",
|
||||
"*.elf",
|
||||
"*.exe",
|
||||
"*.jar",
|
||||
"*.ko",
|
||||
"*.la",
|
||||
"*.lib",
|
||||
"*.lo",
|
||||
"*.o",
|
||||
"*.obj",
|
||||
"*.out",
|
||||
"*.py[cod]",
|
||||
"*.so",
|
||||
"*.so.*",
|
||||
"*.tar.gz",
|
||||
"*.zip",
|
||||
"*__pycache__*"
|
||||
]
|
||||
|
||||
|
||||
class IdeEventHandler(FrontendEventHandlerBase):
|
||||
@ -60,7 +70,14 @@ class IdeEventHandler(FrontendEventHandlerBase):
|
||||
f'No file(s) in IdeEventHandler working_directory "{directory}"!'
|
||||
)
|
||||
|
||||
self.monitor = IdeInotifyObserver(self.filemanager.allowed_directories)
|
||||
self.monitor = InotifyObserver(self.filemanager.allowed_directories, exclude=BUILD_ARTIFACTS)
|
||||
def on_modified(event):
|
||||
LOG.debug(event)
|
||||
self.server_connector.send_message({
|
||||
'key': 'ide',
|
||||
'data': {'command': 'reload'}
|
||||
}, Scope.WEBSOCKET)
|
||||
self.monitor.on_modified = on_modified
|
||||
self.monitor.start()
|
||||
|
||||
self.commands = {
|
||||
|
@ -13,32 +13,26 @@ LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class LogInotifyObserver(InotifyObserver, SupervisorLogMixin):
|
||||
def __init__(self, process_name, log_tail=0):
|
||||
def __init__(self, server_connector, process_name, log_tail=0):
|
||||
self.prevent_log_recursion()
|
||||
self.uplink = TFWServerUplinkConnector()
|
||||
self.process_name = process_name
|
||||
self.server_connector = server_connector
|
||||
self._process_name = process_name
|
||||
self.log_tail = log_tail
|
||||
self.procinfo = self.supervisor.getProcessInfo(self.process_name)
|
||||
super().__init__(
|
||||
[dirname(self.procinfo['stdout_logfile']), dirname(self.procinfo['stderr_logfile'])],
|
||||
[self.procinfo['stdout_logfile'], self.procinfo['stderr_logfile']]
|
||||
)
|
||||
InotifyObserver.__init__(self, [self.procinfo['stdout_logfile'], self.procinfo['stderr_logfile']])
|
||||
|
||||
def reset(self, process_name, log_tail):
|
||||
self.process_name = process_name
|
||||
self.log_tail = log_tail
|
||||
self.procinfo = self.supervisor.getProcessInfo(self.process_name)
|
||||
self.paths = [
|
||||
dirname(self.procinfo['stdout_logfile']),
|
||||
dirname(self.procinfo['stderr_logfile'])
|
||||
]
|
||||
self.patterns = [
|
||||
self.procinfo['stdout_logfile'],
|
||||
self.procinfo['stderr_logfile']
|
||||
]
|
||||
@property
|
||||
def process_name(self):
|
||||
return self._process_name
|
||||
|
||||
@process_name.setter
|
||||
def process_name(self, process_name):
|
||||
self._process_name = process_name
|
||||
self.procinfo = self.supervisor.getProcessInfo(process_name)
|
||||
self.paths = [self.procinfo['stdout_logfile'], self.procinfo['stderr_logfile']]
|
||||
|
||||
def on_modified(self, event):
|
||||
self.uplink.send_message({
|
||||
self.server_connector.send_message({
|
||||
'key': 'processlog',
|
||||
'data': {
|
||||
'command': 'new_log',
|
||||
@ -67,7 +61,7 @@ class LogMonitoringEventHandler(FrontendEventHandlerBase):
|
||||
super().__init__(key)
|
||||
self.process_name = process_name
|
||||
self.log_tail = log_tail
|
||||
self.monitor = LogInotifyObserver(process_name, log_tail)
|
||||
self.monitor = LogInotifyObserver(self.server_connector, process_name, log_tail)
|
||||
self.monitor.start()
|
||||
|
||||
self.command_handlers = {
|
||||
@ -89,7 +83,7 @@ class LogMonitoringEventHandler(FrontendEventHandlerBase):
|
||||
:param data: TFW message data containing 'value'
|
||||
(name of the process to monitor)
|
||||
"""
|
||||
self.monitor.reset(data['value'], self.log_tail)
|
||||
self.monitor.process_name = data['value']
|
||||
|
||||
def handle_log_tail(self, data):
|
||||
"""
|
||||
@ -100,7 +94,7 @@ class LogMonitoringEventHandler(FrontendEventHandlerBase):
|
||||
:param data: TFW message data containing 'value'
|
||||
(new tail length)
|
||||
"""
|
||||
self.monitor.reset(self.process_name, data['value'])
|
||||
self.monitor.log_tail = data['value']
|
||||
|
||||
def cleanup(self):
|
||||
self.monitor.stop()
|
||||
|
@ -4,6 +4,7 @@
|
||||
import logging
|
||||
|
||||
from tfw.event_handlers import FrontendEventHandlerBase
|
||||
from tfw.components import BashMonitor
|
||||
from tfw.components.terminado_mini_server import TerminadoMiniServer
|
||||
from tfw.config import TFWENV
|
||||
from tao.config import TAOENV
|
||||
@ -21,13 +22,13 @@ class TerminalEventHandler(FrontendEventHandlerBase):
|
||||
a command to be executed.
|
||||
The API of each command is documented in their respective handler.
|
||||
"""
|
||||
def __init__(self, key, monitor):
|
||||
def __init__(self, key):
|
||||
"""
|
||||
:param key: key this EventHandler listens to
|
||||
:param monitor: tfw.components.HistoryMonitor instance to read command history from
|
||||
"""
|
||||
super().__init__(key)
|
||||
self._historymonitor = monitor
|
||||
self._historymonitor = BashMonitor(self.server_connector, TFWENV.HISTFILE)
|
||||
bash_as_user_cmd = ['sudo', '-u', TAOENV.USER, 'bash']
|
||||
|
||||
self.terminado_server = TerminadoMiniServer(
|
||||
@ -42,8 +43,7 @@ class TerminalEventHandler(FrontendEventHandlerBase):
|
||||
'read': self.read
|
||||
}
|
||||
|
||||
if self._historymonitor:
|
||||
self._historymonitor.start()
|
||||
self._historymonitor.start()
|
||||
self.terminado_server.listen()
|
||||
|
||||
@property
|
||||
@ -84,5 +84,4 @@ class TerminalEventHandler(FrontendEventHandlerBase):
|
||||
|
||||
def cleanup(self):
|
||||
self.terminado_server.stop()
|
||||
if self.historymonitor:
|
||||
self.historymonitor.stop()
|
||||
self.historymonitor.stop()
|
||||
|
Reference in New Issue
Block a user