Switch to unified view

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]