daemon = True
+def clean_event(event):
+ """ clean an event record """
+ if not event.first_timestamp:
+ log.error("first_timestamp is empty")
+ if event.metadata.creation_timestamp:
+ log.error("setting first_timestamp to the creation timestamp")
+ event.first_timestamp = event.metadata.creation_timestamp
+ else:
+ log.error("defaulting event first timestamp to current datetime")
+ event.first_timestamp = datetime.datetime.now()
+
+ if not event.last_timestamp:
+ log.error("setting event last timestamp to {}".format(event.first_timestamp))
+ event.last_timestamp = event.first_timestamp
+
+ if not event.count:
+ event.count = 1
+
+ return event
+
+
class NamespaceWatcher(BaseThread):
"""Watch events in a given namespace
self.resource_version = resp.metadata.resource_version
for item in resp.items:
- self.events[item.metadata.name] = item
+ self.events[item.metadata.name] = clean_event(item)
log.info('Added {} events'.format(len(resp.items)))
def run(self):
with self.lock:
if item['type'] in ['ADDED', 'MODIFIED']:
- self.events[obj.metadata.name] = obj
+ self.events[obj.metadata.name] = clean_event(obj)
elif item['type'] == 'DELETED':
del self.events[obj.metadata.name]
log.warning("Restarting namespace watcher")
self.fetch()
+ except ProtocolError as e:
+ log.warning("Namespace watcher hit protocolerror ({}) - restarting".format(e))
+ self.fetch()
+
except Exception:
self.health = "{} Exception at {}".format(
sys.exc_info()[0].__name__,
s += fmt.format(
datetime.strftime(event.last_timestamp,"%Y/%m/%d %H:%M:%S"),
- event.type,
- event.count,
- event.message,
- event_name
+ str(event.type),
+ str(event.count),
+ str(event.message),
+ str(event_name)
)
s += "Total : {:>3}\n".format(len(events))
return s