This repository has been archived by the owner on Sep 24, 2018. It is now read-only.
forked from a-pertsev/release-man
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun.py
122 lines (85 loc) · 2.82 KB
/
run.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
# -*- coding: utf-8 -*-
import os
import sys
import logging
import signal
from daemon import pidlockfile, daemon
from datetime import datetime
from tornado import web, ioloop, httpserver
from release_info_handler import ReleaseInfoHandler
PIDFILE = 'release.pid'
logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.DEBUG)
def init_application():
routes = [
(r"/()", web.StaticFileHandler, {"path": "main.html"}),
(r'/ajax/get_release_info', ReleaseInfoHandler),
(r"/static/(.*)", web.StaticFileHandler, {"path": "static/"}),
]
app = web.Application(routes, debug=True)
http_server = httpserver.HTTPServer(app)
http_server.bind(9999)
http_server.start()
def stop_handler(signum, frame):
logging.info('Requested shutdown')
http_server.stop()
if ioloop.IOLoop.instance().running():
logging.info('Stoppinig ioloop')
ioloop.IOLoop.instance().stop()
logging.info('Server stoped')
signal.signal(signal.SIGTERM, signal.SIG_IGN)
signal.signal(signal.SIGTERM, stop_handler)
logging.info('Server started')
ioloop.IOLoop.instance().start()
def start_server():
logging.info('Server starting at: {0}'.format(datetime.now()))
pid = None
try:
pid = pidlockfile.read_pid_from_pidfile(PIDFILE)
except OSError:
pass
if pid is not None:
try:
os.getpgid(pid)
except OSError:
pidlockfile.remove_existing_pidfile(PIDFILE)
else:
init_application()
return
try:
pidlockfile.write_pid_to_pidfile(PIDFILE)
except OSError:
logging.error('Pid file already exist, process must be running')
sys.exit()
init_application()
def stop_server():
logging.info('Stopping server')
pid = pidlockfile.read_pid_from_pidfile(PIDFILE)
try:
os.kill(pid, signal.SIGTERM)
except OSError:
logging.error('No such a process - cannot kill it')
except TypeError:
logging.error('Error reading pid file')
pidlockfile.remove_existing_pidfile(PIDFILE)
def start_as_daemon():
log = open('release.log', 'w+')
ctx = daemon.DaemonContext(working_directory='.',
stderr=log,
stdout=log)
ctx.open()
start_server()
if __name__ == '__main__':
if len(sys.argv) == 1:
start_server()
else:
if 'stop' in sys.argv:
stop_server()
sys.exit()
if 'restart' in sys.argv:
try:
stop_server()
except:
pass
start_as_daemon()
if 'start' in sys.argv:
start_as_daemon()