Beispiel #1
0
    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)
Beispiel #2
0
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')
Beispiel #3
0
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
Beispiel #4
0
 def setup_method(self, method):
     self.yaml = ConfigYaml()
Beispiel #5
0
 def __init__(self, ctx, config):
     self.config = config
     self.config_yaml = ConfigYaml()
     self.config_yaml.load_from_file(self.config)
Beispiel #6
0
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))