Revision cf2a3529 snf-cyclades-app/synnefo/logic/dispatcher.py
b/snf-cyclades-app/synnefo/logic/dispatcher.py | ||
---|---|---|
38 | 38 |
""" |
39 | 39 |
from django.core.management import setup_environ |
40 | 40 |
|
41 |
# Fix path to import synnefo settings |
|
41 | 42 |
import sys |
42 | 43 |
import os |
43 | 44 |
path = os.path.normpath(os.path.join(os.getcwd(), '..')) |
... | ... | |
46 | 47 |
from synnefo import settings |
47 | 48 |
setup_environ(settings) |
48 | 49 |
|
49 |
from amqplib import client_0_8 as amqp |
|
50 |
from signal import signal, SIGINT, SIGTERM |
|
51 |
|
|
52 | 50 |
import logging |
53 | 51 |
import time |
54 |
import socket |
|
55 |
from daemon import daemon |
|
56 | 52 |
|
57 |
from synnefo.lib.amqp import AMQPClient |
|
53 |
import daemon.runner |
|
54 |
import daemon.daemon |
|
55 |
from lockfile import LockTimeout |
|
56 |
from signal import signal, SIGINT, SIGTERM |
|
58 | 57 |
|
59 | 58 |
# Take care of differences between python-daemon versions. |
60 | 59 |
try: |
61 |
from daemon import pidfile |
|
60 |
from daemon import pidfile as pidlockfile
|
|
62 | 61 |
except: |
63 | 62 |
from daemon import pidlockfile |
64 | 63 |
|
64 |
from synnefo.lib.amqp import AMQPClient |
|
65 | 65 |
from synnefo.logic import callbacks |
66 | 66 |
from synnefo.util.dictconfig import dictConfig |
67 | 67 |
|
... | ... | |
164 | 164 |
# Queue # Exchange # RouteKey # Handler |
165 | 165 |
(QUEUE_GANETI_EVENTS_OP, settings.EXCHANGE_GANETI, DB_HANDLER_KEY_OP, 'update_db'), |
166 | 166 |
(QUEUE_GANETI_EVENTS_NET, settings.EXCHANGE_GANETI, DB_HANDLER_KEY_NET, 'update_net'), |
167 |
(QUEUE_GANETI_BUILD_PROGR,settings.EXCHANGE_GANETI, BUILD_MONITOR_HANDLER, 'update_build_progress'), |
|
167 |
(QUEUE_GANETI_BUILD_PROGR, settings.EXCHANGE_GANETI, BUILD_MONITOR_HANDLER, 'update_build_progress'),
|
|
168 | 168 |
] |
169 | 169 |
|
170 | 170 |
if settings.DEBUG is True: |
... | ... | |
187 | 187 |
""""Catch exit signal in parent process and forward it to children.""" |
188 | 188 |
global children |
189 | 189 |
log.info("Caught signal %d, sending SIGTERM to children %s", |
190 |
signum, children)
|
|
190 |
signum, children) |
|
191 | 191 |
[os.kill(pid, SIGTERM) for pid in children] |
192 | 192 |
|
193 | 193 |
|
... | ... | |
205 | 205 |
def parse_arguments(args): |
206 | 206 |
from optparse import OptionParser |
207 | 207 |
|
208 |
default_pid_file = os.path.join("var","run","synnefo","dispatcher.pid")
|
|
208 |
default_pid_file = os.path.join("var", "run", "synnefo", "dispatcher.pid")
|
|
209 | 209 |
parser = OptionParser() |
210 | 210 |
parser.add_option("-d", "--debug", action="store_true", default=False, |
211 | 211 |
dest="debug", help="Enable debug mode") |
... | ... | |
332 | 332 |
global children |
333 | 333 |
|
334 | 334 |
# Create pidfile, |
335 |
# take care of differences between python-daemon versions |
|
336 |
try: |
|
337 |
pidf = pidfile.TimeoutPIDLockFile(opts.pid_file, 10) |
|
338 |
except: |
|
339 |
pidf = pidlockfile.TimeoutPIDLockFile(opts.pid_file, 10) |
|
335 |
pidf = pidlockfile.TimeoutPIDLockFile(opts.pid_file, 10) |
|
340 | 336 |
|
341 |
pidf.acquire() |
|
337 |
if daemon.runner.is_pidfile_stale(pidf): |
|
338 |
log.warning("Removing stale PID lock file %s", pidf.path) |
|
339 |
pidf.break_lock() |
|
340 |
|
|
341 |
try: |
|
342 |
pidf.acquire() |
|
343 |
except (pidlockfile.AlreadyLocked, LockTimeout): |
|
344 |
log.critical("Failed to lock pidfile %s, another instance running?", |
|
345 |
pidf.path) |
|
346 |
sys.exit(1) |
|
342 | 347 |
|
343 | 348 |
log.info("Became a daemon") |
344 | 349 |
|
... | ... | |
375 | 380 |
|
376 | 381 |
|
377 | 382 |
def main(): |
383 |
(opts, args) = parse_arguments(sys.argv[1:]) |
|
384 |
|
|
378 | 385 |
dictConfig(settings.DISPATCHER_LOGGING) |
379 | 386 |
|
380 | 387 |
global log |
381 | 388 |
|
382 |
(opts, args) = parse_arguments(sys.argv[1:]) |
|
383 |
|
|
384 | 389 |
# Init the global variables containing the queues |
385 | 390 |
_init_queues() |
386 | 391 |
|
... | ... | |
409 | 414 |
if stream and hasattr(stream, 'fileno'): |
410 | 415 |
files_preserve.append(handler.stream) |
411 | 416 |
|
412 |
daemon_context = daemon.DaemonContext( |
|
417 |
daemon_context = daemon.daemon.DaemonContext(
|
|
413 | 418 |
files_preserve=files_preserve, |
414 | 419 |
umask=022) |
415 | 420 |
|
Also available in: Unified diff