diff --git a/setup.py b/setup.py index f5862b0996..905868e8aa 100644 --- a/setup.py +++ b/setup.py @@ -607,6 +607,9 @@ def update_file_with_string(infilename, outfilename, match, new_string): install_requires=[ required_pkgs ], + extras_require={ + 'setproctitle': ['setproctitle'] + }, scripts=glob('bin/shinken-[!_]*'), diff --git a/shinken/basemodule.py b/shinken/basemodule.py index b532ffcd39..091ec69e6a 100644 --- a/shinken/basemodule.py +++ b/shinken/basemodule.py @@ -244,8 +244,17 @@ def do_loop_turn(self): """ raise NotImplementedError() + def set_proctitle(self, name): + try: + from setproctitle import setproctitle + setproctitle("shinken-module: %s" % name) + except: + pass + def main(self): """module "main" method. Only used by external modules.""" + self.set_proctitle(self.name) + self.set_signal_handler() logger.info("[%s[%d]]: Now running.." % (self.name, os.getpid())) while not self.interrupted: diff --git a/shinken/modules/android_sms.py b/shinken/modules/android_sms.py index eea0dc2c33..a5990becff 100644 --- a/shinken/modules/android_sms.py +++ b/shinken/modules/android_sms.py @@ -194,6 +194,8 @@ def read_and_parse_sms(self): # c = Control Queue for the worker def work(self, s, returns_queue, c): print "Module Android started!" + self.set_proctitle(self.name) + self.android = android.Android() timeout = 1.0 self.checks = [] diff --git a/shinken/modules/collectd_arbiter.py b/shinken/modules/collectd_arbiter.py index 577661efe3..cfa660ecad 100644 --- a/shinken/modules/collectd_arbiter.py +++ b/shinken/modules/collectd_arbiter.py @@ -297,6 +297,7 @@ def __init__(self, modconf): # When you are in "external" mode, that is the main loop of your process def main(self): + self.set_proctitle(self.name) self.set_exit_handler() last_check = 0.0 diff --git a/shinken/modules/livestatus_broker/livestatus_broker.py b/shinken/modules/livestatus_broker/livestatus_broker.py index a6f26fddb4..2e362f9002 100644 --- a/shinken/modules/livestatus_broker/livestatus_broker.py +++ b/shinken/modules/livestatus_broker/livestatus_broker.py @@ -162,6 +162,8 @@ def set_debug(self): os.dup2(fdtemp, 2) # standard error (2) def main(self): + self.set_proctitle(self.name) + self.log = logger self.log.load_obj(self) # Daemon like init diff --git a/shinken/modules/named_pipe.py b/shinken/modules/named_pipe.py index cb962c5790..488a567f9e 100644 --- a/shinken/modules/named_pipe.py +++ b/shinken/modules/named_pipe.py @@ -107,6 +107,7 @@ def get(self): # When you are in "external" mode, that is the main loop of your process def main(self): + self.set_proctitle(self.name) self.set_exit_handler() self.open() diff --git a/shinken/modules/npcdmod_broker.py b/shinken/modules/npcdmod_broker.py index 5846975a16..c814920d49 100644 --- a/shinken/modules/npcdmod_broker.py +++ b/shinken/modules/npcdmod_broker.py @@ -196,6 +196,8 @@ def rotate(self): # This version does not use a signal-based timer yet. Rotation is triggered # by a constant flow of status update broks def main(self): + self.set_proctitle(self.name) + self.set_exit_handler() self.rotate() last_rotated = time.time() diff --git a/shinken/modules/nrpe_poller.py b/shinken/modules/nrpe_poller.py index fce67bfa82..e040849178 100644 --- a/shinken/modules/nrpe_poller.py +++ b/shinken/modules/nrpe_poller.py @@ -465,6 +465,8 @@ def work(self, s, returns_queue, c): print "[Nrpe] Module NRPE started!" ## restore default signal handler for the workers: signal.signal(signal.SIGTERM, signal.SIG_DFL) + self.set_proctitle(self.name) + timeout = 1.0 self.checks = [] diff --git a/shinken/modules/nsca.py b/shinken/modules/nsca.py index 9ecc98e7f4..a0bf286695 100644 --- a/shinken/modules/nsca.py +++ b/shinken/modules/nsca.py @@ -180,6 +180,8 @@ def process_check_result(self, databuffer, IV): # When you are in "external" mode, that is the main loop of your process def main(self): + self.set_proctitle(self.name) + self.set_exit_handler() backlog = 5 size = 8192 diff --git a/shinken/modules/status_dat_broker/status_dat_broker.py b/shinken/modules/status_dat_broker/status_dat_broker.py index 941a1e15c5..dd9e5ee0d3 100644 --- a/shinken/modules/status_dat_broker/status_dat_broker.py +++ b/shinken/modules/status_dat_broker/status_dat_broker.py @@ -370,6 +370,7 @@ def update_element(self, e, data): setattr(e, prop, data[prop]) def main(self): + self.set_proctitle(self.name) self.set_exit_handler() last_generation = time.time() objects_cache_written = False diff --git a/shinken/modules/tsca.py b/shinken/modules/tsca.py index 5afc229bcd..48bc8c7aef 100644 --- a/shinken/modules/tsca.py +++ b/shinken/modules/tsca.py @@ -166,6 +166,8 @@ def post_command(self, timestamp, rc, hostname, service, output): # When you are in "external" mode, that is the main loop of your process def main(self): + self.set_proctitle(self.name) + self.set_exit_handler() try: handler = StateServiceHandler(self) diff --git a/shinken/modules/webui_broker/webui_broker.py b/shinken/modules/webui_broker/webui_broker.py index aedadd1047..391ff78b51 100644 --- a/shinken/modules/webui_broker/webui_broker.py +++ b/shinken/modules/webui_broker/webui_broker.py @@ -125,6 +125,8 @@ def want_brok(self, b): return self.rg.want_brok(b) def main(self): + self.set_proctitle(self.name) + self.log = logger self.log.load_obj(self) diff --git a/shinken/modules/ws_arbiter.py b/shinken/modules/ws_arbiter.py index 46cfbdb0d9..d570750b72 100644 --- a/shinken/modules/ws_arbiter.py +++ b/shinken/modules/ws_arbiter.py @@ -117,6 +117,9 @@ def init_http(self): def main(self): global app + # Change process name (seen in ps or top) + self.set_proctitle(self.name) + # It's an external module, so we need to be sure that we manage # the signals self.set_exit_handler() diff --git a/shinken/worker.py b/shinken/worker.py index 3d6451453d..6c8ab35085 100644 --- a/shinken/worker.py +++ b/shinken/worker.py @@ -213,6 +213,9 @@ def work(self, s, returns_queue, c): # but on android, we are a thread, so don't do it if not is_android: signal.signal(signal.SIGTERM, signal.SIG_DFL) + + self.set_proctitle() + timeout = 1.0 self.checks = [] self.returns_queue = returns_queue @@ -261,3 +264,11 @@ def work(self, s, returns_queue, c): timeout -= time.time() - begin if timeout < 0: timeout = 1.0 + + def set_proctitle(self): + try: + from setproctitle import setproctitle + setproctitle("shinken-worker") + except: + pass +