Source code for crucible.agent

import logging
import sys
import os
from os import getpid
from os.path import isdir
from daemon import runner
from time import sleep
from logging.handlers import TimedRotatingFileHandler, MemoryHandler

import os.path
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))
sys.path.insert(0, os.path.dirname(__file__))
import settings
from validate_settings import validate_settings_variables

from crucible import Crucible
from crucible_algorithms import run_algorithms

python_version = int(sys.version_info[0])

skyline_app = 'crucible'
skyline_app_logger = '%sLog' % skyline_app
logger = logging.getLogger(skyline_app_logger)
logfile = '%s/%s.log' % (settings.LOG_PATH, skyline_app)


[docs]class CrucibleAgent(): """ Initialize CrucibleAgent """ def __init__(self): self.stdin_path = '/dev/null' self.stdout_path = '%s/%s.log' % (settings.LOG_PATH, skyline_app) self.stderr_path = '%s/%s.log' % (settings.LOG_PATH, skyline_app) self.pidfile_path = '%s/%s.pid' % (settings.PID_PATH, skyline_app) self.pidfile_timeout = 5
[docs] def run(self): logger.info('agent starting skyline %s' % skyline_app) Crucible(getpid()).start() while 1: if settings.ENABLE_CRUCIBLE_DEBUG: logger.info('CrucibleAgent alive') sleep(100)
[docs]def run(): """ Start the Crucible agent and ensure all the required directories exist, creating the crucible directories if they do not exist """ if not isdir(settings.PID_PATH): print ('pid directory does not exist at %s' % settings.PID_PATH) sys.exit(1) if not isdir(settings.LOG_PATH): print ('log directory does not exist at %s' % settings.LOG_PATH) sys.exit(1) # Make sure the required directories exists if not os.path.exists(settings.CRUCIBLE_CHECK_PATH): try: os.makedirs(settings.CRUCIBLE_CHECK_PATH, mode=0o755) except: print ('failed to create directory - %s' % settings.CRUCIBLE_CHECK_PATH) sys.exit(1) if not os.path.exists(settings.CRUCIBLE_DATA_FOLDER): try: os.makedirs(settings.CRUCIBLE_DATA_FOLDER, mode=0o755) except: print ('failed to create directory - %s' % settings.CRUCIBLE_DATA_FOLDER) sys.exit(1) failed_checks_dir = settings.CRUCIBLE_DATA_FOLDER + '/failed_checks' if not os.path.exists(failed_checks_dir): try: os.makedirs(failed_checks_dir, mode=0o755) except: print ('failed to create directory - %s' % failed_checks_dir) sys.exit(1) logger.setLevel(logging.DEBUG) formatter = logging.Formatter("%(asctime)s :: %(process)s :: %(message)s", datefmt="%Y-%m-%d %H:%M:%S") handler = logging.handlers.TimedRotatingFileHandler( logfile, when="midnight", interval=1, backupCount=5) memory_handler = logging.handlers.MemoryHandler(256, flushLevel=logging.DEBUG, target=handler) handler.setFormatter(formatter) logger.addHandler(memory_handler) # Validate settings variables valid_settings = validate_settings_variables(skyline_app) if not valid_settings: print ('error :: invalid variables in settings.py - cannot start') sys.exit(1) crucible = CrucibleAgent() if len(sys.argv) > 1 and sys.argv[1] == 'run': logger.info('starting skyline crucible via run') crucible.run() else: logger.info('starting skyline crucible via daemon') daemon_runner = runner.DaemonRunner(crucible) daemon_runner.daemon_context.files_preserve = [handler.stream] daemon_runner.do_action()
if __name__ == '__main__': run()