From 3b42cd7c0ae9d4b8198ccbd85e6cbbe61145d53b Mon Sep 17 00:00:00 2001 From: Eugeni Dodonov Date: Tue, 27 Apr 2010 01:43:11 +0000 Subject: Added UI for periodic checks. --- src/msec/msecgui.py | 109 +++++++++++++++++++++++++--------------------------- src/msec/tools.py | 14 +++++++ 2 files changed, 66 insertions(+), 57 deletions(-) diff --git a/src/msec/msecgui.py b/src/msec/msecgui.py index d33108e..fefc3a9 100755 --- a/src/msec/msecgui.py +++ b/src/msec/msecgui.py @@ -545,8 +545,9 @@ class MsecGui: """Builds the security summary UI""" vbox = gtk.VBox(homogeneous=False, spacing=20) - def create_security_item(text, icon=None, s1=None, s2=None): - """Helper function to create security items""" + table = gtk.Table(4, 4, False) + + def create_security_item(table, row, text, icon=None): # show logo banner = gtk.HBox(homogeneous=False, spacing=10) if icon: @@ -556,50 +557,48 @@ class MsecGui: pixbuf = gtk.gdk.pixbuf_new_from_file(icon) image.set_from_pixbuf(pixbuf) banner.pack_start(image, False, False) - if s1: - s1.add_widget(image) + table.attach(banner, 0, 1, row, row+1, gtk.EXPAND | gtk.FILL, 0, 0, 0) except: print "Unable to load icon %s: %s" % (icon, sys.exc_value) label = gtk.Label(text) label.set_property("xalign", 0.0) label.modify_font(pango.FontDescription("12")) - banner.pack_start(label, False, False) - if s2: - s1.add_widget(image) - return banner + label.set_property("xalign", 0.0) + label.set_property("yalign", 0.5) - # size groups - sizegroup1 = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) - sizegroup2 = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) - sizegroup3 = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) - sizegroup4 = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + table.attach(label, 1, 2, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) + row = 0 # firewall - item = create_security_item(_("Firewall"), "/usr/share/mcc/themes/default/firewall-mdk.png", sizegroup1, sizegroup2) - # spacer - item.add(gtk.Label()) - v = gtk.VBox(False, False) + create_security_item(table, row, _("Firewall"), "/usr/share/mcc/themes/default/firewall-mdk.png") firewall_status = tools.find_firewall_info(log) label = gtk.Label(firewall_status) label.set_property("xalign", 0.0) label.set_property("yalign", 0.5) - v.pack_start(label) + table.attach(label, 2, 3, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) + button = gtk.Button(_("Configure")) button.connect('clicked', self.run_configure_app, tools.FIREWALL_CMD) - # size groups - sizegroup3.add_widget(label) - sizegroup4.add_widget(button) - button_v = gtk.VBox(False, False) - button_v.pack_start(button, True, False) - item.pack_start(v, False, False, padding=12) - item.pack_start(button_v, False, False, padding=12) - vbox.pack_start(item, False, False) + table.attach(button, 3, 4, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) + vbox.pack_start(table, False, False) + + row += 1 + + # updates + create_security_item(table, row, _("Updates"), "/usr/share/mcc/themes/default/mdkonline-mdk.png") + updates = tools.get_updates_status(log) + label = gtk.Label(updates) + label.set_property("xalign", 0.0) + label.set_property("yalign", 0.5) + table.attach(label, 2, 3, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) + button = gtk.Button(_("Update now")) + button.connect('clicked', self.run_configure_app, tools.UPDATE_CMD) + table.attach(button, 3, 4, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) + + row += 1 # security - item = create_security_item(_("Security"), "/usr/share/mcc/themes/default/security-mdk.png", sizegroup1, sizegroup2) - # spacer - item.add(gtk.Label()) - v = gtk.VBox(False, False) + create_security_item(table, row, _("Security"), "/usr/share/mcc/themes/default/security-mdk.png") baselevel = self.msecconfig.get("BASE_LEVEL") if baselevel == config.NONE_LEVEL: msec_status = [_("Msec is disabled")] @@ -618,42 +617,38 @@ class MsecGui: label = gtk.Label("\n".join(msec_status)) label.set_property("xalign", 0.0) label.set_property("yalign", 0.5) - v.pack_start(label) + table.attach(label, 2, 3, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) + button = gtk.Button(_("Configure")) button.connect('clicked', lambda x: self.main_notebook.set_current_page(1)) - # size groups - sizegroup3.add_widget(label) - sizegroup4.add_widget(button) - button_v = gtk.VBox(False, False) - button_v.pack_start(button, True, False) - item.pack_start(v, False, False, padding=12) - item.pack_start(button_v, False, False, padding=12) - vbox.pack_start(item, False, False) + table.attach(button, 3, 4, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) - # updates - item = create_security_item(_("Updates"), "/usr/share/mcc/themes/default/mdkonline-mdk.png", sizegroup1, sizegroup2) - # spacer - item.add(gtk.Label()) - v = gtk.VBox(False, False) - updates = tools.get_updates_status(log) - label = gtk.Label(updates) + row += 1 + + # msec reports + label = gtk.Label(_("Periodic checks")) label.set_property("xalign", 0.0) label.set_property("yalign", 0.5) - v.pack_start(label) - button = gtk.Button(_("Update now")) - button.connect('clicked', self.run_configure_app, tools.UPDATE_CMD) - # size groups - sizegroup3.add_widget(label) - sizegroup4.add_widget(button) - button_v = gtk.VBox(False, False) - button_v.pack_start(button, True, False) - item.pack_start(v, False, False, padding=12) - item.pack_start(button_v, False, False, padding=12) + label.modify_font(pango.FontDescription("11")) + table.attach(label, 2, 3, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) + row += 1 + for check, logfile, updated_n, updated in tools.periodic_check_status(log): + if not updated: + updated = _("Never") + label = gtk.Label(_("Check: %s. Last run: %s") % (check, updated)) + label.set_property("xalign", 0.0) + table.attach(label, 2, 3, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) - vbox.pack_start(item, False, False) + button = gtk.Button(_("Run now")) + button.connect('clicked', self.show_test_results, logfile) + table.attach(button, 3, 4, row, row + 1, gtk.EXPAND | gtk.FILL, 0, 0, 0) + row += 1 return vbox + def show_test_results(self, widget, logfile): + """Shows results for the test""" + def run_configure_app(self, widget, cmd): """Runs application-specific configuration""" os.system(cmd) diff --git a/src/msec/tools.py b/src/msec/tools.py index 3a6b4ca..b628d96 100644 --- a/src/msec/tools.py +++ b/src/msec/tools.py @@ -50,3 +50,17 @@ def get_updates_status(log, updatedir="/var/lib/urpmi"): log.error(_("Unable to access %s: %s") % (updatedir, sys.exc_value)) status = _("Unable to determine update status") return status + +def periodic_check_status(log): + """Determines the state of last periodic checks""" + checks = [] + for check in [ "daily", "weekly", "monthly", "manual" ]: + current_log = "/var/log/security/mail.%s.today" % check + if os.access(current_log, os.R_OK): + ret = os.stat(current_log) + last_run = time.localtime(ret[stat.ST_MTIME]) + updated_s = time.strftime(locale.nl_langinfo(locale.D_T_FMT), last_run) + checks.append((check, current_log, last_run, updated_s)) + else: + checks.append((check, current_log, None, None)) + return checks -- cgit v1.2.1