Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2013-02-21 17:52:26 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2013-02-21 17:52:26 (GMT)
commitfcfd6764f269e4f81712ddb83c5f1d44bfe0b920 (patch)
tree6fc006058cac7ea3f759948e97b31173bd189efe
parentc708deff172e2827404695f363268167594b5f9e (diff)
Do not mix sources for node and user stats
-rwxr-xr-xsugar-network-client4
-rwxr-xr-xsugar-network-node5
-rw-r--r--sugar_network/node/__init__.py4
-rw-r--r--sugar_network/node/commands.py8
-rw-r--r--sugar_network/node/master.py4
-rw-r--r--sugar_network/node/slave.py8
-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.py106
-rw-r--r--sugar_network/resources/user.py10
-rw-r--r--tests/__init__.py14
-rw-r--r--tests/units/node/__main__.py2
-rwxr-xr-xtests/units/node/node.py23
-rwxr-xr-xtests/units/node/stats_node.py (renamed from tests/units/node/stats.py)46
-rwxr-xr-xtests/units/node/sync_online.py10
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