Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/pr/65' into more-info
Browse files Browse the repository at this point in the history
* origin/pr/65:
  Added more information to domains widget
  Added more information to domains widget
  • Loading branch information
marmarek committed Jun 24, 2019
2 parents 57ddcf8 + b2f8785 commit a60e7b9
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 7 deletions.
Binary file added icons/outdated.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
100 changes: 96 additions & 4 deletions qui/decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,103 @@ def __init__(self, vm, margins=(5, 5)) -> None:
super(DomainDecorator, self).__init__(vm, margins)
self.vm = vm

class VMName(Gtk.Box):
def __init__(self, vm):
super(DomainDecorator.VMName, self).__init__()
self.vm = vm

self.template_name = None
self.netvm_name = None
self.cur_storage = None
self.max_storage = None

self.updates_available = False
self.outdated = False

self.label = Gtk.Label(xalign=0)
if self.vm:
self.label.set_label(self.vm.name)
else:
self.label.set_markup('<b>Qube</b>')
self.pack_start(self.label, False, False, 0)

self.outdated_icon = create_icon('outdated')
self.updateable_icon = create_icon('software-update-available')

self.outdated_icon.set_no_show_all(True)
self.updateable_icon.set_no_show_all(True)

self.updateable_icon.set_tooltip_text("Updates available")
self.outdated_icon.set_tooltip_text(
"Qube must be restarted to reflect changes in template")

self.update_outdated(False)
self.update_updateable()

self.pack_start(self.outdated_icon, False, False, 3)
self.pack_start(self.updateable_icon, False, True, 3)

def update_outdated(self, state):
self.outdated_icon.set_visible(state)
self.outdated = state
self.update_tooltip()

def update_updateable(self):
if self.vm is None:
return
updates_state = self.vm.features.get('updates-available', False)
self.updateable_icon.set_visible(updates_state)
self.updates_available = updates_state
self.update_tooltip()

def update_tooltip(self,
netvm_changed=False,
storage_changed=False):

if self.vm is None:
return

if not self.template_name:
self.template_name = getattr(self.vm, 'template', None)
self.template_name = "None" if not self.template_name \
else str(self.template_name)

if not self.netvm_name or netvm_changed:
self.netvm_name = getattr(self.vm, 'netvm', None)
self.netvm_name = "None" if not self.netvm_name \
else str(self.netvm_name)

if not self.cur_storage or storage_changed:
self.cur_storage = self.vm.get_disk_utilization() / 1024 ** 3

if not self.max_storage or storage_changed:
self.max_storage = self.vm.volumes['private'].size / 1024 ** 3

tooltip = \
"<b>{vmname}</b>\n" \
"Template: <b>{template}</b>\n" \
"Networking: <b>{netvm}</b>\n" \
"Private storage: <b>{current_storage:.2f}GB/" \
"{max_storage:.2f}GB ({perc_storage:.1%})</b>".format(
vmname=self.vm.name,
template=self.template_name,
netvm=self.netvm_name,
current_storage=self.cur_storage,
max_storage=self.max_storage,
perc_storage=self.cur_storage / self.max_storage)

if self.outdated:
tooltip += "\n\nRestart qube to " \
"apply changes in template."

if self.updates_available:
tooltip += "\n\nUpdates available."

self.label.set_tooltip_markup(tooltip)

def name(self):
label = Gtk.Label(xalign=0)
label.set_markup('<b>Qube</b>')
self.set_margins(label)
return label
namebox = DomainDecorator.VMName(self.vm)
return namebox

class VMCPU(Gtk.Box):
def __init__(self):
Expand Down
26 changes: 23 additions & 3 deletions qui/tray/domains.py
Original file line number Diff line number Diff line change
Expand Up @@ -298,11 +298,10 @@ def update_state(self, state):
self.show_spinner()
colormap = {'Paused': 'grey', 'Crashed': 'red', 'Transient': 'red'}
if state in colormap:
self.name.set_markup('<span color=\'{}\'>{}</span>'.format(
self.name.label.set_markup('<span color=\'{}\'>{}</span>'.format(
colormap[state], self.vm.name))
else:
self.name.set_label(self.vm.name)

self.name.label.set_label(self.vm.name)
self._set_submenu(state)

def update_stats(self, memory_kb, cpu_usage):
Expand Down Expand Up @@ -362,6 +361,13 @@ def register_events(self):
self.dispatcher.add_handler('domain-stopped', self.check_pause_notify)
self.dispatcher.add_handler('domain-shutdown', self.check_pause_notify)

self.dispatcher.add_handler('domain-feature-set:updates-available',
self.feature_change)
self.dispatcher.add_handler('domain-feature-delete:updates-available',
self.feature_change)
self.dispatcher.add_handler('property-set:netvm',
self.property_change)

self.stats_dispatcher.add_handler('vm-stats', self.update_stats)

def show_menu(self, _, event):
Expand All @@ -370,6 +376,7 @@ def show_menu(self, _, event):
for vm in sorted(self.menu_items):
self.tray_menu.remove(self.menu_items[vm])
menu.add(self.menu_items[vm])
self.menu_items[vm].name.update_tooltip(storage_changed=True)
menu.add(Gtk.SeparatorMenuItem())
menu.add(QubesManagerItem())
menu.show_all()
Expand Down Expand Up @@ -461,8 +468,21 @@ def add_domain_item(self, vm, _event, **_kwargs):
self.tray_menu.insert(domain_item, position)
self.menu_items[vm] = domain_item

def property_change(self, vm, *_args, **_kwargs):
if vm not in self.menu_items:
return
self.menu_items[vm].name.update_tooltip(netvm_changed=True)

def feature_change(self, vm, *_args, **_kwargs):
if vm not in self.menu_items:
return
self.menu_items[vm].name.update_updateable()

def remove_domain_item(self, vm, _event, **_kwargs):
''' Remove the menu item for the specified domain from the tray'''
for item in self.menu_items.values():
if getattr(item.vm, 'template', None) == vm:
item.name.update_outdated(True)
if vm not in self.menu_items:
return
vm_widget = self.menu_items[vm]
Expand Down
3 changes: 3 additions & 0 deletions rpm_spec/qubes-desktop-linux-manager.spec.in
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,9 @@ cp autostart/qui-clipboard.desktop $RPM_BUILD_ROOT/etc/xdg/autostart
cp autostart/qui-disk-space.desktop $RPM_BUILD_ROOT/etc/xdg/autostart
cp autostart/qui-updates.desktop $RPM_BUILD_ROOT/etc/xdg/autostart
mkdir -p $RPM_BUILD_ROOT/usr/share/icons/Adwaita/22x22/devices/
mkdir -p $RPM_BUILD_ROOT/usr/share/icons/Adwaita/22x22/status/
cp icons/22x22/generic-usb.png $RPM_BUILD_ROOT/usr/share/icons/Adwaita/22x22/devices/generic-usb.png
cp icons/outdated.png $RPM_BUILD_ROOT/usr/share/icons/Adwaita/22x22/status/
mkdir -p $RPM_BUILD_ROOT/usr/share/applications
cp qubes-update-gui.desktop $RPM_BUILD_ROOT/usr/share/applications/
mkdir -p $RPM_BUILD_ROOT/usr/lib/qubes/
Expand Down Expand Up @@ -131,6 +133,7 @@ gtk-update-icon-cache %{_datadir}/icons/Adwaita &>/dev/null || :
/etc/xdg/autostart/qui-disk-space.desktop
/etc/xdg/autostart/qui-updates.desktop
/usr/share/icons/Adwaita/22x22/devices/generic-usb.png
/usr/share/icons/Adwaita/22x22/status/outdated.png
/usr/share/applications/qubes-update-gui.desktop
/usr/bin/widget-wrapper
/lib/systemd/user/[email protected]
Expand Down

0 comments on commit a60e7b9

Please sign in to comment.