class SystemWindow(QtGui.QWidget): def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_SystemWindow() self.ui.setupUi(self) self._model = SystemInfo() self._initInfoUi() def _initInfoUi(self): # fetch Distro information distroLabel = QtGui.QLabel() distroLabel.setText(self._model.getDistro()) kernelLabel = QtGui.QLabel() kernelLabel.setText("Kernel: " + self._model.getKernel()) sysInfoVbox = QtGui.QVBoxLayout() sysInfoVbox.addWidget(distroLabel) sysInfoVbox.addWidget(kernelLabel) sysInfoVbox.addStretch(1) sysInfoGroupBox = QtGui.QGroupBox("System information:") sysInfoGroupBox.setLayout(sysInfoVbox) # hardware info memoryLabel = QtGui.QLabel("Memory:") memoryLabelValue = QtGui.QLabel(self._model.getTotalMemory()) hardwareLayout = QtGui.QGridLayout() hardwareLayout.addWidget(memoryLabel, 0, 0) hardwareLayout.addWidget(memoryLabelValue, 0, 1) cpus = self._model.getCpu() for i, cpu in enumerate(cpus): procName = 'Processor #%s:' % (i) hardwareLayout.addWidget(QtGui.QLabel(procName), i + 1, 0) hardwareLayout.addWidget(QtGui.QLabel(cpu), i + 1, 1) hardwareGroupBox = QtGui.QGroupBox("Hardware information:") hardwareGroupBox.setLayout(hardwareLayout) # lay out groupboxes vertically groupBoxLayout = QtGui.QVBoxLayout() groupBoxLayout.addWidget(sysInfoGroupBox) groupBoxLayout.addWidget(hardwareGroupBox) groupBoxLayout.addStretch(1) self.ui.infoWidget.setLayout(groupBoxLayout)
def __init__(self, parent = None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_SystemWindow() self.ui.setupUi(self) self._model = SystemInfo() self._initInfoUi()
def onSessionOpen(self): """ When connection is established, we create our model instances and register them for RPC if needed. """ # create system info model and register methods for RPC self.infoModel = SystemInfo() self.registerMethodForRpc(self.uri + '/sysInfo.getTotalMemory', self.infoModel, lambda i: self.infoModel.getTotalMemory()) self.registerMethodForRpc(self.uri + '/sysInfo.getCpu', self.infoModel, lambda i: self.infoModel.getCpu()) self.registerMethodForRpc(self.uri + '/sysInfo.getKernel', self.infoModel, lambda i: self.infoModel.getKernel()) self.registerMethodForRpc(self.uri + '/sysInfo.getDistro', self.infoModel, lambda i: self.infoModel.getDistro())
class SystemInfoServerProtocol(WampServerProtocol): """ This is simple system info 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 if needed. """ # create system info model and register methods for RPC self.infoModel = SystemInfo() self.registerMethodForRpc(self.uri + '/sysInfo.getTotalMemory', self.infoModel, lambda i: self.infoModel.getTotalMemory()) self.registerMethodForRpc(self.uri + '/sysInfo.getCpu', self.infoModel, lambda i: self.infoModel.getCpu()) self.registerMethodForRpc(self.uri + '/sysInfo.getKernel', self.infoModel, lambda i: self.infoModel.getKernel()) self.registerMethodForRpc(self.uri + '/sysInfo.getDistro', self.infoModel, lambda i: self.infoModel.getDistro()) 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.infoModel = None