def test_fail(self): from supervisor.childutils import listener from supervisor.dispatchers import PEventListenerDispatcher begin = PEventListenerDispatcher.RESULT_TOKEN_START stdout = StringIO() listener.fail(stdout) self.assertEqual(stdout.getvalue(), begin + '4\nFAIL')
def main(args): logging.basicConfig( stream=sys.stdout, level=logging.INFO, format='%(asctime)s %(levelname)s %(filename)s: %(message)s') logger = logging.getLogger('socket-server') while True: logger.info('Listening for events...') headers, body = listener.wait(sys.stdin, sys.stdout) body = dict([pair.split(':') for pair in body.split(' ')]) logger.debug('Headers: %r', repr(headers)) logger.debug('Body: %r', repr(body)) try: if headers['eventname'] == 'PROCESS_STATE_FATAL': logger.info('Process entered FATAL state...') if not args or body['processname'] in args: logger.error('Killing off supervisord instance ...') call(['/bin/kill', '-15', '1'], stdout=sys.stderr) logger.info('Sent TERM signal to init process') time.sleep(5) logger.critical( 'Why am I still alive? Send KILL to all processes...') call(['/bin/kill', '-9', '-1'], stdout=sys.stderr) except Exception as e: logger.critical('Unexpected Exception: %s', str(e)) listener.fail(sys.stdout) exit(1) else: listener.ok(sys.stdout)
def send(command, message): "Send message with an arbitrary command." try: check_call(command + [message]) listener.ok() except CalledProcessError: listener.fail()
def send(command, message): """Send message with an arbitrary command.""" try: check_call(command + [message]) listener.ok() except CalledProcessError: listener.fail()
def main(args): logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, format='%(asctime)s %(levelname)s %(filename)s: %(message)s') logger = logging.getLogger("supervisord-watchdog") debug_mode = True if 'DEBUG' in os.environ else False while True: logger.info("Listening for events...") headers, body = listener.wait(sys.stdin, sys.stdout) body = dict([pair.split(":") for pair in body.split(" ")]) logger.debug("Headers: %r", repr(headers)) logger.debug("Body: %r", repr(body)) logger.debug("Args: %r", repr(args)) if debug_mode: continue try: if headers["eventname"] == "PROCESS_STATE_FATAL": logger.info("Process entered FATAL state...") if not args or body["processname"] in args: logger.error("Sending TERM signal to supervisord instance ...") subprocess.call(["/bin/kill", "-15", "1"], stdout=sys.stderr) time.sleep(5) logger.critical("Still alive! Sending KILL to all processes...") subprocess.call(["/bin/kill", "-9", "-1"], stdout=sys.stderr) except Exception as e: logger.critical("Unexpected Exception: %s", str(e)) listener.fail(sys.stdout) exit(1) else: listener.ok(sys.stdout)
def telegram(message): """Send message with telegram-send.""" try: check_call(["telegram-send", message] + telegram_conf_args) listener.ok() except OSError: # command not found cmd = expanduser("~/.local/bin/telegram-send") check_call([cmd, message] + telegram_conf_args) listener.ok() except CalledProcessError: listener.fail()
def main(): while True: headers, body = listener.wait(sys.stdin, sys.stdout) body = dict([pair.split(":") for pair in body.split(" ")]) write_stderr("Headers: %r\n" % repr(headers)) write_stderr("Body: %r\n" % repr(body)) try: if body["processname"] == program_name: if headers["eventname"] != "PROCESS_STATE_RUNNING": i = 0 check_program_pid = False time.sleep(5) # first timeout 5s while i < timeout: time.sleep(1) if os.path.exists(program_pid) and os.path.isfile( program_pid): pidfile = open(program_pid, 'rt') pid = int(pidfile.readline()) if check_pid(pid): check_program_pid = True break i += 1 if not check_program_pid: try: pidfile = open(supervisord_pid, 'rt') pid = int(pidfile.readline()) kill_pid(pid) except Exception as e: write_stderr("Unexpected Exception: " + str(e)) sys.exit(0) except Exception as e: write_stderr("Unexpected Exception: " + str(e)) listener.fail(sys.stdout) sys.exit(1) else: listener.ok(sys.stdout)
def main(args): logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, format='%(asctime)s %(levelname)s %(filename)s: %(message)s') logger = logging.getLogger("supervisord-eventlistener") debug_mode = True if 'DEBUG' in os.environ else False if 'PROCESSNAME' in os.environ: processName = os.environ["PROCESSNAME"] else: logger.critical("Set PROCESSNAME in environment!"); exit(1) if 'EVENT' in os.environ: eventName = os.environ["EVENT"] else: logger.critical("Set EVENT in environment!") exit(1) if 'EXECUTE' in os.environ: executeCommand = os.environ["EXECUTE"].split(" ") else: logger.critical("Set EXECUTE in environment!") exit(1) if 'DELAY' in os.environ: sleepTime = int(os.environ["DELAY"]) else: logger.critical("Set DELAY in environment!") exit(1) while True: headers, body = listener.wait(sys.stdin, sys.stdout) body = dict([pair.split(":") for pair in body.split(" ")]) if debug_mode: logger.debug("ENV: %r", repr(os.environ)) logger.debug("Headers: %r", repr(headers)) logger.debug("Body: %r", repr(body)) logger.debug("Args: %r", repr(args)) try: if headers["eventname"] == eventName and body["processname"] == processName: if debug_mode: logger.debug("Process %s entered RUNNING state...", processName) time.sleep(sleepTime); if debug_mode: logger.debug("Execute %s after %s (sec)...", os.environ["EXECUTE"], os.environ["DELAY"]) res = subprocess.call(executeCommand, stdout=sys.stderr) except Exception as e: logger.critical("Unexpected Exception: %s", str(e)) listener.fail(sys.stdout) exit(1) else: listener.ok(sys.stdout)
def main(args): # logging.basicConfig(stream=sys.stderr, level=logging.DEBUG, format='%(asctime)s %(levelname)s %(filename)s: %(message)s') # logger = logging.getLogger("supervisord-eventlistener") storage = Storage() while True: headers, body = listener.wait(sys.stdin, sys.stdout) body = dict([pair.split(":") for pair in body.split(" ")]) try: storage.query("INSERT INTO messages (process_name, content) VALUES (?, ?)", [ body["processname"], headers["eventname"]]) except Exception as e: # logger.critical("Unexpected Exception: %s", str(e)) listener.fail(sys.stdout) exit(1) else: listener.ok(sys.stdout)