Example #1
0
 def add_to_queue(self, *args):
   try:
     if not self.queue.full():
       logger.debug("queueing external metric data: %s, with data: %s" % (args[0], str(args[1:4])))
       self.queue.put_nowait(args)
   except Full:
     raise jsonrpc2.InternalError('metric queue is full, cannot put data into it!')
Example #2
0
 def jsonrpc_echo(self,*args, **kwargs):
   largs = len(args)
   if largs == 1:
     logger.debug('%s receive %s' % (str(self.factory.__class__.__name__), args[0]))
     return args[0]
   elif largs > 1:
     logger.debug('%s receive %s' % (str(self.factory.__class__.__name__), args))
     return args
Example #3
0
 def _validate_incoming(self, value, name, unit):
   logger.debug("validate external metric data")
   if not unit in unitlist:
     raise jsonrpc2.InvalidParams('Unit parameter is invalid, see AWS Cloudwatch docs')
   if not value:
     raise jsonrpc2.InvalidParams('A value parameter has to be provided')
   if not name:
     raise jsonrpc2.InvalidParams('A metricname has to be provided as \"name\" parameter')
   try:
     value = float(value)
   except ValueError:
     raise jsonrpc2.InvalidParams('Value has to be decimal')
   return value, name, unit
Example #4
0
    def values(self):
        try:
            results = {}
            info = self.redis.info()
            for i in self.info:
                try:
                    results[i] = RedisMetric.infoUnits[i](info[i])
                except Exception as e:
                    print repr(e)
                    results[i] = (info[i], "None")

            both = list(self.get)
            both.extend(self.llen)
            both.extend(self.hlen)
            both.extend(["%s-%s" % (k, v) for k, v in self.hget.items()])
            both.extend(self.scard)
            both.extend(self.zcard)
            both.extend(self.patterns)
            with self.redis.pipeline() as pipe:
                for g in self.get:
                    logger.debug("get %s" % g)
                    pipe.get(g)
                for l in self.llen:
                    logger.debug("llen %s" % l)
                    pipe.llen(l)
                for h in self.hlen:
                    logger.debug("hlen %s" % h)
                    pipe.hlen(h)
                for k, v in self.hget.items():
                    logger.debug("hget %s %s" % (k, v))
                    pipe.hget(k, v)
                for s in self.scard:
                    logger.debug("scard %s" % s)
                    pipe.scard(s)
                for z in self.zcard:
                    logger.debug("zcard %s" % z)
                    pipe.zcard(z)
                for pattern in self.patterns:
                    logger.debug("keys %s" % pattern)
                    pipe.keys(pattern)
                fetched = pipe.execute()
                for k, f in zip(both, fetched):
                    if isinstance(f, list):
                        results[k] = (len(f), "Count")
                    else:
                        results[k] = (f, "Count")

            return {"results": results}
        except redis.RedisError as e:
            raise MetricException(e)
Example #5
0
    def values(self):
        try:
            results = {}
            info = self.redis.info()
            for i in self.info:
                try:
                    results[i] = RedisMetric.infoUnits[i](info[i])
                except Exception as e:
                    print repr(e)
                    results[i] = (info[i], 'None')

            both = list(self.get)
            both.extend(self.llen)
            both.extend(self.hlen)
            both.extend(['%s-%s' % (k, v) for k, v in self.hget.items()])
            both.extend(self.scard)
            both.extend(self.zcard)
            both.extend(self.patterns)
            with self.redis.pipeline() as pipe:
                for g in self.get:
                    logger.debug('get %s' % g)
                    pipe.get(g)
                for l in self.llen:
                    logger.debug('llen %s' % l)
                    pipe.llen(l)
                for h in self.hlen:
                    logger.debug('hlen %s' % h)
                    pipe.hlen(h)
                for k, v in self.hget.items():
                    logger.debug('hget %s %s' % (k, v))
                    pipe.hget(k, v)
                for s in self.scard:
                    logger.debug('scard %s' % s)
                    pipe.scard(s)
                for z in self.zcard:
                    logger.debug('zcard %s' % z)
                    pipe.zcard(z)
                for pattern in self.patterns:
                    logger.debug('keys %s' % pattern)
                    pipe.keys(pattern)
                fetched = pipe.execute()
                for k, f in zip(both, fetched):
                    if isinstance(f, list):
                        results[k] = (len(f), 'Count')
                    else:
                        results[k] = (f, 'Count')

            return {'results': results}
        except redis.RedisError as e:
            raise MetricException(e)