This removes most of the legacy upstream config madness by not using weird config files spread all over the place. This isn't the solution to other config reading fragility issues, but it does move the whole config back to the central airtime.conf file.
75 lines
3.3 KiB
Python
Executable file
75 lines
3.3 KiB
Python
Executable file
#!/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_CLOUD_STORAGE_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("--cloud-storage-config-file", help="specify a configuration file with cloud storage settings (default is %s)" % DEFAULT_CLOUD_STORAGE_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
|
|
cloud_storage_config_path = DEFAULT_CLOUD_STORAGE_CONFIG_PATH
|
|
http_retry_queue_path = DEFAULT_HTTP_RETRY_PATH
|
|
if args.rmq_config_file:
|
|
rmq_config_path = args.rmq_config_file
|
|
if args.cloud_storage_config_file:
|
|
cloud_storage_config_path = args.cloud_storage_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,
|
|
cloud_storage_config_path = cloud_storage_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,
|
|
cloud_storage_config_path = cloud_storage_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()
|
|
|
|
|