Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar_network
diff options
context:
space:
mode:
Diffstat (limited to 'sugar_network')
-rw-r--r--sugar_network/node/routes.py12
-rw-r--r--sugar_network/node/stats_node.py20
-rw-r--r--sugar_network/toolkit/rrd.py7
3 files changed, 25 insertions, 14 deletions
diff --git a/sugar_network/node/routes.py b/sugar_network/node/routes.py
index 7b36b12..1182f28 100644
--- a/sugar_network/node/routes.py
+++ b/sugar_network/node/routes.py
@@ -35,7 +35,7 @@ from sugar_network.toolkit.bundle import Bundle
from sugar_network.toolkit import pylru, http, coroutine, exception, enforce
-_MAX_STAT_RECORDS = 128
+_MAX_STAT_RECORDS = 100
_AUTH_POOL_SIZE = 1024
_logger = logging.getLogger('node.routes')
@@ -88,16 +88,16 @@ class NodeRoutes(model.VolumeRoutes, model.FrontRoutes):
'start': int, 'end': int, 'records': int, 'source': list},
mime_type='application/json')
def stats(self, start, end, records, source):
- if not source or records <= 0 or start > end:
- return {}
-
enforce(self._stats is not None, 'Node stats is disabled')
+ if not source:
+ return {}
if records > _MAX_STAT_RECORDS:
_logger.debug('Decrease %d stats records number to %d',
records, _MAX_STAT_RECORDS)
records = _MAX_STAT_RECORDS
- resolution = (end - start) / records
+ elif records <= 0:
+ records = _MAX_STAT_RECORDS / 10
stats = {}
for i in source:
@@ -105,7 +105,7 @@ class NodeRoutes(model.VolumeRoutes, model.FrontRoutes):
db_name, ds_name = i.split('.', 1)
stats.setdefault(db_name, []).append(ds_name)
- return self._stats.report(stats, start, end, resolution)
+ return self._stats.report(stats, start, end, records)
@route('POST', ['user'], mime_type='application/json')
def register(self, request):
diff --git a/sugar_network/node/stats_node.py b/sugar_network/node/stats_node.py
index 0cba0b8..61a4a28 100644
--- a/sugar_network/node/stats_node.py
+++ b/sugar_network/node/stats_node.py
@@ -40,8 +40,6 @@ stats_node_rras = Option(
],
type_cast=Option.list_cast, type_repr=Option.list_repr)
-_MAX_FRAME = 64
-
_logger = logging.getLogger('node.stats_node')
@@ -71,17 +69,27 @@ class Sniffer(object):
if values is not None:
self._rrd[resource].put(values, timestamp=timestamp)
- def report(self, dbs, start, end, resolution):
+ def report(self, dbs, start, end, records):
result = {}
- for rdb in self._rrd:
- if rdb.name not in dbs:
- continue
+
+ rdbs = [self._rrd[i] for i in dbs if i in self._rrd]
+ if not rdbs:
+ return result
+
+ if not start:
+ start = min([i.first for i in rdbs])
+ if not end:
+ end = max([i.last for i in rdbs])
+ resolution = max(1, (end - start) / records)
+
+ for rdb in rdbs:
info = result[rdb.name] = []
for ts, ds_values in rdb.get(start, end, resolution):
values = {}
for name in dbs[rdb.name]:
values[name] = ds_values.get(name)
info.append((ts, values))
+
return result
diff --git a/sugar_network/toolkit/rrd.py b/sugar_network/toolkit/rrd.py
index 6b5d6e8..a5f879d 100644
--- a/sugar_network/toolkit/rrd.py
+++ b/sugar_network/toolkit/rrd.py
@@ -62,6 +62,9 @@ class Rrd(object):
def __getitem__(self, name):
return self.get(name)
+ def __contains__(self, name):
+ return name in self._dbsets
+
@property
def root(self):
return self._root
@@ -199,8 +202,8 @@ class _DbSet(object):
filename += '-%s' % revision
filename += '.rrd'
- _logger.debug('Create %s database in %s starting from %s',
- filename, self._root, timestamp)
+ _logger.debug('Create %s database in %s start=%s step=%s',
+ filename, self._root, timestamp, self._step)
fields = []
for name in field_names: