-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathwatchdog.py
61 lines (54 loc) · 1.91 KB
/
watchdog.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
# Purpose: fire up server, talk with master
# implemented as RPC server
from twisted.web import xmlrpc
from twisted.internet import defer
from twisted.python import log
import subprocess
import config
class WatchDogServer(xmlrpc.XMLRPC):
proc = None
def __init__(self, port, **kwargs):
xmlrpc.XMLRPC.__init__(self, **kwargs)
self.port = port
def xmlrpc_joinServer(self, id, toConnect=None):
if self.proc is not None:
return xmlrpc.Fault(1, "Server already started.")
try:
command = ["python", "server.py", "-i", str(id)]
if toConnect:
command += ["-c"] + list(map(str, toConnect))
self.proc = subprocess.Popen(command)
return 0
except Exception as e:
return xmlrpc.Fault(2, str(e))
def xmlrpc_killServer(self):
if self.proc is None:
return xmlrpc.Fault(1, "Server hasn't started.")
try:
# send a SIGTERM to self.proc and wait for it to terminate
self.proc.terminate()
self.proc.wait()
self.proc = None
return 0
except Exception as e:
return xmlrpc.Fault(2, str(e))
if __name__ == '__main__':
from twisted.internet import reactor
from twisted.web import server
from optparse import OptionParser
parser = OptionParser(
usage="Serverside watchdog for receiving master program instructions.")
parser.add_option(
"-p",
"--port",
metavar="PORT_NUM",
default=config.WATCHDOG_PORT,
type="int",
dest="port",
help="the port watchdog will listen to.")
(options, args) = parser.parse_args()
log.startLogging(config.LOG_FILE)
watchdog = WatchDogServer(options.port)
reactor.listenTCP(watchdog.port, server.Site(watchdog))
log.msg("WatchDog Server Running on {}.".format(watchdog.port))
reactor.run()