Add MemChart widget and column

This commit is contained in:
Joanna Rutkowska 2010-09-16 18:49:36 +02:00
parent b5c9ff2690
commit 874e2366ce

View File

@ -31,6 +31,7 @@ from qubes.qubes import QubesVmLabels
from qubes.qubes import dry_run from qubes.qubes import dry_run
from qubes.qubes import qubes_guid_path from qubes.qubes import qubes_guid_path
from qubes.qubes import QubesDaemonPidfile from qubes.qubes import QubesDaemonPidfile
from qubes.qubes import QubesHost
import qubesmanager.qrc_resources import qubesmanager.qrc_resources
import ui_newappvmdlg import ui_newappvmdlg
@ -185,6 +186,47 @@ class LoadChartWidget (QWidget):
if val > 0: if val > 0:
p.drawLine (W - i*dx - dx, H , W - i*dx - dx, H - (H - 5) * val/100) p.drawLine (W - i*dx - dx, H , W - i*dx - dx, H - (H - 5) * val/100)
class MemChartWidget (QWidget):
def __init__(self, vm, parent = None):
super (MemChartWidget, self).__init__(parent)
self.load = vm.get_mem()*100/qubes_host.memory_total if vm.is_running() else 0
assert self.load >= 0 and self.load <= 100, "mem = {0}".format(self.load)
self.load_history = [self.load]
def update_load (self, vm):
self.load = vm.get_mem()*100/qubes_host.memory_total if vm.is_running() else 0
assert self.load >= 0 and self.load <= 100, "load = {0}".format(self.load)
self.load_history.append (self.load)
self.repaint()
def paintEvent (self, Event = None):
p = QPainter (self)
dx = 4
W = self.width()
H = self.height() - 5
N = len(self.load_history)
if N > W/dx:
tail = N - W/dx
N = W/dx
self.load_history = self.load_history[tail:]
assert len(self.load_history) == N
for i in range (0, N-1):
val = self.load_history[N- i - 1]
hue = 120
sat = 70 + val*(255-70)/100
color = QColor.fromHsv (hue, sat, 255)
pen = QPen (color)
pen.setWidth(dx-1)
p.setPen(pen)
if val > 0:
p.drawLine (W - i*dx - dx, H , W - i*dx - dx, H - (H - 5) * val/100)
class VmRowInTable(object): class VmRowInTable(object):
def __init__(self, vm, row_no, table): def __init__(self, vm, row_no, table):
self.vm = vm self.vm = vm
@ -198,10 +240,15 @@ class VmRowInTable(object):
self.load_widget = LoadChartWidget(vm) self.load_widget = LoadChartWidget(vm)
table.setCellWidget(row_no, 1, self.load_widget) table.setCellWidget(row_no, 1, self.load_widget)
self.mem_widget = MemChartWidget(vm)
table.setCellWidget(row_no, 2, self.mem_widget)
def update(self, counter): def update(self, counter):
self.info_widget.update_vm_state(self.vm) self.info_widget.update_vm_state(self.vm)
if counter % 3 == 0: if counter % 3 == 0:
self.load_widget.update_load(self.vm) self.load_widget.update_load(self.vm)
self.mem_widget.update_load(self.vm)
class NewAppVmDlg (QDialog, ui_newappvmdlg.Ui_NewAppVMDlg): class NewAppVmDlg (QDialog, ui_newappvmdlg.Ui_NewAppVMDlg):
def __init__(self, parent = None): def __init__(self, parent = None):
@ -247,7 +294,7 @@ class ThreadMonitor(QObject):
class VmManagerWindow(QMainWindow): class VmManagerWindow(QMainWindow):
columns_widths = [200, 150] columns_widths = [200, 150, 150]
row_height = 50 row_height = 50
max_visible_rows = 14 max_visible_rows = 14
update_interval = 1000 # in msec update_interval = 1000 # in msec
@ -310,6 +357,7 @@ class VmManagerWindow(QMainWindow):
self.table.setAlternatingRowColors(True) self.table.setAlternatingRowColors(True)
self.table.verticalHeader().hide() self.table.verticalHeader().hide()
self.table.horizontalHeader().hide() self.table.horizontalHeader().hide()
#self.table.setHorizontalHeaderLabels (["VM name & state", "CPU Load", "Memory Use"])
self.table.setGridStyle(Qt.NoPen) self.table.setGridStyle(Qt.NoPen)
self.table.setSortingEnabled(False) self.table.setSortingEnabled(False)
self.table.setSelectionBehavior(QTableWidget.SelectRows) self.table.setSelectionBehavior(QTableWidget.SelectRows)
@ -736,6 +784,9 @@ def main():
lock.create_pidfile() lock.create_pidfile()
global qubes_host
qubes_host = QubesHost()
global app global app
app = QApplication(sys.argv) app = QApplication(sys.argv)
app.setOrganizationName("The Qubes Project") app.setOrganizationName("The Qubes Project")