Add some more checks to engine creation
Add a field called enabled in the engine cfg file that keeps track of files. This can be used to keep track of stopped engines, and monitored using watchdog/similar. Also added some more checks at engine creation time. Partially Closes-bug:1309406 Change-Id: I1c365c2c438e6ed0a44413e1d09c69d3fab7ab7b
This commit is contained in:
parent
1d739dea9c
commit
81a9042ff1
|
@ -90,18 +90,33 @@ def start_engine(args):
|
|||
if not (args.name and args.engine_cfg):
|
||||
LOG.error('Need name and engine cfg')
|
||||
return
|
||||
cfg_data = dict(utils.load_yaml(args.engine_cfg))[args.name]
|
||||
cfg = {
|
||||
args.name: {
|
||||
'cfg': os.path.join(os.getcwd(), args.engine_cfg),
|
||||
'pid': os.getpid(),
|
||||
'backend': cfg_data['backend']
|
||||
utils.create_files([engine_cfg])
|
||||
if args.purge:
|
||||
utils.purge_disabled(engine_cfg)
|
||||
if utils.check_exists_and_enabled(args.name, engine_cfg):
|
||||
LOG.error("An engine of the same name %s is already "
|
||||
"registered and running", args.name)
|
||||
return
|
||||
if utils.check_exists_and_disabled(args.name, engine_cfg):
|
||||
LOG.error("And engine of the same name %s is already "
|
||||
"registered, but disabled. Run with purge?", args.name)
|
||||
return
|
||||
try:
|
||||
cfg_data = dict(utils.load_yaml(args.engine_cfg))[args.name]
|
||||
cfg = {
|
||||
args.name: {
|
||||
'cfg': os.path.join(os.getcwd(), args.engine_cfg),
|
||||
'pid': os.getpid(),
|
||||
'backend': cfg_data['backend']
|
||||
}
|
||||
}
|
||||
}
|
||||
utils.write_yaml(cfg, engine_cfg)
|
||||
LOG.info('Added %s to engine cfg', args.name)
|
||||
entropy_engine = Engine(args.name, **cfg_data)
|
||||
entropy_engine.run()
|
||||
utils.write_yaml(cfg, engine_cfg)
|
||||
LOG.info('Added %s to engine cfg', args.name)
|
||||
entropy_engine = Engine(args.name, **cfg_data)
|
||||
entropy_engine.run()
|
||||
except Exception:
|
||||
LOG.exception("Could not start engine %s", args.name)
|
||||
return
|
||||
|
||||
|
||||
def parse():
|
||||
|
|
|
@ -106,11 +106,47 @@ class WatchdogHandler(FileSystemEventHandler):
|
|||
def watch_dir_for_change(dir_to_watch, event_fn):
|
||||
event_handler = WatchdogHandler(event_fn)
|
||||
observer = Observer()
|
||||
observer.schedule(event_handler, path=dir_to_watch, recursive=True)
|
||||
observer.schedule(event_handler, path=dir_to_watch)
|
||||
observer.start()
|
||||
return observer
|
||||
|
||||
|
||||
def check_exists_and_enabled(name, cfg_file):
|
||||
engines = load_yaml(cfg_file)
|
||||
return engines and name in engines and engines[name]['enabled']
|
||||
|
||||
|
||||
def check_exists_and_disabled(name, cfg_file):
|
||||
engines = load_yaml(cfg_file)
|
||||
return engines and name in engines and not engines[name]['enabled']
|
||||
|
||||
|
||||
def purge_disabled(cfg_file):
|
||||
engines = load_yaml(cfg_file)
|
||||
final_engines = {}
|
||||
if not engines:
|
||||
return
|
||||
for engine in engines:
|
||||
if engines[engine]['enabled']:
|
||||
final_engines[engine] = engines[engine]
|
||||
if final_engines:
|
||||
write_yaml(final_engines, cfg_file, append=False)
|
||||
else:
|
||||
with open(cfg_file, 'w'):
|
||||
pass
|
||||
|
||||
|
||||
def disable_engine(name, cfg_file):
|
||||
engines = load_yaml(cfg_file)
|
||||
if not engines:
|
||||
raise Exception("No engines at all!")
|
||||
if name not in engines:
|
||||
raise Exception("No such engine!")
|
||||
engines[name]['enabled'] = False
|
||||
write_yaml(engines, cfg_file, append=False)
|
||||
return engines[name]['pid']
|
||||
|
||||
|
||||
def reset_logger(log):
|
||||
if not log:
|
||||
return
|
||||
|
@ -123,8 +159,9 @@ def reset_logger(log):
|
|||
log.addHandler(logging.NullHandler())
|
||||
|
||||
|
||||
def write_yaml(data, filename):
|
||||
with open(filename, "a") as cfg_file:
|
||||
def write_yaml(data, filename, append=True):
|
||||
mode = "a" if append else "w"
|
||||
with open(filename, mode) as cfg_file:
|
||||
cfg_file.write(yaml.safe_dump(data,
|
||||
default_flow_style=False,
|
||||
canonical=False))
|
||||
|
|
Loading…
Reference in New Issue