class LogBrowser(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_LogBrowser() self.ui.setupUi(self) self.ui.comboBox.currentIndexChanged.connect(self.logChanged) self.model = LogInfo() self.model.setLogFile('/var/log/syslog') self.ui.textBrowser.append(''.join(self.model.readLastLines())) self.model.lineAdded.connect(self.addLogEntry) def addLogEntry(self, line): self.ui.textBrowser.append(line) def logChanged(self, index): paths = [ '/var/log/syslog', '/var/log/messages', '/var/log/kern.log', '/var/log/auth.log'] path = paths[index] self.model.setLogFile(path) self.ui.textBrowser.setPlainText(''.join(self.model.readLastLines()))
class LogMonitorServerProtocol(WampServerProtocol): """ This is simple log browser server protocol. As with other server classes model is created, when new connection is established, and deleted when client closes websocket connection """ uri = "http://system-monitor.com" def onSessionOpen(self): """ When connection is established, we create our model instances and register them for RPC. that's it. """ # set up process model self.logModel = LogInfo() self.logModel.signalNamespace(self, "logModel") self.logModel.setLogFile("/var/log/syslog") # expose model methods for RPC self.registerMethodForRpc( self.uri + "/logModel.readLastLines", self.logModel, lambda i: self.logModel.readLastLines() ) # self.registerForRpc(self.uri+ '/logModel', self) self.registerMethodForRpc( self.uri + "/logModel.changeLogFile", self, lambda i, logNum: self.changeLogFile(logNum) ) @exportRpc def changeLogFile(self, logNum): paths = ["/var/log/syslog", "/var/log/messages", "/var/log/kern.log", "/var/log/auth.log"] log = paths[int(logNum)] self.logModel.setLogFile(log) def connectionLost(self, reason): """ When connection is gone (i.e. client close window, navigated away from the page), stop the model timer, which holds last reference to model, and delete the model """ WampServerProtocol.connectionLost(self, reason) # self.logModel.timer.stop() self.logModel = None