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!')
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
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
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)
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)