Exemple #1
0
 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)
Exemple #3
0
def send(command, message):
    "Send message with an arbitrary command."
    try:
        check_call(command + [message])
        listener.ok()
    except CalledProcessError:
        listener.fail()
 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 send(command, message):
    """Send message with an arbitrary command."""
    try:
        check_call(command + [message])
        listener.ok()
    except CalledProcessError:
        listener.fail()
Exemple #6
0
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)
Exemple #7
0
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()
Exemple #8
0
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 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()
Exemple #10
0
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)