diff options
author | Aleksey Lim <alsroot@sugarlabs.org> | 2013-02-21 17:52:26 (GMT) |
---|---|---|
committer | Aleksey Lim <alsroot@sugarlabs.org> | 2013-02-21 17:52:26 (GMT) |
commit | fcfd6764f269e4f81712ddb83c5f1d44bfe0b920 (patch) | |
tree | 6fc006058cac7ea3f759948e97b31173bd189efe | |
parent | c708deff172e2827404695f363268167594b5f9e (diff) |
Do not mix sources for node and user stats
-rwxr-xr-x | sugar-network-client | 4 | ||||
-rwxr-xr-x | sugar-network-node | 5 | ||||
-rw-r--r-- | sugar_network/node/__init__.py | 4 | ||||
-rw-r--r-- | sugar_network/node/commands.py | 8 | ||||
-rw-r--r-- | sugar_network/node/master.py | 4 | ||||
-rw-r--r-- | sugar_network/node/slave.py | 8 | ||||
-rw-r--r-- | sugar_network/node/stats_node.py (renamed from sugar_network/node/stats.py) | 92 | ||||
-rw-r--r-- | sugar_network/node/stats_user.py | 106 | ||||
-rw-r--r-- | sugar_network/resources/user.py | 10 | ||||
-rw-r--r-- | tests/__init__.py | 14 | ||||
-rw-r--r-- | tests/units/node/__main__.py | 2 | ||||
-rwxr-xr-x | tests/units/node/node.py | 23 | ||||
-rwxr-xr-x | tests/units/node/stats_node.py (renamed from tests/units/node/stats.py) | 46 | ||||
-rwxr-xr-x | tests/units/node/sync_online.py | 10 |
14 files changed, 186 insertions, 150 deletions
diff --git a/sugar-network-client b/sugar-network-client index 6cc1689..ca7e307 100755 --- a/sugar-network-client +++ b/sugar-network-client @@ -32,7 +32,7 @@ from sugar_network.toolkit.router import IPCRouter from sugar_network.client.mounts import HomeMount, RemoteMount from sugar_network.client.mountset import Mountset from sugar_network.zerosugar import clones -from sugar_network.node import stats, slave +from sugar_network.node import stats_user, slave from sugar_network.resources.volume import Volume from sugar_network.toolkit import Option from sugar_network.toolkit import util, printf, application, coroutine, enforce @@ -203,7 +203,7 @@ Option.seek('webui', webui) Option.seek('client', client) Option.seek('client', [sugar.keyfile, toolkit.tmpdir]) Option.seek('node', [node.port, slave.sync_dirs]) -Option.seek('stats', stats) +Option.seek('stats', stats_user) Option.seek('db', db) app = Application( diff --git a/sugar-network-node b/sugar-network-node index 1dcdc13..6c4441d 100755 --- a/sugar-network-node +++ b/sugar-network-node @@ -27,7 +27,7 @@ from sugar_network import db, node, client, toolkit from sugar_network.client.mounts import LocalMount from sugar_network.client.mountset import Mountset from sugar_network.client.mounts import LocalMount -from sugar_network.node import stats, obs +from sugar_network.node import stats_node, stats_user, obs from sugar_network.node.master import MasterCommands from sugar_network.node.slave import SlaveCommands from sugar_network.resources.volume import Volume @@ -122,7 +122,8 @@ Option.seek('main', application) Option.seek('webui', webui) Option.seek('node', node) Option.seek('node', [toolkit.tmpdir]) -Option.seek('stats', stats) +Option.seek('node-stats', stats_node) +Option.seek('user-stats', stats_user) Option.seek('obs', obs) Option.seek('db', db) diff --git a/sugar_network/node/__init__.py b/sugar_network/node/__init__.py index eb564dd..486db93 100644 --- a/sugar_network/node/__init__.py +++ b/sugar_network/node/__init__.py @@ -50,3 +50,7 @@ find_limit = Option( static_url = Option( 'url prefix to use for static files that should be served via API ' 'server; if omited, HTTP_HOST request value will be used') + +stats_root = Option( + 'path to the root directory for placing stats', + default='/var/lib/sugar-network/stats') diff --git a/sugar_network/node/commands.py b/sugar_network/node/commands.py index 6222b8c..63b4e77 100644 --- a/sugar_network/node/commands.py +++ b/sugar_network/node/commands.py @@ -19,7 +19,7 @@ import hashlib from os.path import exists, join from sugar_network import db, node -from sugar_network.node import auth, obs, stats +from sugar_network.node import auth, obs, stats_node from sugar_network.resources.volume import Commands, VolumeCommands from sugar_network.toolkit import router, util, coroutine, exception, enforce @@ -39,8 +39,8 @@ class NodeCommands(VolumeCommands, Commands): self._guid = guid self._stats = None - if stats.stats_node.value: - self._stats = stats.NodeStats(volume) + if stats_node.stats_node.value: + self._stats = stats_node.Sniffer(volume) coroutine.spawn(self._commit_stats) @property @@ -253,7 +253,7 @@ class NodeCommands(VolumeCommands, Commands): def _commit_stats(self): while True: - coroutine.sleep(stats.stats_node_step.value) + coroutine.sleep(stats_node.stats_node_step.value) self._stats.commit() diff --git a/sugar_network/node/master.py b/sugar_network/node/master.py index 9d61b1e..902c2a5 100644 --- a/sugar_network/node/master.py +++ b/sugar_network/node/master.py @@ -17,7 +17,7 @@ import logging from urlparse import urlsplit from sugar_network import db, client -from sugar_network.node import sync, stats +from sugar_network.node import sync, stats_user from sugar_network.node.commands import NodeCommands from sugar_network.toolkit import util @@ -44,7 +44,7 @@ class MasterCommands(NodeCommands): seq, ack_seq = sync.merge(self.volume, packet) reply.append(('ack', {'ack': ack_seq, 'sequence': seq}, None)) elif packet.name == 'stats_diff': - seq = stats.merge(packet) + seq = stats_user.merge(packet) reply.append(('stats_ack', {'sequence': seq}, None)) return sync.encode(*reply) diff --git a/sugar_network/node/slave.py b/sugar_network/node/slave.py index 414b0ae..f5c3a2c 100644 --- a/sugar_network/node/slave.py +++ b/sugar_network/node/slave.py @@ -18,7 +18,7 @@ from os.path import join from sugar_network import db from sugar_network.client import Client -from sugar_network.node import sync, stats +from sugar_network.node import sync, stats_user from sugar_network.node.commands import NodeCommands from sugar_network.toolkit import Option, util @@ -51,8 +51,8 @@ class SlaveCommands(NodeCommands): push = [('diff', None, sync.diff(self.volume, self._push_seq)), ('pull', {'sequence': self._pull_seq}, None), ] - if stats.stats_user.value: - push.append(('stats_diff', None, stats.diff())) + if stats_user.stats_user.value: + push.append(('stats_diff', None, stats_user.diff())) response = Client().request('POST', data=sync.chunked_encode(*push), params={'cmd': 'sync'}, headers={'Transfer-Encoding': 'chunked'}) @@ -68,7 +68,7 @@ class SlaveCommands(NodeCommands): self._push_seq.exclude(packet['sequence']) self._push_seq.commit() elif packet.name == 'stats_ack': - stats.commit(packet['sequence']) + stats_user.commit(packet['sequence']) """ diff --git a/sugar_network/node/stats.py b/sugar_network/node/stats_node.py index 277700f..6a1b9a1 100644 --- a/sugar_network/node/stats.py +++ b/sugar_network/node/stats_node.py @@ -13,17 +13,17 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -import os import logging -from os.path import join, exists, isdir +from os.path import join +from sugar_network import node from sugar_network.toolkit.rrd import Rrd -from sugar_network.toolkit import Option, util, pylru +from sugar_network.toolkit import Option -stats_root = Option( - 'path to the root directory for placing stats', - default='/var/lib/sugar-network/stats') +stats_node = Option( + 'collect unpersonalized node statistics', + default=False, type_cast=Option.bool_cast, action='store_true') stats_node_step = Option( 'step interval in seconds for node RRD databases', @@ -40,72 +40,13 @@ stats_node_rras = Option( ], type_cast=Option.list_cast, type_repr=Option.list_repr) -stats_user_step = Option( - 'step interval in seconds for users\' RRD databases', - default=60, type_cast=int) +_logger = logging.getLogger('node.stats_node') -stats_user_rras = Option( - 'space separated list of RRAs for users\' RRD databases', - default=[ - 'RRA:AVERAGE:0.5:1:4320', # one day with 60s step - 'RRA:AVERAGE:0.5:5:2016', # one week with 5min step - ], - type_cast=Option.list_cast, type_repr=Option.list_repr) - - -_logger = logging.getLogger('node.stats') -_user_cache = pylru.lrucache(32) - - -def get_rrd(user): - if user in _user_cache: - return _user_cache[user] - else: - rrd = _user_cache[user] = Rrd(_rrd_path(user), - stats_user_step.value, stats_user_rras.value) - return rrd - - -def pull(in_seq, packet): - for user, rrd in _walk_rrd(join(stats_root.value, 'user')): - in_seq.setdefault(user, {}) - - for db in rrd: - seq = in_seq[user].get(db.name) - if seq is None: - seq = in_seq[user][db.name] = util.PersistentSequence( - join(rrd.root, db.name + '.push'), [1, None]) - elif seq is not dict: - seq = in_seq[user][db.name] = util.Sequence(seq) - out_seq = util.Sequence() - def dump(): - for start, end in seq: - for timestamp, values in \ - db.get(max(start, db.first), end or db.last): - yield {'timestamp': timestamp, 'values': values} - seq.exclude(start, timestamp) - out_seq.include(start, timestamp) - start = timestamp - - packet.push(dump(), arcname=join('stats', user, db.name), - cmd='stats_push', user=user, db=db.name, - sequence=out_seq) - - -def commit(sequences): - for user, dbs in sequences.items(): - for db, merged in dbs.items(): - seq = util.PersistentSequence( - _rrd_path(user, db + '.push'), [1, None]) - seq.exclude(merged) - seq.commit() - - -class NodeStats(object): +class Sniffer(object): def __init__(self, volume): - path = join(stats_root.value, 'node') + path = join(node.stats_root.value, 'node') _logger.info('Start collecting node stats in %r', path) self._volume = volume @@ -456,18 +397,3 @@ class _CommentStats(_Stats): if request.content.get(owner): self._stats[owner].commented += 1 break - - -def _rrd_path(user, *args): - return join(stats_root.value, 'user', user[:2], user, *args) - - -def _walk_rrd(root): - if not exists(root): - return - for users_dirname in os.listdir(root): - users_dir = join(root, users_dirname) - if not isdir(users_dir): - continue - for user in os.listdir(users_dir): - yield user, Rrd(join(users_dir, user), stats_user_step.value) diff --git a/sugar_network/node/stats_user.py b/sugar_network/node/stats_user.py new file mode 100644 index 0000000..ca8974a --- /dev/null +++ b/sugar_network/node/stats_user.py @@ -0,0 +1,106 @@ +# Copyright (C) 2012-2013 Aleksey Lim +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import os +import logging +from os.path import join, exists, isdir + +from sugar_network import node +from sugar_network.toolkit.rrd import Rrd +from sugar_network.toolkit import Option, util, pylru + + +stats_user = Option( + 'accept personalized users statistics', + default=False, type_cast=Option.bool_cast, action='store_true') + +stats_user_step = Option( + 'step interval in seconds for users\' RRD databases', + default=60, type_cast=int) + +stats_user_rras = Option( + 'space separated list of RRAs for users\' RRD databases', + default=[ + 'RRA:AVERAGE:0.5:1:4320', # one day with 60s step + 'RRA:AVERAGE:0.5:5:2016', # one week with 5min step + ], + type_cast=Option.list_cast, type_repr=Option.list_repr) + +_logger = logging.getLogger('node.stats_user') +_user_cache = pylru.lrucache(32) + + +def get_rrd(user): + if user in _user_cache: + return _user_cache[user] + else: + rrd = _user_cache[user] = Rrd(_rrd_path(user), + stats_user_step.value, stats_user_rras.value) + return rrd + + +def diff(in_seq=None, packet=None): + for user, rrd in _walk_rrd(join(node.stats_root.value, 'user')): + in_seq.setdefault(user, {}) + + for db in rrd: + seq = in_seq[user].get(db.name) + if seq is None: + seq = in_seq[user][db.name] = util.PersistentSequence( + join(rrd.root, db.name + '.push'), [1, None]) + elif seq is not dict: + seq = in_seq[user][db.name] = util.Sequence(seq) + out_seq = util.Sequence() + + def dump(): + for start, end in seq: + for timestamp, values in \ + db.get(max(start, db.first), end or db.last): + yield {'timestamp': timestamp, 'values': values} + seq.exclude(start, timestamp) + out_seq.include(start, timestamp) + start = timestamp + + packet.push(dump(), arcname=join('stats', user, db.name), + cmd='stats_push', user=user, db=db.name, + sequence=out_seq) + + +def merge(packet): + return False + + +def commit(sequences): + for user, dbs in sequences.items(): + for db, merged in dbs.items(): + seq = util.PersistentSequence( + _rrd_path(user, db + '.push'), [1, None]) + seq.exclude(merged) + seq.commit() + + +def _walk_rrd(root): + if not exists(root): + return + for users_dirname in os.listdir(root): + users_dir = join(root, users_dirname) + if not isdir(users_dir): + continue + for user in os.listdir(users_dir): + yield user, Rrd(join(users_dir, user), stats_user_step.value) + + +def _rrd_path(user, *args): + return join(node.stats_root.value, 'user', user[:2], user, *args) diff --git a/sugar_network/resources/user.py b/sugar_network/resources/user.py index b995cda..6c19c12 100644 --- a/sugar_network/resources/user.py +++ b/sugar_network/resources/user.py @@ -14,7 +14,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. from sugar_network import db -from sugar_network.node import stats +from sugar_network.node import stats_user from sugar_network.toolkit import enforce @@ -65,12 +65,12 @@ class User(db.Document): 'Operation is permitted only for authors') status = {} - for rdb in stats.get_rrd(self.guid): - status[rdb.name] = rdb.last + stats.stats_user_step.value + for rdb in stats_user.get_rrd(self.guid): + status[rdb.name] = rdb.last + stats_user.stats_user_step.value # TODO Process client configuration in more general manner return {'enable': True, - 'step': stats.stats_user_step.value, + 'step': stats_user.stats_user_step.value, 'rras': ['RRA:AVERAGE:0.5:1:4320', 'RRA:AVERAGE:0.5:5:2016'], 'status': status, } @@ -82,6 +82,6 @@ class User(db.Document): name = request.content['name'] values = request.content['values'] - rrd = stats.get_rrd(self.guid) + rrd = stats_user.get_rrd(self.guid) for timestamp, values in values: rrd[name].put(values, timestamp) diff --git a/tests/__init__.py b/tests/__init__.py index 1096b96..6c21625 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -27,7 +27,7 @@ from sugar_network.resources.user import User from sugar_network.resources.context import Context from sugar_network.resources.implementation import Implementation from sugar_network.node.commands import NodeCommands -from sugar_network.node import stats, obs, auth, sneakernet, slave +from sugar_network.node import stats_user, stats_node, obs, auth, sneakernet, slave from sugar_network.resources.volume import Volume @@ -95,12 +95,12 @@ class Test(unittest.TestCase): mountpoints._connects.clear() mountpoints._found.clear() mountpoints._COMPLETE_MOUNT_TIMEOUT = .1 - stats.stats_root.value = tmpdir + '/stats' - stats.stats_node.value = False - stats.stats_node_step.value = 0 - stats.stats_user.value = False - stats.stats_user_step.value = 1 - stats._user_cache.clear() + node.stats_root.value = tmpdir + '/stats' + stats_node.stats_node.value = False + stats_node.stats_node_step.value = 0 + stats_user.stats_user.value = False + stats_user.stats_user_step.value = 1 + stats_user._user_cache.clear() obs._client = None http._RECONNECTION_NUMBER = 0 auth.reset() diff --git a/tests/units/node/__main__.py b/tests/units/node/__main__.py index ceced37..f54ac8f 100644 --- a/tests/units/node/__main__.py +++ b/tests/units/node/__main__.py @@ -7,7 +7,7 @@ from auth import * from node import * from obs import * from sneakernet import * -from stats import * +from stats_node import * from sync import * from sync_online import * diff --git a/tests/units/node/node.py b/tests/units/node/node.py index a63db7c..c9cdcf9 100755 --- a/tests/units/node/node.py +++ b/tests/units/node/node.py @@ -10,9 +10,8 @@ from sugar_network import db, node from sugar_network.client import Client from sugar_network.toolkit.rrd import Rrd from sugar_network.toolkit.router import Unauthorized -from sugar_network.node import stats, obs +from sugar_network.node import stats_user, stats_node, obs from sugar_network.node.commands import NodeCommands -from sugar_network.node.stats import stats_node_step, stats_node_rras, NodeStats from sugar_network.resources.volume import Volume, Resource from sugar_network.resources.user import User from sugar_network.resources.context import Context @@ -29,9 +28,9 @@ class NodeTest(tests.Test): def setUp(self): tests.Test.setUp(self) - stats.stats_root.value = 'stats' - stats.stats_user_step.value = 1 - stats.stats_user_rras.value = ['RRA:AVERAGE:0.5:1:100'] + node.stats_root.value = 'stats' + stats_user.stats_user_step.value = 1 + stats_user.stats_user_rras.value = ['RRA:AVERAGE:0.5:1:100'] def test_UserStats(self): volume = Volume('db') @@ -51,7 +50,7 @@ class NodeTest(tests.Test): 'enable': True, 'status': {}, 'rras': ['RRA:AVERAGE:0.5:1:4320', 'RRA:AVERAGE:0.5:5:2016'], - 'step': stats.stats_user_step.value, + 'step': stats_user.stats_user_step.value, }, call(cp, method='GET', cmd='stats-info', document='user', guid=tests.UID, principal=tests.UID)) @@ -65,7 +64,7 @@ class NodeTest(tests.Test): 'test': ts + 2, }, 'rras': ['RRA:AVERAGE:0.5:1:4320', 'RRA:AVERAGE:0.5:5:2016'], - 'step': stats.stats_user_step.value, + 'step': stats_user.stats_user_step.value, }, call(cp, method='GET', cmd='stats-info', document='user', guid=tests.UID, principal=tests.UID)) @@ -79,7 +78,7 @@ class NodeTest(tests.Test): 'test': ts + 3, }, 'rras': ['RRA:AVERAGE:0.5:1:4320', 'RRA:AVERAGE:0.5:5:2016'], - 'step': stats.stats_user_step.value, + 'step': stats_user.stats_user_step.value, }, call(cp, method='GET', cmd='stats-info', document='user', guid=tests.UID, principal=tests.UID)) @@ -94,14 +93,14 @@ class NodeTest(tests.Test): 'test2': ts + 4, }, 'rras': ['RRA:AVERAGE:0.5:1:4320', 'RRA:AVERAGE:0.5:5:2016'], - 'step': stats.stats_user_step.value, + 'step': stats_user.stats_user_step.value, }, call(cp, method='GET', cmd='stats-info', document='user', guid=tests.UID, principal=tests.UID)) def test_NodeStats(self): - stats.stats_node.value = True - stats_node_step.value = 1 - rrd = Rrd('stats/node', stats_node_step.value, stats_node_rras.value) + stats_node.stats_node.value = True + stats_node.stats_node_step.value = 1 + rrd = Rrd('stats/node', stats_node.stats_node_step.value, stats_node.stats_node_rras.value) ts = int(time.time()) / 3 * 3 for i in range(100): diff --git a/tests/units/node/stats.py b/tests/units/node/stats_node.py index 9cb80d1..7c1b893 100755 --- a/tests/units/node/stats.py +++ b/tests/units/node/stats_node.py @@ -6,7 +6,7 @@ import time from __init__ import tests from sugar_network.toolkit.rrd import Rrd -from sugar_network.node.stats import stats_node_step, NodeStats +from sugar_network.node.stats_node import stats_node_step, Sniffer from sugar_network.resources.user import User from sugar_network.resources.context import Context from sugar_network.resources.implementation import Implementation @@ -22,7 +22,7 @@ class StatsTest(tests.Test): def test_DoNotLogAnonymouses(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='GET', document='context', guid='guid') stats.log(request) @@ -34,7 +34,7 @@ class StatsTest(tests.Test): def test_DoNotLogCmds(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='GET', document='context', guid='guid', cmd='probe') request.principal = 'user' @@ -48,7 +48,7 @@ class StatsTest(tests.Test): def test_InitializeTotals(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) self.assertEqual(0, stats._stats['user'].total) self.assertEqual(0, stats._stats['context'].total) self.assertEqual(0, stats._stats['review'].total) @@ -65,7 +65,7 @@ class StatsTest(tests.Test): volume['solution'].create(guid='solution', context='context', feedback='feedback', content='') volume['artifact'].create(guid='artifact', type='instance', context='context', title='', description='') - stats = NodeStats(volume) + stats = Sniffer(volume) self.assertEqual(1, stats._stats['user'].total) self.assertEqual(1, stats._stats['context'].total) self.assertEqual(1, stats._stats['review'].total) @@ -76,7 +76,7 @@ class StatsTest(tests.Test): def test_POSTs(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='POST', document='context') request.principal = 'user' @@ -90,7 +90,7 @@ class StatsTest(tests.Test): def test_PUTs(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='PUT', document='context', guid='guid') request.principal = 'user' @@ -104,7 +104,7 @@ class StatsTest(tests.Test): def test_DELETEs(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='DELETE', document='context') request.principal = 'user' @@ -118,7 +118,7 @@ class StatsTest(tests.Test): def test_GETs(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='GET', document='user') request.principal = 'user' @@ -127,7 +127,7 @@ class StatsTest(tests.Test): def test_GETsDocument(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='GET', document='user', guid='user') request.principal = 'user' @@ -136,7 +136,7 @@ class StatsTest(tests.Test): def test_FeedbackSolutions(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) volume['feedback'].create(guid='guid', context='context', type='idea', title='', content='') request = Request(method='PUT', document='feedback', guid='guid') @@ -164,7 +164,7 @@ class StatsTest(tests.Test): def test_Comments(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) volume['solution'].create(guid='solution', context='context', feedback='feedback', content='') volume['feedback'].create(guid='feedback', context='context', type='idea', title='', content='') volume['review'].create(guid='review', context='context', title='', content='', rating=5) @@ -189,7 +189,7 @@ class StatsTest(tests.Test): def test_Reviewes(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) volume['context'].create(guid='context', type='activity', title='', summary='', description='') volume['artifact'].create(guid='artifact', type='instance', context='context', title='', description='') @@ -216,7 +216,7 @@ class StatsTest(tests.Test): def test_ContextDownloaded(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact, Implementation]) - stats = NodeStats(volume) + stats = Sniffer(volume) volume['context'].create(guid='context', type='activity', title='', summary='', description='') volume['implementation'].create(guid='implementation', context='context', license='GPLv3', version='1', date=0, stability='stable', notes='') @@ -232,7 +232,7 @@ class StatsTest(tests.Test): def test_ContextReleased(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact, Implementation]) - stats = NodeStats(volume) + stats = Sniffer(volume) volume['context'].create(guid='context', type='activity', title='', summary='', description='') request = Request(method='POST', document='implementation') @@ -243,7 +243,7 @@ class StatsTest(tests.Test): def test_ContextFailed(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact, Implementation]) - stats = NodeStats(volume) + stats = Sniffer(volume) volume['context'].create(guid='context', type='activity', title='', summary='', description='') request = Request(method='POST', document='report') @@ -254,7 +254,7 @@ class StatsTest(tests.Test): def test_ContextActive(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact, Implementation]) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='PUT', document='context', guid='1') request.principal = 'user' @@ -312,7 +312,7 @@ class StatsTest(tests.Test): def test_UserActive(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact, Implementation]) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='GET', document='user') request.principal = '1' @@ -336,7 +336,7 @@ class StatsTest(tests.Test): def test_ArtifactDownloaded(self): volume = Volume('local', [User, Context, Review, Feedback, Solution, Artifact]) - stats = NodeStats(volume) + stats = Sniffer(volume) volume['artifact'].create(guid='artifact', type='instance', context='context', title='', description='') request = Request(method='GET', document='artifact', guid='artifact', prop='fake') @@ -361,7 +361,7 @@ class StatsTest(tests.Test): volume['solution'].create(guid='solution', context='context', feedback='feedback', content='') volume['artifact'].create(guid='artifact', type='instance', context='context', title='', description='') - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='GET', document='user', guid='user') request.principal = 'user' stats.log(request) @@ -489,7 +489,7 @@ class StatsTest(tests.Test): self.assertEqual([0, 0], volume['context'].get('context')['reviews']) self.assertEqual(0, volume['context'].get('context')['rating']) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='GET', document='implementation', guid='implementation', prop='data') request.principal = 'user' stats.log(request) @@ -513,7 +513,7 @@ class StatsTest(tests.Test): self.assertEqual([1, 5], volume['context'].get('context')['reviews']) self.assertEqual(5, volume['context'].get('context')['rating']) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='GET', document='implementation', guid='implementation', prop='data') request.principal = 'user' stats.log(request) @@ -538,7 +538,7 @@ class StatsTest(tests.Test): self.assertEqual([0, 0], volume['artifact'].get('artifact')['reviews']) self.assertEqual(0, volume['artifact'].get('artifact')['rating']) - stats = NodeStats(volume) + stats = Sniffer(volume) request = Request(method='GET', document='artifact', guid='artifact', prop='data') request.principal = 'user' stats.log(request) diff --git a/tests/units/node/sync_online.py b/tests/units/node/sync_online.py index 1bbf785..79d04b0 100755 --- a/tests/units/node/sync_online.py +++ b/tests/units/node/sync_online.py @@ -5,7 +5,7 @@ from __init__ import tests from sugar_network import db from sugar_network.client import Client, api_url -from sugar_network.node import sync, stats +from sugar_network.node import sync, stats_user from sugar_network.node.master import MasterCommands from sugar_network.node.slave import SlaveCommands from sugar_network.resources.volume import Volume @@ -19,18 +19,18 @@ class SyncOnlineTest(tests.Test): def setUp(self): tests.Test.setUp(self) - stats.stats_user.value = True + stats_user.stats_user.value = True self.stats_commit = [] self.stats_merge = [] def stats_diff(): yield {'stats': 'probe'} - self.override(stats, 'diff', stats_diff) + self.override(stats_user, 'diff', stats_diff) def stats_merge(packet): self.stats_merge.extend([i for i in packet]) return 'ok' - self.override(stats, 'merge', stats_merge) - self.override(stats, 'commit', lambda seq: self.stats_commit.append(seq)) + self.override(stats_user, 'merge', stats_merge) + self.override(stats_user, 'commit', lambda seq: self.stats_commit.append(seq)) class Document(Feedback): pass |