コード例 #1
0
    def run(self):
        atexit.register(self.killed, self.run_id)

        context = zmq.Context()
        self.socket = context.socket(zmq.DEALER)
        self.socket.connect(self.server_address)

        send_event(self.socket, WORKER_JOIN, self.run_id)
        run = decode_message(self.socket.recv())

        tool = import_class(run["tool"])

        context = {}
        context["socket"] = self.socket
        context["tool"] = tool
        context["run"] = run
        logger.info(f"Processing task: {run['directory']}")

        directory = Path(run["directory"])
        directory.mkdir(parents=True, exist_ok=True)

        payload = dict(tool_version=tool.version(), run_id=self.run_id)
        send_event(self.socket, RUN_START, payload)

        for runstep in run["steps"]:
            logger.debug(f"Running step {runstep['module']}")
            step = import_class(runstep["module"])
            config = json.loads(runstep["config"])
            step.execute(context, config)
            payload = {"run_id": self.run_id, "step": runstep["module"]}
            send_event(self.socket, RUN_STEP, payload)

        send_event(self.socket, RUN_FINISH, self.run_id)
        atexit.unregister(self.killed)
        send_event(self.socket, WORKER_LEAVE, self.run_id)
コード例 #2
0
def _update_step(category, steps):
    current_step_count = Step.select().where(Step.category == category).count()
    for step in steps[current_step_count:]:
        import_class(step["module"]).register(step.get("config", {}))
        Step.create(
            category=category,
            module=step["module"],
            config=json.dumps(step.get("config", None)),
        )
コード例 #3
0
def bootstrap_tools(config):
    logger.info("Setting up tools...")

    tools = {}
    for tool_name, tool in config["tools"].items():
        tool_module = import_class(tool["module"])

        if not tool_module.is_ready():
            tool_module.setup()

        version = import_class(tool["module"]).version()
        tools[tool_name] = dict(
            module=tool["module"], version=version, parameters=tool.get("parameters")
        )

    return tools
コード例 #4
0
ファイル: analyzer.py プロジェクト: vroland/reprobench
 def run(self):
     steps = self.config["steps"]["analysis"]
     context = dict(output_dir=self.output_dir, db_path=self.db_path)
     for step in steps:
         logger.debug(f"Running {step['module']}")
         module = import_class(step["module"])
         module.execute(context, step["config"])
コード例 #5
0
ファイル: analyzer.py プロジェクト: fossabot/reprobench
 def run(self):
     steps = Step.select().where(Step.category == Step.ANALYSIS)
     context = dict(output_dir=self.output_dir, db_path=self.db_path)
     for step in steps:
         logger.debug(f"Running {step.module}")
         module = import_class(step.module)
         config = json.loads(step.config)
         module.execute(context, config)
コード例 #6
0
    def get_dataframe(cls, config):
        joins = config.get("joins", [])
        query = Run.select()

        for model_class in joins:
            model = import_class(model_class)
            query = query.join_from(
                Run, model).select_extend(*model._meta.fields.values())

        sql, params = query.sql()

        return pd.read_sql_query(sql, db, params=params)
コード例 #7
0
def bootstrap_observers(config, observe_args):
    count = Observer.select().count()
    new_observers = config["observers"][count:]
    if len(new_observers) > 0:
        query = Observer.insert_many(
            [
                {
                    "module": observer["module"],
                    "config": json.dumps(observer.get("config", None)),
                }
                for observer in new_observers
            ]
        )
        query.execute()

        for observer in new_observers:
            observer_class = import_class(observer["module"])
            gevent.spawn(observer_class.observe, *observe_args)
コード例 #8
0
def register_steps(config):
    logger.info("Registering steps...")
    for step in itertools.chain.from_iterable(config["steps"].values()):
        import_class(step["module"]).register(step.get("config", {}))