Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2014-05-13 00:36:52 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2014-05-13 00:36:52 (GMT)
commit745194765f8ba4a0ea5fcbda249b64d9743d6697 (patch)
tree9de5f37989b9d155749b53a689292f29bcdb1349
parente0008f8b1cd2ccb1e044dfbabfa30c54d07d71fa (diff)
Handy API command to get totals
-rw-r--r--sugar_network/node/stats.py32
-rw-r--r--sugar_network/toolkit/rrd.py18
-rwxr-xr-xtests/units/node/stats.py200
-rwxr-xr-xtests/units/toolkit/rrd.py16
4 files changed, 144 insertions, 122 deletions
diff --git a/sugar_network/node/stats.py b/sugar_network/node/stats.py
index d1b0d63..1af23d9 100644
--- a/sugar_network/node/stats.py
+++ b/sugar_network/node/stats.py
@@ -101,7 +101,7 @@ _ROUTES = {
('users', -1),
}
-_MAX_STAT_RECORDS = 100
+_LIMIT = 100
_logger = logging.getLogger('node.stats')
@@ -144,12 +144,12 @@ class StatRoutes(object):
stat = stat()
self._stats[stat] += shift
- if stat_rating and r.method == 'POST' and r.resource == 'post':
+ if stat_rating:
rating = None
if stat == 'topics' and this.resource['type'] == 'review':
rating = self._rating['context']
rating = rating.setdefault(this.resource['context'], [0, 0])
- else:
+ elif stat == 'posts':
rating = self._rating['post']
rating = rating.setdefault(this.resource['topic'], [0, 0])
if rating is not None:
@@ -159,28 +159,30 @@ class StatRoutes(object):
return result
@route('GET', cmd='stats', arguments={
- 'start': int, 'end': int, 'records': int, 'source': list},
+ 'start': int, 'end': int, 'limit': int, 'event': list},
mime_type='application/json')
- def stats(self, start, end, records, source):
+ def stats(self, start, end, limit, event):
enforce(self._rrd is not None, 'Statistics disabled')
if not start:
start = self._rrd.first or 0
if not end:
end = self._rrd.last or 0
- if records > _MAX_STAT_RECORDS:
- _logger.debug('Decrease %d stats records number to %d',
- records, _MAX_STAT_RECORDS)
- records = _MAX_STAT_RECORDS
- elif records <= 0:
- records = _MAX_STAT_RECORDS / 10
- resolution = max(1, (end - start) / records)
+ if limit > _LIMIT:
+ _logger.debug('Decrease %d limit by %d', limit, _LIMIT)
+ limit = _LIMIT
+ elif limit <= 0:
+ result = self._rrd.values(end)
+ result['timestamp'] = end
+ return result
+ resolution = max(1, (end - start) / limit)
result = []
for ts, values in self._rrd.get(start, end, resolution):
- if source:
- values = dict([(i, values[i]) for i in source])
- result.append((ts, values))
+ if event:
+ values = dict([(i, values[i]) for i in event])
+ values['timestamp'] = ts
+ result.append(values)
return result
def stats_auto_commit(self):
diff --git a/sugar_network/toolkit/rrd.py b/sugar_network/toolkit/rrd.py
index d8386e5..bacf519 100644
--- a/sugar_network/toolkit/rrd.py
+++ b/sugar_network/toolkit/rrd.py
@@ -203,14 +203,20 @@ class _Db(object):
def first(self):
return self._meta['first'] or 0
- def values(self, timestamp):
+ def values(self, timestamp=None):
+ result = None
if timestamp and timestamp - self.last <= self.step and \
'pending' in self._meta:
- return self._meta['pending']
- info = rrdtool.info(self.path)
- result = {}
- for field in self.field_names:
- result[field] = float(info.get('ds[%s].last_ds' % field) or 0)
+ result = self._meta['pending']
+ elif not timestamp or timestamp == self.last:
+ info = rrdtool.info(self.path)
+ result = {}
+ for field in self.field_names:
+ result[field] = float(info.get('ds[%s].last_ds' % field) or 0)
+ else:
+ timestamp -= self.step
+ for __, result in self.get(timestamp, timestamp, self.step):
+ pass
return result
def put(self, values, timestamp):
diff --git a/tests/units/node/stats.py b/tests/units/node/stats.py
index 738b5f6..348daec 100755
--- a/tests/units/node/stats.py
+++ b/tests/units/node/stats.py
@@ -23,39 +23,39 @@ class StatsTest(tests.Test):
guid1 = this.call(method='POST', path=['context'], content={'title': '', 'summary': '', 'description': '', 'type': 'activity'})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 1)
guid2 = this.call(method='POST', path=['context'], content={'title': '', 'summary': '', 'description': '', 'type': 'activity'})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 2.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 2.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 2)
this.call(method='DELETE', path=['context', guid1])
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 2.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 2, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 2.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 2, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 3)
this.call(method='DELETE', path=['context', guid2])
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 2.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 2, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 2.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 2, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 3, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
def test_StatReleased(self):
ts = int(time.time())
@@ -76,18 +76,18 @@ class StatsTest(tests.Test):
])))))
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 1)
this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 2)
agg2 = this.call(method='POST', path=['context', guid, 'releases'], content=StringIO(
@@ -102,11 +102,11 @@ class StatsTest(tests.Test):
])))))
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 2, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 2, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 3)
agg2 = this.call(method='POST', path=['context', guid, 'releases'], content=StringIO(
@@ -121,12 +121,12 @@ class StatsTest(tests.Test):
])))))
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 2, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 3, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 3.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 2, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 3, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 3.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
def test_StatSolved(self):
ts = int(time.time())
@@ -148,39 +148,39 @@ class StatsTest(tests.Test):
this.call(method='GET', path=['context', guid], cmd='solve')
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 1)
this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 2)
this.call(method='GET', path=['context', guid], cmd='solve')
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 2, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 2, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 3)
this.call(method='GET', path=['context', guid], cmd='solve')
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 2, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 3, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 2, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 3, 'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
def test_StatReported(self):
ts = int(time.time())
@@ -191,39 +191,39 @@ class StatsTest(tests.Test):
this.call(method='POST', path=['report'], content={'context': 'context', 'error': '', 'lsb_release': {}, 'uname': ''})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 1)
this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 2)
this.call(method='POST', path=['report'], content={'context': 'context', 'error': '', 'lsb_release': {}, 'uname': ''})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 2, 'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 3)
this.call(method='POST', path=['report'], content={'context': 'context', 'error': '', 'lsb_release': {}, 'uname': ''})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 2, 'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 3, 'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
def test_StatUsers(self):
ts = int(time.time())
@@ -234,39 +234,39 @@ class StatsTest(tests.Test):
this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 1)
this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY2})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 2.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 2.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 2)
this.call(method='DELETE', path=['user', tests.UID])
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 2.0}),
- (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 2.0},
+ {'timestamp': ts + 2, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 3)
this.call(method='DELETE', path=['user', tests.UID2])
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 2.0}),
- (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
- (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 2.0},
+ {'timestamp': ts + 2, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0},
+ {'timestamp': ts + 3, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
def test_StatTopics(self):
ts = int(time.time())
@@ -277,39 +277,39 @@ class StatsTest(tests.Test):
guid1 = this.call(method='POST', path=['post'], content={'context': '', 'type': 'post', 'title': '', 'message': ''})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 1)
guid2 = this.call(method='POST', path=['post'], content={'context': '', 'type': 'post', 'title': '', 'message': ''})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 2)
this.call(method='DELETE', path=['post', guid1])
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 2, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 3)
this.call(method='DELETE', path=['post', guid2])
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
- (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 2, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0},
+ {'timestamp': ts + 3, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
def test_StatPosts(self):
ts = int(time.time())
@@ -320,39 +320,39 @@ class StatsTest(tests.Test):
guid1 = this.call(method='POST', path=['post'], content={'topic': 'topic', 'context': '', 'type': 'post', 'title': '', 'message': ''})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 1)
guid2 = this.call(method='POST', path=['post'], content={'topic': 'topic', 'context': '', 'type': 'post', 'title': '', 'message': ''})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 2.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 2.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 2)
this.call(method='DELETE', path=['post', guid1])
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 2.0, 'users': 0.0}),
- (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 2.0, 'users': 0.0},
+ {'timestamp': ts + 2, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
self.override(time, 'time', lambda: ts + 3)
this.call(method='DELETE', path=['post', guid2])
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
- (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 2.0, 'users': 0.0}),
- (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
- (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ {'timestamp': ts + 0, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0},
+ {'timestamp': ts + 1, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 2.0, 'users': 0.0},
+ {'timestamp': ts + 2, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0},
+ {'timestamp': ts + 3, 'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
def test_ReuseTotalsOnInitialStart(self):
volume = self.start_master(auth=RootAuth())
@@ -367,9 +367,9 @@ class StatsTest(tests.Test):
this.call(method='POST', path=['report'], content={'context': 'context', 'error': '', 'lsb_release': {}, 'uname': ''})
self.node_routes.stats_commit()
self.assertEqual([
- (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 1.0, 'posts': 1.0, 'users': 1.0}),
+ {'timestamp': ts + 0, 'contexts': 1.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 1.0, 'posts': 1.0, 'users': 1.0},
],
- this.call(method='GET', cmd='stats'))
+ this.call(method='GET', cmd='stats', limit=10))
def test_StatContextRating(self):
ts = int(time.time())
diff --git a/tests/units/toolkit/rrd.py b/tests/units/toolkit/rrd.py
index 9c2e020..5658cf0 100755
--- a/tests/units/toolkit/rrd.py
+++ b/tests/units/toolkit/rrd.py
@@ -422,7 +422,21 @@ class RrdTest(tests.Test):
self.assertEqual({'f': 2.0}, dbset.values(ts + 1))
self.assertEqual({'f': 2.0}, dbset.values(ts + 2))
self.assertEqual({'f': 2.0}, dbset.values(ts + 3))
- self.assertEqual({'f': 1.0}, dbset.values(ts + 4))
+ self.assertEqual({'f': 0.0}, dbset.values(ts + 4))
+
+ def test_GetValues(self):
+ dbset = rrd.Rrd('.', 'test', None, 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ ts = int(time.time())
+ dbset.put({'f': 1}, ts + 0)
+ dbset.put({'f': 2}, ts + 1)
+ dbset.put({'f': 3}, ts + 2)
+
+ self.assertEqual({'f': 3.0}, dbset.values())
+ self.assertEqual({'f': 1.0}, dbset.values(ts + 0))
+ self.assertEqual({'f': 2.0}, dbset.values(ts + 1))
+ self.assertEqual({'f': 3.0}, dbset.values(ts + 2))
+ self.assertEqual({'f': 0.0}, dbset.values(ts + 3))
if __name__ == '__main__':