Various changes
[kiosk.git] / renderer.py
index 34e4459d429abda03a28da88048690cbc0834f0c..b78eb2b713e3b4901a912f8e763a90ee818953f3 100644 (file)
@@ -1,11 +1,17 @@
 import time
 from datetime import datetime
+from decorators import invokation_logged
 
 class renderer(object):
     """Base class for something that can render."""
+
+    @invokation_logged
     def render(self):
         pass
 
+    def get_name(self):
+        return self.__class__.__name__
+
 class abstaining_renderer(renderer):
     """A renderer that doesn't do it all the time."""
     def __init__(self, name_to_timeout_dict):
@@ -17,37 +23,37 @@ class abstaining_renderer(renderer):
     def should_render(self, keys_to_skip):
         now = time.time()
         for key in self.name_to_timeout_dict:
-            if key in keys_to_skip:
-                continue
-            if (now - self.last_runs[key]) > self.name_to_timeout_dict[key]:
+            if (((now - self.last_runs[key]) > self.name_to_timeout_dict[key]) and
+                key not in keys_to_skip):
                 return key
         return None
 
     def render(self):
-        tries = {}
+        tries_per_key = {}
         keys_to_skip = set()
         while True:
             key = self.should_render(keys_to_skip)
             if key == None:
                 break
-            if key in tries:
-                tries[key] += 1
+
+            if key in tries_per_key:
+                tries_per_key[key] += 1
             else:
-                tries[key] = 0
+                tries_per_key[key] = 0
 
-            if tries[key] > 5:
-                print(('Too many retries for "%s.%s", giving up for now' % (
-                    key, self.__class__)))
+            if tries_per_key[key] >= 3:
+                print('renderer: Too many failures for "%s.%s", giving up' % (
+                    self.get_name(), key))
                 keys_to_skip.add(key)
             else:
-                msg = 'renderer: periodic render event for "%s.%s"' % (
-                    key, self.__class__)
-                if (tries[key] > 1):
-                    msg = msg + " (try %d)" % tries[key]
+                msg = 'renderer: executing "%s.%s"' % (self.get_name(), key)
+                if (tries_per_key[key] > 1):
+                    msg = msg + " (retry #%d)" % tries_per_key[key]
                 print(msg)
                 if (self.periodic_render(key)):
                     self.last_runs[key] = time.time()
 
+    @invokation_logged
     def periodic_render(self, key):
         pass
 
@@ -57,7 +63,7 @@ class debuggable_abstaining_renderer(abstaining_renderer):
         self.debug = debug
 
     def debug_prefix(self):
-        return "none"
+        return self.get_name()
 
     def being_debugged(self):
         return self.debug