-
Notifications
You must be signed in to change notification settings - Fork 0
/
nodecheckin.py
107 lines (83 loc) · 2.62 KB
/
nodecheckin.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
#!/usr/bin/env python
# coding=utf-8
from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler
import logging
import socket
from subprocess import call
"""
Simple RPC Server to wait for node check in on Kamailio.
"""
__author__ = 'JustinZimmer'
logging.basicConfig(level=logging.DEBUG)
class RPCServer(SimpleXMLRPCServer):
quit = False
def __init__(self, *args, **kwargs):
self._timedout = False
self.status = 'INIT'
SimpleXMLRPCServer.__init__(self, *args, **kwargs)
def handle_request(self):
self._timedout = False
self.status = "WAITING"
return SimpleXMLRPCServer.handle_request(self)
def handle_timeout(self):
self.status = 'TIMEDOUT'
self._timedout = True
return self.status
def serve_forever(self):
self.quit = False
while not self.quit:
self.handle_request()
def shutdown(self):
self.quit = True
return 1
def timedout(self):
return self._timedout
def KamCheckIn(host):
logging.debug('Adding Host: %s', host)
if hostname_resolves(host):
cmd = "kamctl dispatcher add 2 sip:{0} 0 0 '' '{0}'".format(host)
cmdReload = "kamctl dispatcher reload"
retCode = call(cmd, shell=True)
retCode = call(cmdReload, shell=True)
return retCode
else:
return False
# print status
# return status
def KamCheckOut(host):
logging.debug('Removing Host: %s', host)
cmd = "kamctl db exec \"delete from dispatcher "
"where description ='{0}';\"".format(host)
cmdReload = "kamctl dispatcher reload"
retCode = call(cmd, shell=True)
retCode = call(cmdReload, shell=True)
return retCode
# print status
# return status
def Shutdown():
logging.debug('Shutting down...')
server.shutdown()
def hostname_resolves(hostname):
try:
socket.gethostbyname(hostname)
return True
except socket.error:
return False
server = RPCServer(('0.0.0.0', 8787),
SimpleXMLRPCRequestHandler,
logRequests=False,
allow_none=True)
# server.timeout=15 # seconds
server.register_function(KamCheckIn, 'check_in')
server.register_function(KamCheckOut, 'check_out')
server.register_function(Shutdown, 'shutdown')
try:
server.serve_forever()
# print '{0} just happened!'.format(server.status)
# print server.status
except Exception, e:
logging.debug('Unexpected Exception: %s', str(e))
# server.status="EXCEPTION: {0}".format(str(e))
# print server.status
except KeyboardInterrupt:
logging.debug("User Aborted!")