def run(self, options): logs.begin( saveLog=stampedAPI._logsDB.saveLog, saveStat=stampedAPI._statsDB.addStat, nodeName=stampedAPI.node_name ) logs.async_request('alerts') lock = os.path.join(base, 'alerts.lock') if os.path.exists(lock): logs.warning('Locked - aborting') return try: open(lock, 'w').close() self.buildAlerts(limit=options.limit, noop=options.noop) self.buildInvitations(limit=options.limit, noop=options.noop) if len(self._emailQueue) > 0: self.sendEmails(noop=options.noop) if len(self._pushQueue) > 0: self.sendPush(noop=options.noop) self.cleanupPush(noop=options.noop) except Exception as e: logs.warning('Exception: %s' % e) logs.warning(utils.getFormattedException()) logs.error(500) finally: os.remove(lock) try: logs.save() except Exception: print '\n\n\nWARNING: UNABLE TO SAVE LOGS\n\n\n'
def wrapper(worker, job): try: k = job.task logs.begin(saveLog=api._logsDB.saveLog, saveStat=api._statsDB.addStat, nodeName=api.node_name) logs.async_request(k) v = functions[k] data = pickle.loads(job.data) logs.info("%s: %s: %s" % (k, v, data)) v(k, data) except Exception as e: logs.error(str(e)) finally: try: logs.save() except Exception: print "Unable to save logs" import traceback traceback.print_exc() logs.warning(traceback.format_exc()) return ""
def wrapper(task_id, key, data, **kwargs): try: logs.begin(saveLog=api._logsDB.saveLog, saveStat=api._statsDB.addStat, nodeName=api.node_name) logs.async_request(key) logs.info("Request %s: %s: %s: %s" % (task_id, key, data, kwargs)) handler(task_id, key, data, **kwargs) logs.info("Finished with request %s" % (task_id,)) except Exception as e: logs.error("Failed request %s" % (task_id,)) logs.report() _warningEmail('%s - %s failed (%s)' % (api.node_name, key, datetime.utcnow().isoformat())) finally: logs.info('Saving request log for request %s' % (task_id,)) try: logs.save() except Exception: print 'Unable to save logs' import traceback traceback.print_exc() logs.warning(traceback.format_exc())
def invoke(request, *args, **kwargs): """ wrapper to invoke a stamped api function in an asynchronous context which adds logging and exception handling. """ taskId = kwargs.pop('taskId', None) try: stampedAPI = getStampedAPI() func = "%sAsync" % utils.getFuncName(1) if not request.is_eager: logs.begin( saveLog=stampedAPI._logsDB.saveLog, saveStat=stampedAPI._statsDB.addStat, nodeName=stampedAPI.node_name, ) logs.async_request(func, *args, **kwargs) logs.info("%s %s %s (is_eager=%s, hostname=%s, task_id=%s)" % (func, args, kwargs, request.is_eager, request.hostname, request.id)) getattr(stampedAPI, func)(*args, **kwargs) except Exception as e: logs.error(str(e)) raise finally: try: if taskId is not None: stampedAPI._asyncTasksDB.removeTask(taskId) if not request.is_eager: logs.save() except: pass