Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar_network/node
diff options
context:
space:
mode:
Diffstat (limited to 'sugar_network/node')
-rw-r--r--sugar_network/node/routes.py12
-rw-r--r--sugar_network/node/stats_node.py20
2 files changed, 20 insertions, 12 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