#!/usr/bin/env python3 import argparse import logging import selectors import signal import socket from . import fieldpoc logger = logging.getLogger("fieldpoc.run") ap = argparse.ArgumentParser(prog="fieldpoc") ap.add_argument("-c", "--config", dest="config_file_path", default="fieldpoc_config.json", help="Path to the fieldpoc config file") ap.add_argument("-e", "--extensions", dest="extensions_file_path", default="fieldpoc_extensions.json", help="Path to the fieldpoc extensions file") ap.add_argument('--init', dest="init", action='store_true') ap.add_argument('--debug', dest="debug", action='store_true') def run(): args = ap.parse_args() if args.debug: logging.basicConfig(level=logging.DEBUG) sel = selectors.DefaultSelector() interrupt_stop_read, interrupt_stop_write = socket.socketpair() signal.signal(signal.SIGINT, lambda signum, frame: interrupt_stop_write.send(b'\0')) # Keyboard Interrupt sel.register(interrupt_stop_read, selectors.EVENT_READ) interrupt_reload_read, interrupt_reload_write = socket.socketpair() signal.signal(signal.SIGHUP, lambda signum, frame: interrupt_reload_write.send(b'\0')) sel.register(interrupt_reload_read, selectors.EVENT_READ) logger.info("prepared signal handling") fp = fieldpoc.FieldPOC(config_file_path=args.config_file_path, extensions_file_path=args.extensions_file_path) if args.init: fp.init() exit() fp.run() logger.info("handle signals") while True: for key, mask in sel.select(): logger.info("incoming signal") key.fileobj.recv(1) if key.fileobj == interrupt_stop_read: logger.info("signal requested service stop") fp.queue_all({"type": "stop"}) exit() elif key.fileobj == interrupt_reload_read: logger.info("signal requested reload") fp.queue_all({"type": "reload"}) if __name__ == "__main__": run()