|
a/Allura/allura/model/stats.py |
|
b/Allura/allura/model/stats.py |
1 |
import logging
|
1 |
import logging
|
|
|
2 |
from collections import defaultdict
|
|
|
3 |
from datetime import datetime, time
|
2 |
|
4 |
|
3 |
import ming
|
5 |
import ming
|
4 |
|
6 |
|
5 |
from .session import main_doc_session
|
7 |
from .session import main_doc_session
|
6 |
|
8 |
|
|
... |
|
... |
8 |
|
10 |
|
9 |
class Stats(ming.Document):
|
11 |
class Stats(ming.Document):
|
10 |
class __mongometa__:
|
12 |
class __mongometa__:
|
11 |
session = main_doc_session
|
13 |
session = main_doc_session
|
12 |
name='stats'
|
14 |
name='stats'
|
|
|
15 |
|
|
|
16 |
class CPA(ming.Document):
|
|
|
17 |
class __mongometa__:
|
|
|
18 |
session = main_doc_session
|
|
|
19 |
name='content_production_activities'
|
|
|
20 |
indexes = [
|
|
|
21 |
'type', 'class_name', 'project_id', 'project_shortname', 'app_config_id', 'when' ]
|
|
|
22 |
|
|
|
23 |
@classmethod
|
|
|
24 |
def post(cls, type, obj):
|
|
|
25 |
doc = cls.make(dict(
|
|
|
26 |
type=type,
|
|
|
27 |
class_name='%s.%s' % (
|
|
|
28 |
obj.__class__.__module__,
|
|
|
29 |
obj.__class__.__name__),
|
|
|
30 |
project_id=obj.app_config.project_id,
|
|
|
31 |
project_shortname=obj.app_config.project.shortname,
|
|
|
32 |
app_config_id=obj.app_config_id,
|
|
|
33 |
tool_name=obj.app_config.tool_name,
|
|
|
34 |
mount_point=obj.app_config.options.mount_point,
|
|
|
35 |
when=datetime.utcnow()))
|
|
|
36 |
doc.m.insert()
|
|
|
37 |
|
|
|
38 |
@classmethod
|
|
|
39 |
def stats(cls, since=None):
|
|
|
40 |
result = defaultdict(lambda:dict(create=0, modify=0, delete=0))
|
|
|
41 |
if since:
|
|
|
42 |
q = dict(when={'$gt':datetime.combine(since, time.min)})
|
|
|
43 |
else:
|
|
|
44 |
q = {}
|
|
|
45 |
for doc in cls.m.find(q).sort([('tool_name', 1), ('class_name', 1)]):
|
|
|
46 |
result[doc.tool_name, doc.class_name][doc.type] += 1
|
|
|
47 |
result = sorted(result.iteritems())
|
|
|
48 |
return [ dict(v, tool_name=k[0], class_name=k[1])
|
|
|
49 |
for k,v in result]
|