Newer
Older
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
#!/usr/bin/env python
import sys
import json
from rc_rmq import RCRMQ
from datetime import datetime
task = 'task_manager'
record = {
'uid': -1,
'gid': -1,
'email': '',
'last_update': datetime.now(),
'request': {
'uid_resolve': None
},
'create': {
'join_list': None,
'create_account': None
},
'verify': {
'git_commit': None,
'dir_verify': None
}
}
# Currently tracking users
tracking = {}
# Instantiate rabbitmq object
rc_rmq = RCRMQ({'exchange': 'RegUsr', 'exchange_type': 'topic'})
def task_manager(ch, method, properties, body):
msg = json.loads(body)
username = method.routing_key.split('.')[1]
task_name = msg['task']
success = msg['success']
if username not in tracking:
current = tracking[username] = record.copy()
current['uid'] = msg.get('uid', -1)
current['gid'] = msg.get('gid', -1)
current['email'] = msg.get('email', '')
else:
current = tracking[username]
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
try:
# Check each level
# task timeout
# failure agent(?
if task_name in current['request']:
current['request'][task_name] = success
routing_key = 'create.' + username
done = success
elif task_name in current['create']:
current['create'][task_name] = success
routing_key = 'verify.' + username
done = True
for status in current['create'].values():
if status is not True:
done = False
elif task_name in current['verify']:
current['verify'][task_name] = success
routing_key = 'notify.' + username
done = True
for status in current['verify'].values():
if status is not True:
done = False
except:
e = sys.exc_info()[0]
print("[{}]: Error: {}".format(task, e))
if done:
# send trigger message
rc_rmq.publish_msg({
'routing_key': routing_key
'msg': {
'username': username,
'email': current['email'],
'uid': current['uid'],
'gid': current['gid']
}
})