root/lightcloud/lightcloud/counters.py

Revision 61, 2.4 kB (checked in by amix, 2 years ago)

Spam control added.

Line 
1 from datetime import datetime, timedelta
2 from time import gmtime, strftime
3
4 import lightcloud
5
6
7 #--- Simple counter ----------------------------------------------
8 def update_counter(key, delta=1, system='default'):
9     return lightcloud.incr(_key(key), delta=delta, system=system)
10
11 def get_counts(key, system='default'):
12     count = lightcloud.get(_key(key), system=system)
13     if count:
14         return long(count)
15     return 0
16
17 def reset_counter(key, system='default'):
18     return lightcloud.delete(_key(key), system=system)
19
20
21
22 #--- Day counter ----------------------------------------------
23 def update_day_counter(key, delta=1, system='default'):
24     now = _get_now()
25     day_key = '%s_%s' % (_key(key), _format_date(now))
26     return lightcloud.incr(day_key, delta=delta, system=system)
27
28
29 def get_day_counts(key, offset=None, limit=10, system='default'):
30     if not offset:
31         offset = _get_now()
32
33     result = []
34     for i in xrange(0, limit):
35         day_key = '%s_%s' % (_key(key), _format_date(offset))
36
37         count = lightcloud.get(day_key, system=system) or 0
38         if count:
39             count = long(count)
40
41         result.append({
42             'date': datetime(*offset.timetuple()[0:7]),
43             'counts': count
44         })
45
46         offset = _previous_day(offset)
47
48     return result
49
50 def reset_day_counter(key, days=10, system='default'):
51     date = _get_now()
52
53     for i in xrange(0, days):
54         day_key = '%s_%s' % (_key(key), _format_date(date))
55         lightcloud.delete(day_key, system=system)
56         date = _previous_day(date)
57
58     return True
59
60
61 def get_stats_by_date(vars, offset=None, limit=20, system='default'):
62     var_data = {}
63
64     for var in vars:
65         var_data[var] = get_day_counts(var,
66                                        offset=offset,
67                                        limit=limit,
68                                        system=system)
69
70     result = []
71     for i in xrange(0, limit):
72         stat = {}
73         for var in vars:
74             data = var_data[var]
75             stat[var] = data[i]['counts']
76             stat['date'] = data[i]['date']
77         result.append(stat)
78
79     return result
80
81
82 #--- Helpers ----------------------------------------------
83 def _get_now():
84     return datetime.utcnow()
85
86 def _key(key):
87     return '_LCC.%s' % key
88
89 def _format_date(date):
90     return strftime("%Y-%m-%d", date.timetuple())
91
92 def _previous_day(date):
93     return date - timedelta(days=1)
Note: See TracBrowser for help on using the browser.