def __init__(self, ctx, components, config, n_clients, exploit, show_ui): self.ctx = ctx self.config = config self.show_ui = show_ui self.exploit = exploit self.n_clients = n_clients self.components = components if bool(components) else set(['all']) if sys.platform == 'win32': self.nobuffer = 'set PYTHONUNBUFFERED=true;' else: self.nobuffer = 'PYTHONUNBUFFERED=true' self.config_yaml = ConfigYaml() self.config_yaml.load_from_file(self.config)
class CmdModelGraph(object): def __init__(self, ctx, config): self.config = config self.config_yaml = ConfigYaml() self.config_yaml.load_from_file(self.config) def show_graph(self): sys.exit(self.run_tensorboard()) def run_tensorboard(self): for p, n in algorithm_loader.AlgorithmLoader.model_packages( self.config_yaml.get('algorithm/path'), self.config_yaml.get('algorithm/name')): os.system('python -m %s --config %s' % (n, self.config)) webbrowser.open('http://localhost:6006', new=2) # open in new tab os.system('tensorboard --logdir %s' % 'log')
class TestConfigYaml(object): def setup_method(self, method): self.yaml = ConfigYaml() def test_load_from_file(self): self.yaml.load_from_file('tests/fixtures/fixture.yaml') assert self.yaml.relaax_rlx_server.bind == 'localhost:7001' def test_load_from_file_without_name(self): try: self.yaml.load_from_file(None) assert False except ValueError as e: assert str(e) == 'please provide yaml file name' except: assert False try: self.yaml.load_from_file('') assert False except ValueError as e: assert str(e) == 'please provide yaml file name' except: assert False def test_merge_namespace(self): ns = Namespace() ns.ns_attribute = 'ns value' self.yaml.yaml_attribyte = "yaml value" self.yaml.merge_namespace(ns) assert vars(self.yaml) == { 'ns_attribute': 'ns value', 'yaml_attribyte': 'yaml value'} def test_get_with_path(self): value = 'value of attr2' self.yaml.attr1 = Namespace() self.yaml.attr1.attr2 = value assert self.yaml.get('attr1/attr2') == value def test_get_default_with_path(self): value = 'value of attr2' assert self.yaml.get('attr1/attr2', value) == value
def setup_method(self, method): self.yaml = ConfigYaml()
def __init__(self, ctx, config): self.config = config self.config_yaml = ConfigYaml() self.config_yaml.load_from_file(self.config)
class CmdlRun(object): def __init__(self, ctx, components, config, n_clients, exploit, show_ui): self.ctx = ctx self.config = config self.show_ui = show_ui self.exploit = exploit self.n_clients = n_clients self.components = components if bool(components) else set(['all']) if sys.platform == 'win32': self.nobuffer = 'set PYTHONUNBUFFERED=true;' else: self.nobuffer = 'PYTHONUNBUFFERED=true' self.config_yaml = ConfigYaml() self.config_yaml.load_from_file(self.config) def run_components(self): manager = RManager() self.run_metrics_server(manager) self.run_parameter_server(manager) self.run_rlx_server(manager) self.run_wsproxy(manager) self.run_client(manager) try: manager.loop() except InterruptedError: pass sys.exit(manager.returncode) def intersection(self, lst): return bool(self.components.intersection(lst)) def isconfigured(self, server): return self.config_yaml.get(server, None) is not None def run_parameter_server(self, manager): if self.intersection(['all', 'servers', 'parameter-server']): if self.isconfigured('relaax_parameter_server'): manager.add_process( 'parameter-server', '%s relaax-parameter-server --config %s' % (self.nobuffer, self.config)) else: self.ctx.log( click.style("parameter-server is not configured", fg='red')) def run_metrics_server(self, manager): if self.intersection(['all', 'servers', 'metrics-server']): if self.isconfigured('relaax_metrics_server'): manager.add_process( 'metrics-server', '%s relaax-metrics-server --config %s' % (self.nobuffer, self.config)) else: self.ctx.log( click.style("metrics-server is not configured", fg='red')) def run_rlx_server(self, manager): if self.intersection(['all', 'servers', 'rlx-server']): if self.isconfigured('relaax_rlx_server'): manager.add_process( 'rlx-server', '%s relaax-rlx-server --config %s' % (self.nobuffer, self.config)) else: self.ctx.log( click.style("rlx-server is not configured", fg='red')) def run_wsproxy(self, manager): if self.intersection(['all', 'servers', 'wsproxy']): if self.isconfigured('relaax_wsproxy'): manager.add_process( 'wsproxy', '%s relaax-wsproxy --config %s' % (self.nobuffer, self.config)) elif self.intersection(['wsproxy']): # log error message only if wsproxy specified explicitly self.ctx.log(click.style("wsproxy is not configured", fg='red')) def run_client(self, manager): if self.intersection(['all', 'environment']): self.client = self.config_yaml.get('environment/run') if self.client: self.clean_old_prfiles() self.run_all_clients(manager) else: self.ctx.log( click.style("environment is not configured", fg='red')) def clean_old_prfiles(self): profile_dir = self.config_yaml.get('environment/profile_dir') if profile_dir is not None: for f in glob.glob(os.path.join(profile_dir, 'env_*.txt')): os.remove(f) def run_all_clients(self, manager): count = 0 while count < self.n_clients: if count == 0: self.run_one_client('environment-%d' % count, manager, self.exploit, self.show_ui) else: self.run_one_client('environment-%d' % count, manager) count += 1 def run_one_client(self, process_name, manager, exploit=False, show_ui=False): manager.add_process( process_name, '%s %s --config %s --exploit %s --show-ui %s' % (self.nobuffer, self.client, self.config, exploit, show_ui))