コード例 #1
0
class XMPPKeepAliveSupervisor(Supervisor, Subject):
    name = 'XMPP_KEEPALIVE_SUPERVISOR'
    log = getLoggerAdapter(log, id=name)

    def __init__(self):
        Supervisor.__init__(self)
        Subject.__init__(self)
        self.lastTime = datetime.utcnow()
        self.metric = Metric(name='elapsed_time',
                             value=None,
                             unit='msec',
                             source=self.name,
                             scale=1000,
                             sampling=True)

    def perform_keep_alive(self):
        self.lastTime = datetime.utcnow()
        self.notifyObservers()
        elapsedTime = datetime.utcnow() - self.lastTime
        usecs = elapsedTime.seconds * 1000000 + elapsedTime.microseconds
        self.log.info('Finished XMPP_KEEP_ALIVE. Elapsed %s usecs', usecs)
        self.metric.add(usecs)

    def startService(self):
        Supervisor.startService(self)
        if conf.XMPP_KEEP_ALIVE_TIME > 0:
            t = LoopingCall(self.perform_keep_alive)
            self.registerTask(t)
            t.start(conf.XMPP_KEEP_ALIVE_TIME, now=False)
コード例 #2
0
class BaseHandlerNoLog(cyclone.web.Application, RedisMixin):
    def __init__(self):
        handlers = [
            (r"/1/google/messages/(.+)", v1.handlers.GoogleMessagesHandler),
            (r"/1/google/contacts/(.+)", v1.handlers.GoogleContactsHandler),
            (r"/1/google/(.+)", v1.handlers.GoogleHandler)
        ]
        settings = dict(debug=conf.CYCLONE_DEBUG, )
        cyclone.web.Application.__init__(self, handlers, **settings)
        self.log = getLoggerAdapter(log)
        self.metric = Metric(name='time',
                             value=None,
                             unit=v1.handlers.METRIC_UNIT_TIME,
                             source=v1.handlers.METRIC_SOURCE,
                             sampling=True)
        self.metric_response_codes = {
            1:
            Metric(name='response_1XX',
                   value=None,
                   unit='requests',
                   source=v1.handlers.METRIC_SOURCE),
            2:
            Metric(name='response_2XX',
                   value=None,
                   unit='requests',
                   source=v1.handlers.METRIC_SOURCE),
            3:
            Metric(name='response_3XX',
                   value=None,
                   unit='requests',
                   source=v1.handlers.METRIC_SOURCE),
            4:
            Metric(name='response_4XX',
                   value=None,
                   unit='requests',
                   source=v1.handlers.METRIC_SOURCE),
            5:
            Metric(name='response_5XX',
                   value=None,
                   unit='requests',
                   source=v1.handlers.METRIC_SOURCE)
        }

    @IncrementMetric(name='total',
                     unit=v1.handlers.METRIC_UNIT,
                     source=v1.handlers.METRIC_SOURCE)
    def log_request(self, handler):
        self._request_time = 1000 * handler.request.request_time()
        self.metric.add(self._request_time)

        status_metric = self.metric_response_codes.get(
            handler.get_status() / 100, None)
        if not status_metric is None:
            status_metric.add(1)

        metric = getattr(handler, 'metric', None)
        if metric:
            metric.add(self._request_time)
コード例 #3
0
class RedisMetrics(Observer):
    SOURCE='REDIS'
    UNIT='keys'
    def __init__(self):
        self._connection = RedisMixin.redis_conn
        self._keys=Metric(name="keys", value=None, unit=self.UNIT, source=self.SOURCE)
        failed_queue_name = FailedQueue().name
        self._items={conf.DIST_QUEUE_LOGIN: Metric(name='queue_%s'%(conf.DIST_QUEUE_LOGIN), value=None, unit=self.UNIT, source=self.SOURCE),
                     conf.DIST_QUEUE_PUSH: Metric(name='queue_%s'%(conf.DIST_QUEUE_PUSH), value=None, unit=self.UNIT, source=self.SOURCE), 
                     conf.DIST_QUEUE_RELOGIN: Metric(name='queue_%s'%(conf.DIST_QUEUE_RELOGIN), value=None, unit=self.UNIT, source=self.SOURCE),
                     failed_queue_name: Metric(name='queue_%s'%(failed_queue_name), value=None, unit=self.UNIT, source=self.SOURCE)
                     }
    
    @defer.inlineCallbacks
    def notify(self):
        keys = yield self._connection.dbsize()
        self._keys.add(keys)
        for key in self._items:
            queue = Queue(name=key, connection=self._connection)
            items = yield queue.count
            self._items[key].add(items)