forked from lunixbochs/revsync
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcoverage_poll.py
60 lines (52 loc) · 1.83 KB
/
coverage_poll.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import redis
from time import sleep
from datetime import datetime, timedelta
from config import config
import json
def rollup(rclient, key, coverage):
while True:
cov = rclient.rpop(key)
if cov is None:
return coverage
cov = json.loads(cov)
if "b" in cov:
bbs = cov["b"]
for bb in bbs.keys():
if bb not in coverage:
coverage[bb] = {"v": 0, "l": 0, "u": []}
coverage[bb]["v"] += bbs[bb]["v"]
coverage[bb]["l"] += bbs[bb]["l"]
if cov["i"] not in coverage[bb]["u"]:
coverage[bb]["u"].append(cov["i"])
poll_interval = timedelta(minutes=1, seconds=30)
r = redis.StrictRedis(host=config['host'], port=config['port'], password=config['password'])
next_poll = datetime.now()
coverage = {}
while True:
if datetime.now() > next_poll:
print "Polling"
next_poll = datetime.now() + poll_interval
keys = r.keys(pattern="*_COVERAGE")
for key in keys:
k = key.split("_")[0]
print "Retrieving Stored Results"
cov = r.get("%s_STORE" % k)
if cov is None:
print "No Stored Results Found"
cov = {}
else:
cov = json.loads(cov)
print "Rolling Up: %s" % k
cov = rollup(r, key, cov)
print len(cov.keys())
print "Storing Results"
r.set(name="%s_STORE" % k, value=json.dumps(cov))
print "Publish Results"
for c in cov.keys():
cov[c]["u"] = len(cov[c]["u"])
data = {"c": "coverage", "u": "COV", "b": cov}
data = json.dumps(data, separators=(',', ':'), sort_keys=True)
r.publish(k, data)
else:
print "Sleep"
sleep(5)