Example #1
0
    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'
Example #2
0
    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 ""
Example #3
0
 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())
Example #4
0
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