summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Sivak <msivak@redhat.com>2008-04-23 15:48:01 +0200
committerMartin Sivak <msivak@redhat.com>2008-04-23 15:48:01 +0200
commit5231fb4a9dfe0634c4fedad39fed940469028cf9 (patch)
tree0b956a0998070aaa5985be35946f8795fbfc43d5
parent623ce1116eafcafb8deb805f352698dc2684fca0 (diff)
downloadfirstaidkit-5231fb4a9dfe0634c4fedad39fed940469028cf9.tar.gz
firstaidkit-5231fb4a9dfe0634c4fedad39fed940469028cf9.tar.xz
firstaidkit-5231fb4a9dfe0634c4fedad39fed940469028cf9.zip
Issue reporting and Tasker interrupt
-rwxr-xr-xfirstaidkit3
-rw-r--r--frontend/firstaidkit.glade1
-rw-r--r--frontend/main.py86
-rw-r--r--pyfirstaidkit/interpret.py8
-rw-r--r--pyfirstaidkit/reporting.py2
5 files changed, 96 insertions, 4 deletions
diff --git a/firstaidkit b/firstaidkit
index d478dd7..603a30c 100755
--- a/firstaidkit
+++ b/firstaidkit
@@ -79,6 +79,9 @@ class Output(Thread):
if self._importance<=message["importance"]:
print "TREE %s FROM %s" % (message["title"], message["origin"].name,)
pprint.pprint(message["message"])
+ elif message["action"]==reporting.ISSUE:
+ print "ISSUE FROM %s" % (message["origin"].name,)
+ pprint.pprint(str(message["message"]))
else:
print "FIXME: Unknown message action %d!!" % (message["action"],)
print message
diff --git a/frontend/firstaidkit.glade b/frontend/firstaidkit.glade
index 80ea720..5195b36 100644
--- a/frontend/firstaidkit.glade
+++ b/frontend/firstaidkit.glade
@@ -711,6 +711,7 @@
<child>
<widget class="GtkButton" id="b_StopResults">
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Stop</property>
<property name="use_underline">True</property>
diff --git a/frontend/main.py b/frontend/main.py
index d200a58..0287fac 100644
--- a/frontend/main.py
+++ b/frontend/main.py
@@ -42,10 +42,11 @@ class CallbacksMainWindow(object):
if not self._running_lock.acquire(0):
return
- def _o(pages):
+ def _o(pages, stopbutton):
"""Always return False -> remove from the idle queue after first execution"""
for i in range(pages.get_n_pages()):
pages.get_nth_page(i).set_sensitive(True)
+ stopbutton.set_sensitive(False)
return False
def worker(*args):
@@ -58,7 +59,11 @@ class CallbacksMainWindow(object):
self._data.pages.set_current_page(-1)
for i in range(self._data.pages.get_n_pages())[:-1]:
self._data.pages.get_nth_page(i).set_sensitive(False)
- thread.start_new_thread(worker, (self._data.pages,))
+ self.on_b_ResetResults_activate(None)
+
+ stopbutton = self._glade.get_widget("b_StopResults")
+ stopbutton.set_sensitive(True)
+ thread.start_new_thread(worker, (self._data.pages, stopbutton))
#menu callbacks
def on_mainmenu_open_activate(self, widget, *args):
@@ -98,6 +103,7 @@ class CallbacksMainWindow(object):
self._tasker.end()
del self._tasker
del self._cfg
+ del self._data.result_list_iter
gtk.main_quit()
def on_mainmenu_about_activate(self, widget, *args):
@@ -246,10 +252,14 @@ class CallbacksMainWindow(object):
#results callbacks
def on_b_ResetResults_activate(self, widget, *args):
print "on_b_ResetResults_activate"
+ self._data.result_list_store.clear()
+ del self._data.result_list_iter
+ self._data.result_list_iter = dict()
return True
def on_b_StopResults_activate(self, widget, *args):
print "on_b_StopResults_activate"
+ self._tasker.interrupt()
return True
class CallbacksFlagList(object):
@@ -358,6 +368,7 @@ class MainWindow(object):
self.plugin_iter = {}
self.flow_list_data = set()
+ #flow combobox
for plname in pluginsystem.list():
p = pluginsystem.getplugin(plname)
piter = self.plugin_list_store.append(None, [False, "%s (%s)" % (p.name, p.version), p.description, ""])
@@ -379,12 +390,75 @@ class MainWindow(object):
self.flow_list.add_attribute(self.flow_list_rend_text, 'text', 0)
self.flow_list.set_active(self.flow_list_store_diagnose)
+ # results
+ self.result_list_store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_INT)
+ self.result_list = self._glade.get_widget("tree_Results")
+ self.result_list.set_model(self.result_list_store)
+ self.result_list_iter = {}
+
+ def result_rend_text_func(column, cell_renderer, tree_model, iter, user_data):
+ colors = [
+ gtk.gdk.Color(red=50000, green=50000, blue=50000),
+ gtk.gdk.Color(red=10000, green=50000, blue=10000),
+ gtk.gdk.Color(red=50000, green=10000, blue=10000),
+ gtk.gdk.Color(red=10000, green=10000, blue=50000)
+ ]
+ state = tree_model.get_value(iter, 3)
+
+ cell_renderer.set_property("cell-background-set", True)
+ cell_renderer.set_property("cell-background-gdk", colors[state])
+
+ if user_data==2 and state!=2:
+ cell_renderer.set_property("foreground-set", True)
+ cell_renderer.set_property("foreground-gdk", gtk.gdk.Color(red=40000, green=40000, blue=40000))
+ else:
+ cell_renderer.set_property("foreground-set", False)
+
+ cell_renderer.set_property("text", tree_model.get_value(iter, user_data))
+ return
+
+ self.result_rend_text = gtk.CellRendererText()
+
+ self.result_list_col_0 = gtk.TreeViewColumn('Name')
+ self.result_list_col_0.pack_start(self.result_rend_text, True)
+ self.result_list_col_0.set_cell_data_func(self.result_rend_text, result_rend_text_func, 0)
+
+ self.result_list_col_1 = gtk.TreeViewColumn('Status')
+ self.result_list_col_1.pack_start(self.result_rend_text, True)
+ self.result_list_col_1.set_cell_data_func(self.result_rend_text, result_rend_text_func, 1)
+
+ self.result_list_col_2 = gtk.TreeViewColumn('Description')
+ self.result_list_col_2.pack_start(self.result_rend_text, True)
+ self.result_list_col_2.set_cell_data_func(self.result_rend_text, result_rend_text_func, 2)
+
+ self.result_list_col_3 = gtk.TreeViewColumn('Status ID')
+ self.result_list_col_3.pack_start(self.result_rend_text, True)
+ self.result_list_col_3.add_attribute(self.result_rend_text, 'text', 3)
+ self.result_list_col_3.set_property("visible", False)
+
+ self.result_list.append_column(self.result_list_col_0)
+ self.result_list.append_column(self.result_list_col_1)
+ self.result_list.append_column(self.result_list_col_2)
+ self.result_list.append_column(self.result_list_col_3)
+ self.result_list.set_search_column(0)
+
def update(self, message):
def _o(func, *args, **kwargs):
"""Always return False -> remove from the idle queue after first execution"""
func(*args, **kwargs)
return False
+ def issue_state(self):
+ if self._fixed:
+ return ("Fixed", 3)
+ elif self._happened and self._detected:
+ return ("Detected", 2)
+ elif self._detected:
+ return ("No problem", 1)
+ else:
+ return ("Waiting for check", 0)
+
+
if self._cfg.operation.verbose == "True":
self._importance = logging.DEBUG
else:
@@ -430,6 +504,14 @@ class MainWindow(object):
if self._importance<=message["importance"]:
print "TREE %s FROM %s" % (message["title"], message["origin"].name,)
pprint.pprint(message["message"])
+ elif message["action"]==reporting.ISSUE:
+ i = message["message"]
+ t,ids = issue_state(i)
+ if not self.result_list_iter.has_key(i):
+ self.result_list_iter[i] = self.result_list_store.append([i.name, t, i.description, ids])
+ else:
+ for idx,val in enumerate([i.name, t, i.description, ids]):
+ gobject.idle_add(_o, self.result_list_store.set, self.result_list_iter[i], idx, val)
else:
print "FIXME: Unknown message action %d!!" % (message["action"],)
print message
diff --git a/pyfirstaidkit/interpret.py b/pyfirstaidkit/interpret.py
index d658245..c81cdaf 100644
--- a/pyfirstaidkit/interpret.py
+++ b/pyfirstaidkit/interpret.py
@@ -33,6 +33,7 @@ class Tasker:
def __init__(self, cfg, reporting = None, dependencies = None, backups = None, pluginsystem = None):
self._config = cfg
+ self._running = True
if dependencies is None:
self._provide = Dependencies()
@@ -54,6 +55,10 @@ class Tasker:
else:
self.pluginSystem = pluginsystem
+ def interrupt(self):
+ self._running = False
+ self._reporting.info("You sent an interrupt signal to Tasker! This is not recommended.", level = TASKER, origin = self, importance = logging.WARNING)
+
def flags(self):
return self._provide
@@ -105,7 +110,8 @@ class Tasker:
oldlist = set()
actlist = set(zip(pluginlist, flows))
- while len(actlist)>0 and oldlist!=actlist:
+ self._running = True
+ while self._running and len(actlist)>0 and oldlist!=actlist:
oldlist = copy.copy(actlist)
for plugin,flow in oldlist:
#If plugin does not contain the automated flow or if it ran correctly, remove it from list
diff --git a/pyfirstaidkit/reporting.py b/pyfirstaidkit/reporting.py
index 934a6ef..8a19a07 100644
--- a/pyfirstaidkit/reporting.py
+++ b/pyfirstaidkit/reporting.py
@@ -149,7 +149,7 @@ class Reports(object):
def issue(self, issue, level, origin, importance = logging.INFO):
Logger.debug(origin.name+": issue changed state to "+str(issue))
- return self.put(issue, level, origin, INFO, importance = importance)
+ return self.put(issue, level, origin, ISSUE, importance = importance)
def info(self, message, level, origin, importance = logging.INFO):
Logger.info(origin.name+": "+message)