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):
|
if not (args.name and args.engine_cfg):
|
||||||
LOG.error('Need name and engine cfg')
|
LOG.error('Need name and engine cfg')
|
||||||
return
|
return
|
||||||
cfg_data = dict(utils.load_yaml(args.engine_cfg))[args.name]
|
utils.create_files([engine_cfg])
|
||||||
cfg = {
|
if args.purge:
|
||||||
args.name: {
|
utils.purge_disabled(engine_cfg)
|
||||||
'cfg': os.path.join(os.getcwd(), args.engine_cfg),
|
if utils.check_exists_and_enabled(args.name, engine_cfg):
|
||||||
'pid': os.getpid(),
|
LOG.error("An engine of the same name %s is already "
|
||||||
'backend': cfg_data['backend']
|
"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)
|
||||||
utils.write_yaml(cfg, engine_cfg)
|
LOG.info('Added %s to engine cfg', args.name)
|
||||||
LOG.info('Added %s to engine cfg', args.name)
|
entropy_engine = Engine(args.name, **cfg_data)
|
||||||
entropy_engine = Engine(args.name, **cfg_data)
|
entropy_engine.run()
|
||||||
entropy_engine.run()
|
except Exception:
|
||||||
|
LOG.exception("Could not start engine %s", args.name)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
def parse():
|
def parse():
|
||||||
|
|
|
@ -106,11 +106,47 @@ class WatchdogHandler(FileSystemEventHandler):
|
||||||
def watch_dir_for_change(dir_to_watch, event_fn):
|
def watch_dir_for_change(dir_to_watch, event_fn):
|
||||||
event_handler = WatchdogHandler(event_fn)
|
event_handler = WatchdogHandler(event_fn)
|
||||||
observer = Observer()
|
observer = Observer()
|
||||||
observer.schedule(event_handler, path=dir_to_watch, recursive=True)
|
observer.schedule(event_handler, path=dir_to_watch)
|
||||||
observer.start()
|
observer.start()
|
||||||
return observer
|
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):
|
def reset_logger(log):
|
||||||
if not log:
|
if not log:
|
||||||
return
|
return
|
||||||
|
@ -123,8 +159,9 @@ def reset_logger(log):
|
||||||
log.addHandler(logging.NullHandler())
|
log.addHandler(logging.NullHandler())
|
||||||
|
|
||||||
|
|
||||||
def write_yaml(data, filename):
|
def write_yaml(data, filename, append=True):
|
||||||
with open(filename, "a") as cfg_file:
|
mode = "a" if append else "w"
|
||||||
|
with open(filename, mode) as cfg_file:
|
||||||
cfg_file.write(yaml.safe_dump(data,
|
cfg_file.write(yaml.safe_dump(data,
|
||||||
default_flow_style=False,
|
default_flow_style=False,
|
||||||
canonical=False))
|
canonical=False))
|
||||||
|
|
Loading…
Reference in New Issue