+
+ def log(self, callable):
+ """
+ Log the transaction
+ """
+ def __log__(vars):
+ """
+ Commit the transaction
+ """
+
+ # Do not log listMethods call
+ if vars['call_name'] in ['listMethods']:
+ return False
+
+ sql = "INSERT INTO events " \
+ " (person_id, event_type, object_type, fault_code, call, runtime)" \
+ " VALUES (%d, '%s', '%s', %d, '%s', %f)" % \
+ (vars['person_id'], vars['event_type'], vars['object_type'],
+ vars['fault_code'], vars['call'], vars['runtime'])
+ self.api.db.do(sql)
+ self.api.db.commit()
+
+
+ def wrapper(*args, **kwds):
+
+ fault_code = 0
+ # XX Get real person_id
+ person_id = 1
+ event_type = 'Unknown'
+ object_type = 'Unknown'
+ call_name = callable.im_class.__module__.split('.')[-1:][0]
+ call_args = ", ".join([str(arg) for arg in list(args)[1:]]).replace('\'', '\\\'')
+ call = "%s(%s)" % (call_name, call_args)
+
+ if hasattr(self, 'event_type'):
+ event_type = self.event_type
+
+ if hasattr(self, 'object_type'):
+ object_type = self.object_type
+
+ start = time.time()
+
+ try:
+ result = callable(*args, **kwds)
+ runtime = time.time() - start
+ __log__(locals())
+ return result
+
+ except PLCFault, fault:
+ fault_code = fault.faultCode
+ runtime = time.time() - start
+ __log__(locals())
+ print fault
+
+ return wrapper
+
+