-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstore.py
91 lines (64 loc) · 1.8 KB
/
store.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/usr/bin/env python
import redis
import time
def add_job(req_id, ip, email, passphrase=None):
r = redis.Redis()
jid = 'medusa_%s'%req_id
r.zadd('medusajobs', jid, time.time())
r.hset(jid, 'ip', ip)
r.hset(jid, 'email', email)
r.hset(jid, 'date', time.asctime())
r.hset(jid, 'time', time.time())
r.hset(jid, 'status', 'Job not started')
if passphrase is not None:
r.hset(jid, 'passphrase', passphrase)
def update_job(req_id, key, value):
r = redis.Redis()
jid = 'medusa_%s'%req_id
r.hset(jid, key, value)
def retrieve_job(req_id):
r = redis.Redis()
return r.hgetall('medusa_%s'%req_id)
def slice_it(li, cols=10):
start = 0
for i in xrange(cols):
stop = start + len(li[i::cols])
yield li[start:stop]
start = stop
def cumulative_jobs(size=100):
r = redis.Redis()
i = 0
res = []
for j in r.zrange('medusajobs', 0, -1):
i += 1
date = r.hget(j, 'date')
res.append( (i, date) )
for s in slice_it(res, cols=size):
if len(s) > 0:
yield s[-1]
def unique_emails(size=100):
r = redis.Redis()
ip = set()
res = []
for j in r.zrange('medusajobs', 0, -1):
i = r.hget(j, 'email')
date = r.hget(j, 'date')
if i not in ip:
ip.add(i)
res.append( (len(ip), date) )
for s in slice_it(res, cols=size):
if len(s) > 0:
yield s[-1]
def unique_ips(size=100):
r = redis.Redis()
ip = set()
res = []
for j in r.zrange('medusajobs', 0, -1):
i = r.hget(j, 'ip')
date = r.hget(j, 'date')
if i not in ip:
ip.add(i)
res.append( (len(ip), date) )
for s in slice_it(res, cols=size):
if len(s) > 0:
yield s[-1]