Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar_network/node/stats_node.py
diff options
context:
space:
mode:
Diffstat (limited to 'sugar_network/node/stats_node.py')
-rw-r--r--sugar_network/node/stats_node.py82
1 files changed, 25 insertions, 57 deletions
diff --git a/sugar_network/node/stats_node.py b/sugar_network/node/stats_node.py
index 6c24278..e21a8bd 100644
--- a/sugar_network/node/stats_node.py
+++ b/sugar_network/node/stats_node.py
@@ -76,6 +76,7 @@ class Sniffer(object):
class _ObjectStats(object):
+ downloads = 0
reviews = 0
rating = 0
@@ -92,6 +93,12 @@ class _Stats(object):
self._volume = volume
self._directory = volume[self.RESOURCE]
+ def __getitem__(self, guid):
+ result = self.active.get(guid)
+ if result is None:
+ result = self.active[guid] = _ObjectStats()
+ return result
+
def log(self, request):
context = None
@@ -122,20 +129,8 @@ class _Stats(object):
elif request.method == 'POST':
context = parse_context(request.content)
- if request.principal:
- stats = self._stats['user']
- if request.method in ('POST', 'PUT', 'DELETE'):
- stats.effective.add(request.principal)
- stats.active.add(request.principal)
-
if context:
- return self._stats['context'].active_object(context)
-
- def active_object(self, guid):
- result = self.active.get(guid)
- if result is None:
- result = self.active[guid] = _ObjectStats()
- return result
+ return self._stats['context'][context]
def commit(self):
pass
@@ -144,10 +139,6 @@ class _Stats(object):
class _ResourceStats(_Stats):
total = 0
- created = 0
- updated = 0
- deleted = 0
- viewed = 0
def __init__(self, stats, volume):
_Stats.__init__(self, stats, volume)
@@ -156,32 +147,29 @@ class _ResourceStats(_Stats):
def log(self, request):
result = _Stats.log(self, request)
- if request.method == 'GET':
- if request.guid and not request.prop:
- self.viewed += 1
- elif request.method == 'PUT':
- self.updated += 1
- elif request.method == 'POST':
+ if request.method == 'POST':
self.total += 1
- self.created += 1
elif request.method == 'DELETE':
self.total -= 1
- self.deleted += 1
return result
def commit(self):
if type(self.active) is dict:
for guid, stats in self.active.items():
- if not stats.reviews:
+ if not stats.reviews and not stats.downloads:
continue
- reviews, rating = self._directory.get(guid)['reviews']
- reviews += stats.reviews
- rating += stats.rating
- self._directory.update(guid, {
- 'reviews': [reviews, rating],
- 'rating': int(round(float(rating) / reviews)),
- })
+ doc = self._directory.get(guid)
+ updates = {}
+ if stats.downloads:
+ updates['downloads'] = stats.downloads + doc['downloads']
+ if stats.reviews:
+ reviews, rating = doc['reviews']
+ reviews += stats.reviews
+ rating += stats.rating
+ updates['reviews'] = [reviews, rating]
+ updates['rating'] = int(round(float(rating) / reviews))
+ self._directory.update(guid, updates)
result = {}
for attr in dir(self):
@@ -193,11 +181,6 @@ class _ResourceStats(_Stats):
if type(value) in (int, long):
result[attr] = value
- self.created = 0
- self.updated = 0
- self.deleted = 0
- self.viewed = 0
-
return result
@@ -205,17 +188,6 @@ class _UserStats(_ResourceStats):
RESOURCE = 'user'
- def __init__(self, stats, volume):
- _ResourceStats.__init__(self, stats, volume)
- self.active = set()
- self.effective = set()
-
- def commit(self):
- result = _ResourceStats.commit(self)
- self.active.clear()
- self.effective.clear()
- return result
-
class _ContextStats(_ResourceStats):
@@ -250,6 +222,8 @@ class _ImplementationStats(_Stats):
if request.method == 'GET':
if request.prop == 'data':
+ context = self._volume['implementation'].get(request.guid)
+ self._stats['context'][context.context].downloads += 1
self._stats['context'].downloaded += 1
elif request.method == 'POST':
self._stats['context'].released += 1
@@ -280,7 +254,7 @@ class _ReviewStats(_ResourceStats):
if request.method == 'POST':
if request.content.get('artifact'):
artifact = self._stats['artifact']
- stats = artifact.active_object(request.content['artifact'])
+ stats = artifact[request.content['artifact']]
artifact.reviewed += 1
else:
stats = context
@@ -300,9 +274,6 @@ class _FeedbackStats(_ResourceStats):
OWNERS = ['context']
solutions = 0
- solved = 0
- rejected = 0
-
commented = 0
def __init__(self, stats, volume):
@@ -317,16 +288,12 @@ class _FeedbackStats(_ResourceStats):
if request.method in ('POST', 'PUT'):
if 'solution' in request.content:
if request.content['solution'] is None:
- self.rejected += 1
self.solutions -= 1
else:
- self.solved += 1
self.solutions += 1
def commit(self):
result = _ResourceStats.commit(self)
- self.solved = 0
- self.rejected = 0
self.commented = 0
return result
@@ -361,6 +328,7 @@ class _ArtifactStats(_ResourceStats):
if request.method == 'GET':
if request.prop == 'data':
+ self[request.guid].downloads += 1
self.downloaded += 1
def commit(self):