Skip to content

Commit 581e6b6

Browse files
Disable daemon on NT platform (#21)
* Disable daemon on NT platform python-daemon and pid modules doesn't work on windows. This fixes #20 * Fix indentations
1 parent db23ec9 commit 581e6b6

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

coilmq/start.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,22 @@
22
"""
33
Entrypoint for starting the application.
44
"""
5+
import os
56
import logging
7+
8+
69
import time
710
import threading
811
from contextlib import contextmanager
912

10-
import daemon as pydaemon
11-
import pid
13+
is_nt = os.name == 'nt'
14+
15+
if not is_nt:
16+
import daemon as pydaemon
17+
import pid
18+
else:
19+
pydaemon = pid = None
20+
1221
import click
1322

1423
from coilmq.config import config as global_config, init_config, init_logging, resolve_name
@@ -61,13 +70,13 @@ def server_from_config(config=None, server_class=None, additional_kwargs=None):
6170

6271
queue_store_factory = resolve_name(config.get('coilmq', 'qstore.factory'))
6372
subscriber_scheduler_factory = resolve_name(config.get(
64-
'coilmq', 'scheduler.subscriber_priority_factory'))
73+
'coilmq', 'scheduler.subscriber_priority_factory'))
6574
queue_scheduler_factory = resolve_name(config.get(
66-
'coilmq', 'scheduler.queue_priority_factory'))
75+
'coilmq', 'scheduler.queue_priority_factory'))
6776

6877
if config.has_option('coilmq', 'auth.factory'):
6978
authenticator_factory = resolve_name(
70-
config.get('coilmq', 'auth.factory'))
79+
config.get('coilmq', 'auth.factory'))
7180
authenticator = authenticator_factory()
7281
else:
7382
authenticator = None
@@ -120,13 +129,13 @@ def context_serve(context, configfile, listen_addr, listen_port, logfile,
120129

121130
if debug:
122131
poll_interval = float(global_config.get(
123-
'coilmq', 'debug.stats_poll_interval'))
132+
'coilmq', 'debug.stats_poll_interval'))
124133
if poll_interval: # Setting poll_interval to 0 effectively disables it.
125134
def diagnostic_loop(server):
126135
log = logger
127136
while True:
128137
log.debug(
129-
"Stats heartbeat -------------------------------")
138+
"Stats heartbeat -------------------------------")
130139
store = server.queue_manager.store
131140
for dest in store.destinations():
132141
log.debug("Queue %s: size=%s, subscribers=%s" % (
@@ -137,7 +146,7 @@ def diagnostic_loop(server):
137146
time.sleep(poll_interval)
138147

139148
diagnostic_thread = threading.Thread(
140-
target=diagnostic_loop, name='DiagnosticThread', args=(server,))
149+
target=diagnostic_loop, name='DiagnosticThread', args=(server,))
141150
diagnostic_thread.daemon = True
142151
diagnostic_thread.start()
143152

@@ -146,7 +155,7 @@ def diagnostic_loop(server):
146155
except (KeyboardInterrupt, SystemExit):
147156
logger.info("Stomp server stopped by user interrupt.")
148157
raise SystemExit()
149-
except Exception as e: # pragma: no cover
158+
except Exception as e:
150159
logger.error("Stomp server stopped due to error: %s" % e)
151160
logger.exception(e)
152161
raise SystemExit()
@@ -169,13 +178,16 @@ def _main(config=None, host=None, port=None, logfile=None, debug=None,
169178
if port is not None:
170179
global_config.set('coilmq', 'listen_port', str(port))
171180

181+
if daemon and is_nt:
182+
warnings.warn("Daemon context is not available for NT platform")
183+
172184
# in an on-daemon mode, we use a dummy context objectx
173185
# so we can use the same run-server code as the daemon version.
174186
context = pydaemon.DaemonContext(uid=uid,
175187
gid=gid,
176188
pidfile=pid.PidFile(pidname=pidfile) if pidfile else None,
177189
umask=int(umask, 8),
178-
working_directory=rundir) if daemon else contextmanager(lambda: (yield))()
190+
working_directory=rundir) if daemon and pydaemon else contextmanager(lambda: (yield))()
179191

180192
context_serve(context, config, host, port, logfile, debug, daemon, uid, gid, pidfile, umask, rundir)
181193

0 commit comments

Comments
 (0)