示例#1
0
def start():
    logger.info("starting manager[pid=%s]" % common.PID)
    storage.setup()
    config = common.load_config()
    output = config["output"]
    for camera in config["cameras"].keys():
        logger.info("found camera %s" % camera)
        PROCESSES.append(camera)
        MODULES[camera] = "runtime.recorder"
        segment_dir = "%s/%s" % (output, camera)
        if not exists(segment_dir):
            makedirs(segment_dir)
            logger.info("directory %s created" % segment_dir)

    del config, output

    with storage.get_connection() as conn:
        for name in PROCESSES:
            metric = "%sStatus" % name
            storage.put(conn, metric, "Launching")
            running[name] = start_process(name)
            storage.put(conn, metric, "Launched")

        try:
            loop(conn)
        finally:
            logger.info("manager[pid=%s] is stopping" % common.PID)
示例#2
0
    def test_is_connected(self):
        config = common.load_config()
        with MqttClient("keepermqtttest", config) as mqtt_client:
            mqtt_client.reconnect()
            self.assertEqual(mqtt_client.connection_status(), 2)

        self.assertEqual(mqtt_client.connection_status(), 0)
示例#3
0
 def test_monitor_in_time_no_delay(self):
     config = common.load_config()
     with Storage() as storage, MqttClient("keeperconnectortest", config) as mc, Heartbeater(config, storage,
                                                                                             mc) as heartbeater:
         heartbeater.last_message = datetime.now() - timedelta(seconds=config["heartbeat.interval"])
         heartbeater.monitor()
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 0)
示例#4
0
    def __init__(self):
        """
        partially initializes format
        """

        self.format = "%s " + current_process().name + "-keeper[%s]: %s"
        self.is_debug = bool(load_config()["debug"])
示例#5
0
def main():
    config = load_config('web_server.json')
    args = parse_args()
    logger = configure_logger(config['name'], args.v, args.o)
    if 'db_address' not in config:
        raise Exception('Cannot start WebServer without database')
    WebServer(config, logger).start()
示例#6
0
 def test_on_not_connected(self):
     config = common.load_config()
     with Storage() as storage, MqttClient("keeperconnectortest",
                                           config) as mc, Connector(
                                               config, storage,
                                               mc) as connector:
         connector.on_not_connect()
         self.assertEqual(connector.attempts, 1)
         self.assertEqual(
             storage.get_int(constants.CONNECTOR_FAILED_CONNECTIONS), 1)
         self.assertEqual(
             storage.get_int(constants.CONNECTOR_MQTT_RESTARTS), 0)
         connector.on_not_connect()
         self.assertEqual(connector.attempts, 2)
         self.assertEqual(
             storage.get_int(constants.CONNECTOR_FAILED_CONNECTIONS), 2)
         self.assertEqual(
             storage.get_int(constants.CONNECTOR_MQTT_RESTARTS), 0)
         connector.on_not_connect()
         self.assertEqual(connector.attempts, 3)
         self.assertEqual(
             storage.get_int(constants.CONNECTOR_FAILED_CONNECTIONS), 3)
         self.assertEqual(
             storage.get_int(constants.CONNECTOR_MQTT_RESTARTS), 0)
         connector.on_not_connect()
         self.assertEqual(
             storage.get_int(constants.CONNECTOR_MQTT_RESTARTS), 1)
         self.assertEqual(connector.attempts, 0)
         connector.on_not_connect()
         self.assertEqual(connector.attempts, 1)
         self.assertEqual(
             storage.get_int(constants.CONNECTOR_FAILED_CONNECTIONS), 4)
         self.assertEqual(
             storage.get_int(constants.CONNECTOR_MQTT_RESTARTS), 1)
示例#7
0
 def test_send(self):
     config = common.load_config()
     with storage.get_connection() as conn:
         storage.put(conn, "reporterStatus", "Running")
         reporter.running = True
         client = reporter.connect(config["mqtt.broker"],
                                   config["mqtt.port"], config["mqtt.user"],
                                   config["mqtt.pass"])
         reporter.send_report(client, conn)
示例#8
0
 def test_not_connected(self):
     config = common.load_config()
     config["mqtt.broker"] = "1.1.1.1"
     try:
         with MqttClient("keepermqtttest", config, False) as mqtt_client:
             mqtt_client.reconnect()
             pass
     except:
         pass
示例#9
0
 def test_not_stable(self):
     config = common.load_config()
     with Storage() as storage, MqttClient("keeperconnectortest",
                                           config) as mc, Connector(
                                               config, storage,
                                               mc) as connector:
         now = datetime.now()
         connector.started_at = now - timedelta(seconds=10)
         connector.connected_at = now - timedelta(seconds=8)
         self.assertFalse(connector.is_stable())
示例#10
0
 def test_monitor_restart_ha(self):
     config = common.load_config()
     with Storage() as storage, MqttClient("keeperconnectortest", config) as mc, Heartbeater(config, storage,
                                                                                             mc) as heartbeater:
         diff = config["heartbeat.interval"] + config["heartbeat.delay"] + 1
         heartbeater.last_message = datetime.now() - timedelta(seconds=diff)
         heartbeater.monitor()
         self.assertEqual(heartbeater.misses, 1)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 1)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_HA_RESTARTS), 0)
         heartbeater.last_message = datetime.now() - timedelta(seconds=diff)
         heartbeater.monitor()
         self.assertEqual(heartbeater.misses, 2)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 2)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_HA_RESTARTS), 0)
         heartbeater.last_message = datetime.now() - timedelta(seconds=diff)
         heartbeater.monitor()
         self.assertEqual(heartbeater.misses, 3)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 3)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_HA_RESTARTS), 0)
         heartbeater.last_message = datetime.now() - timedelta(seconds=diff)
         heartbeater.monitor()
         self.assertEqual(heartbeater.misses, 0)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 3)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_HA_RESTARTS), 1)
         heartbeater.last_message = datetime.now() - timedelta(seconds=diff)
         heartbeater.monitor()
         self.assertEqual(heartbeater.misses, 1)
         self.assertEqual(heartbeater.attempts, 1)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 4)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_HA_RESTARTS), 1)
         heartbeater.last_message = datetime.now() - timedelta(seconds=diff)
         heartbeater.monitor()
         self.assertEqual(heartbeater.misses, 2)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 5)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_HA_RESTARTS), 1)
         heartbeater.last_message = datetime.now() - timedelta(seconds=diff)
         heartbeater.monitor()
         self.assertEqual(heartbeater.misses, 3)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 6)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_HA_RESTARTS), 1)
         heartbeater.last_message = datetime.now() - timedelta(seconds=diff)
         heartbeater.monitor()
         self.assertEqual(heartbeater.misses, 0)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 6)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_HA_RESTARTS), 2)
         heartbeater.last_message = datetime.now() - timedelta(seconds=diff)
         heartbeater.monitor()
         self.assertEqual(heartbeater.misses, 1)
         self.assertEqual(heartbeater.attempts, 2)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_MISSED_HEARTBEAT), 7)
         self.assertEqual(storage.get_int(constants.HEARTBEATER_HA_RESTARTS), 2)
示例#11
0
def start():
    logger.info("starting reported[pid=%s]" % common.PID)
    config = common.load_config()
    broker = config["mqtt.broker"]
    port = config["mqtt.port"]
    user = config.get("mqtt.user")
    pwd = config.get("mqtt.pass")
    del config
    with storage.get_connection() as conn:
        storage.put(conn, REPORTER_STATUS, "Running")
        try:
            loop(conn, broker, port, user, pwd)
        finally:
            storage.put(conn, REPORTER_STATUS, "Not Running")
            logger.info("stopping watcher[pid=%s]" % common.PID)
示例#12
0
def start():
    logger.info("starting cleaner[pid=%s]" % common.PID)
    config = common.load_config()
    output = config["output"]
    cameras = config["cameras"]
    loop_interval = 3600
    for camera, config in cameras.items():
        config["segment_dir"] = join(output, camera)
        loop_interval = min(loop_interval, int(config["keep"]))

    del config, output
    with storage.get_connection() as conn:
        storage.put(conn, CLEANER_STATUS, "Running")
        try:
            loop(conn, cameras, loop_interval)
        finally:
            storage.put(conn, CLEANER_STATUS, "Not Running")
            logger.info("stopping cleaner[pid=%s]" % common.PID)
示例#13
0
def start():
    logger.info("starting recorder[pid=%s]" % common.PID)
    config = common.load_config()
    segment_dir = "%s/%s" % (config["output"], PROCESS_NAME)
    config = config["cameras"][PROCESS_NAME]
    logger.info("saving segments of camera %s in directory %s" %
                (PROCESS_NAME, segment_dir))
    duration = int(config["duration"])
    command = [
        "ffmpeg", "-rtsp_transport", "tcp", "-i", config["rtsp.url"], "-an",
        "-sn", "-b:v", "132k", "-bufsize", "132k", "-c:v", "copy", "-r",
        str(config["fps"]), "-bsf:v", "h264_mp4toannexb", "-map", "0",
        "-shortest", "-strftime", "1", "-f", "segment", "-segment_time",
        str(duration), "-segment_format", "mp4",
        "%s/%s-%s.mp4" % (segment_dir, PROCESS_NAME, "%Y%m%d%H%M%S")
    ]
    url = (config["rtsp.ip"], config["rtsp.port"])
    request_command = bytes(
        "OPTIONS rtsp://%s:%s RTSP/1.0\\r\\nCSeq: 1\\r\\nUser-Agent: python\\r\\nAccept: application/sdp\\r\\n\\r\\n"
        % (url[0], str(url[1])), "utf-8")
    del config, segment_dir
    process = None
    try:
        while 1:
            if not is_reachable(url, request_command):
                logger.warning("destination %s:%s is not reachable" %
                               (url[0], str(url[1])))
                logger.info("waiting for camera[%s:%s] to be available" %
                            (url[0], str(url[1])))
                while not is_reachable(url, request_command):
                    sleep(1)

                close(process)
                process = None

            if not is_running(process):
                close(process)
                process = launch(command)
            else:
                sleep(duration)
    finally:
        logger.info("stopping recorder[pid=%s]" % common.PID)
        close(process)
示例#14
0
def start():
    logger.info("starting watcher[pid=%s]" % common.PID)
    config = common.load_config()
    output = config["output"]
    threshold = config["filesystem.threshold"]
    loop_interval = 10
    segment_dirs = []
    for camera, config in config["cameras"].items():
        segment_dirs.append(join(output, camera))
        loop_interval = min(loop_interval, int(config["duration"]))

    del config
    with storage.get_connection() as conn:
        storage.put(conn, WATCHER_STATUS, "Running")
        try:
            loop(conn, segment_dirs, loop_interval, output, threshold)
        finally:
            storage.put(conn, WATCHER_STATUS, "Not Running")
            logger.info("stopping watcher[pid=%s]" % common.PID)
示例#15
0
def main():
    config = load_config('web_server.json')
    logger = configure_logger(config['name'])
    os.environ['BC_DIR'] = sys.path[0]
    WebServer(config, logger).start()
示例#16
0
def main():
    config = load_config('db_server.json')
    logger = configure_logger(config['name'])
    DBServer(config, logger).start()
示例#17
0
'''

#Filling botconfig incase the file is missing
prompt_config("Enter bot prefix here: ", "prefix")
prompt_config("Enter channel (ID) to display blacklist responses: ",
              "blacklistChannel")
prompt_config("Enter channel (ID) to display question suggestions: ",
              "questionSuggestChannel")
prompt_config("Enter bot-spam channel (ID)", "botspamChannel")
prompt_config("Enter channel (ID) to display realm channel applications: ",
              "realmChannelResponse")
prompt_config("Enter bot type (Stable/Beta)", "BotType")
prompt_config("Other bot's ID", "OtherBotID")
prompt_config("Bot's ID", "BotID")
prompt_config("Slash Commands Server ID", "ServerID")
config, _ = load_config()

#Applying towards intents
intents = discord.Intents.default()
intents.reactions = True
intents.members = True
intents.presences = True

#Defining client and SlashCommands
client = commands.Bot(command_prefix=config['prefix'],
                      intents=intents,
                      case_insensitive=True)
client.remove_command("help")

#Sentry Panel Stuff -
from discord_sentry_reporting import use_sentry
示例#18
0
def main():
    register_signal_handler(signal.SIGINT)
    config = load_config('general.json')
    start_modules(config)
示例#19
0
def main():
    config = load_config('db_server.json')
    args = parse_args()
    logger = configure_logger(config['name'], args.v, args.o)
    DBServer(config, logger).start()