From 745194765f8ba4a0ea5fcbda249b64d9743d6697 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Tue, 13 May 2014 00:36:52 +0000 Subject: Handy API command to get totals --- 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__': -- cgit v0.9.1