Source code for paradrop.backend.log_sockjs

import json
from twisted.internet.protocol import Protocol, Factory
from twisted.internet.task import LoopingCall

from paradrop.base.output import out
from paradrop.core.container.log_provider import LogProvider

[docs]class LogSockJSProtocol(Protocol): def __init__(self, factory): self.factory = factory self.loop = LoopingCall(self.check_log) self.log_provider = None
[docs] def connectionMade(self): self.factory.transports.add(self.transport) out.info('sockjs /logs connected') self.log_provider = LogProvider(self.factory.chute) self.log_provider.attach() self.loop.start(1.0)
[docs] def check_log(self): logs = self.log_provider.get_logs() for log in logs: self.transport.write(json.dumps(log))
[docs] def connectionLost(self, reason): if self.transport in self.factory.transports: self.factory.transports.remove(self.transport) out.info('sockjs /logs disconnected') self.loop.stop() self.log_provider.detach() self.log_provider = None
[docs]class LogSockJSFactory(Factory): def __init__(self, chute): self.transports = set() self.chute = chute
[docs] def buildProtocol(self, addr): return LogSockJSProtocol(self)