forked from MblKiTA/mongo-rs-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
133 lines (98 loc) · 4.08 KB
/
main.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import sys
sys.path.insert(0, 'mongo-python-driver/test/high_availability')
import ha_tools
import tornado.ioloop
import tornado.web
import tornado.template as template
import uuid
import json
class RsHandler(tornado.web.RequestHandler):
# Reply's tpls extension
_ext = ".json"
# Init template loader with 'tpl' dir
_template = template.Loader('tpl')
def _parse_json(self, data):
try:
json_data = json.loads(data)
except ValueError:
raise tornado.httpserver._BadRequestException(
"Invalid JSON structure."
)
if type(json_data) != dict:
raise tornado.httpserver._BadRequestException(
"We only accept key value objects!"
)
return json_data
def message(self, message):
self.write(self._template.load('message' + self._ext).generate(message=message))
def get(self):
""" Respond to a GET
"""
self.write('GET')
def post(self, op):
""" Respond to a POST
"""
# Start RS
if op == 'start':
request = self._parse_json(self.request.body)
members = request['members']
try:
# start RS and get its' params
res = ha_tools.start_replica_set(members)
except:
raise tornado.httpserver._BadRequestException(
"Couldn't start RS!"
)
rs_uri, rs_name = res
rs_id = uuid.uuid4()
self.write(self._template.load(op + self._ext).generate(rs_id=rs_id, rs_uri=rs_uri, rs_name=rs_name))
# Stop rs
elif op == 'stop':
try:
ha_tools.kill_all_members()
except:
raise tornado.httpserver._BadRequestException(
"Couldn't stop RS!"
)
# Get primary
elif op == 'get_primary':
request = self._parse_json(self.request.body)
rs_id = request['rs']['id']
rs_primary_uri = ha_tools.get_primary()
self.write(self._template.load(op + self._ext).generate(rs_id=rs_id, rs_primary_uri=rs_primary_uri))
# Get secondaries
elif op == 'get_secondaries':
request = self._parse_json(self.request.body)
rs_id = request['rs']['id']
rs_secondaries_uris = ha_tools.get_secondaries()
self.write(self._template.load(op + self._ext).generate(rs_id=rs_id, rs_secondaries_uris=rs_secondaries_uris))
# Get arbiters
elif op == 'get_arbiters':
request = self._parse_json(self.request.body)
rs_id = request['rs']['id']
rs_arbiters_uris = ha_tools.get_arbiters()
self.write(self._template.load(op + self._ext).generate(rs_id=rs_id, rs_arbiters_uris=rs_arbiters_uris))
# Kill primary
elif op == 'kill_primary':
request = self._parse_json(self.request.body)
rs_id = request['rs']['id']
rs_killed_primary_uri = ha_tools.kill_primary()
self.write(self._template.load(op + self._ext).generate(rs_id=rs_id, rs_killed_primary_uri=rs_killed_primary_uri))
# Kill secondary
elif op == 'kill_secondary':
request = self._parse_json(self.request.body)
rs_id = request['rs']['id']
rs_killed_secondary_uri = ha_tools.kill_secondary()
self.write(self._template.load(op + self._ext).generate(rs_id=rs_id, rs_killed_secondary_uri=rs_killed_secondary_uri))
# Kill all secondaries
elif op == 'kill_all_secondaries':
request = self._parse_json(self.request.body)
rs_id = request['rs']['id']
rs_killed_secondaries_uris = ha_tools.kill_all_secondaries()
self.write(self._template.load(op + self._ext).generate(rs_id=rs_id, rs_killed_secondaries_uris=rs_killed_secondaries_uris))
application = tornado.web.Application([
(r"/rs/([_a-z]*)", RsHandler)
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()