#!/usr/bin/env python """Runs the airtime_analyzer application. """ import daemon import argparse import os import airtime_analyzer.airtime_analyzer as aa VERSION = "1.0" LIBRETIME_CONF_DIR = os.getenv('LIBRETIME_CONF_DIR', '/etc/airtime') DEFAULT_RMQ_CONFIG_PATH = os.path.join(LIBRETIME_CONF_DIR, 'airtime.conf') DEFAULT_HTTP_RETRY_PATH = '/tmp/airtime_analyzer_http_retries' def run(): '''Entry-point for this application''' print "Airtime Analyzer " + VERSION parser = argparse.ArgumentParser() parser.add_argument("-d", "--daemon", help="run as a daemon", action="store_true") parser.add_argument("--debug", help="log full debugging output", action="store_true") parser.add_argument("--rmq-config-file", help="specify a configuration file with RabbitMQ settings (default is %s)" % DEFAULT_RMQ_CONFIG_PATH) parser.add_argument("--http-retry-queue-file", help="specify where incompleted HTTP requests will be serialized (default is %s)" % DEFAULT_HTTP_RETRY_PATH) args = parser.parse_args() check_if_media_monitor_is_running() #Default config file path rmq_config_path = DEFAULT_RMQ_CONFIG_PATH http_retry_queue_path = DEFAULT_HTTP_RETRY_PATH if args.rmq_config_file: rmq_config_path = args.rmq_config_file if args.http_retry_queue_file: http_retry_queue_path = args.http_retry_queue_file if args.daemon: with daemon.DaemonContext(): aa.AirtimeAnalyzerServer(rmq_config_path=rmq_config_path, http_retry_queue_path=http_retry_queue_path, debug=args.debug) else: # Run without daemonizing aa.AirtimeAnalyzerServer(rmq_config_path=rmq_config_path, http_retry_queue_path=http_retry_queue_path, debug=args.debug) def check_if_media_monitor_is_running(): """Ensure media_monitor isn't running before we start. We do this because media_monitor will move newly uploaded files into the library on us and screw up the operation of airtime_analyzer. media_monitor is deprecated. """ pids = [pid for pid in os.listdir('/proc') if pid.isdigit()] for pid in pids: try: process_name = open(os.path.join('/proc', pid, 'cmdline'), 'rb').read() if 'media_monitor.py' in process_name: print "Error: This process conflicts with media_monitor, and media_monitor is running." print " Please terminate the running media_monitor.py process and try again." exit(1) except IOError: # proc has already terminated continue run()