Пример #1
0
 def test_can_get_next(self):
     # TODO: These integration tests are semi-manual, as they expect certain data
     logger = MagicMock()
     client = RunfolderClient(["http://testarteria1:10800"], logger)
     result = client.next_ready()
     self.assertNotEqual(result, None)
     self.assertTrue('path' in result)
     self.assertTrue('host' in result)
     self.assertTrue('link' in result)
     self.assertTrue('state' in result)
     self.assertEqual(result['state'], 'ready')
 def test_can_get_next(self):
     # TODO: These integration tests are semi-manual, as they expect certain data
     logger = MagicMock()
     client = RunfolderClient(["http://testarteria1:10800"], logger)
     result = client.next_ready()
     self.assertNotEqual(result, None)
     self.assertTrue('path' in result)
     self.assertTrue('host' in result)
     self.assertTrue('link' in result)
     self.assertTrue('state' in result)
     self.assertEqual(result['state'], 'ready')
Пример #3
0
 def setup(self):
     self._infolog("setup")
     try:
         self._load_config()
         client_urls = self.config["runfolder_svc_urls"]
         self._client = RunfolderClient(client_urls, self._logger)
         self._infolog("Created client: {0}".format(self._client))
     except Exception as ex:
         # TODO: It seems that st2 isn't logging the entire exception, or
         # they're not in /var/log/st2
         self._logger.error(str(ex))
     self._infolog("setup finished")
class RunfolderSensor(PollingSensor):

    def __init__(self, sensor_service, config=None, poll_interval=None, trigger='arteria.runfolder_ready'):
        super(RunfolderSensor, self).__init__(sensor_service=sensor_service,
                                              config=config,
                                              poll_interval=poll_interval)
        self._logger = self._sensor_service.get_logger(__name__)
        self._infolog("__init__")
        self._client = None
        self._trigger = trigger
        self._hostconfigs = {}

    def setup(self):
        self._infolog("setup")
        client_urls = self._config["runfolder_service_url"]
        self._client = RunfolderClient(client_urls, self._logger)
        self._infolog("Created client: {0}".format(self._client))
        self._infolog("setup finished")

    def poll(self):
        self._infolog("poll")
        self._infolog("Checking for available runfolders")
        result = self._client.next_ready()
        self._infolog("Result from client: {0}".format(result))
        if result:
            self._handle_result(result)

    def cleanup(self):
        self._infolog("cleanup")

    def add_trigger(self, trigger):
        self._infolog("add_trigger")

    def update_trigger(self, trigger):
        self._infolog("update_trigger")

    def remove_trigger(self, trigger):
        self._infolog("remove_trigger")

    def _handle_result(self, result):
        self._infolog("_handle_result")
        trigger = self._trigger
        runfolder_path = result['response']['path']
        runfolder_name = os.path.split(runfolder_path)[1]
        payload = {
            'host': result['response']['host'],
            'runfolder': runfolder_path,
            'runfolder_name': runfolder_name,
            'link': result['response']['link'],
            'timestamp': datetime.utcnow().isoformat(),
            'destination': ""
        }
        if result['requesturl'] in self._hostconfigs:
            payload['destination'] = self._hostconfigs[result['requesturl']].get('dest_folder', "")
            payload['remote_user'] = self._hostconfigs[result['requesturl']].get('remote_user', "")
            payload['user_key'] = self._hostconfigs[result['requesturl']].get('user_key', "")
        self._sensor_service.dispatch(trigger=trigger, payload=payload, trace_tag=runfolder_name)

    def _infolog(self, msg):
        self._logger.info("[arteria-packs." + self.__class__.__name__ + "] " + msg)
Пример #5
0
 def setup(self):
     self._infolog("setup")
     try:
         self._load_config()
         client_urls = self.config["runfolder_svc_urls"]
         self._client = RunfolderClient(client_urls, self._logger)
         self._infolog("Created client: {0}".format(self._client))
     except Exception as ex:
         # TODO: It seems that st2 isn't logging the entire exception, or
         # they're not in /var/log/st2
         self._logger.error(str(ex))
     self._infolog("setup finished")
Пример #6
0
 def setup(self):
     self._infolog("setup")
     try:
         self._load_config()
         client_urls = [x['url'] for x in self.config["incoming_svc_urls"]]
         # copy all further keys of every item over to self._hostconfigs
         for x in self.config["incoming_svc_urls"]:
             self._hostconfigs[x['url']] = {}
             for y in x:
                 if y != 'url':
                     self._hostconfigs[x['url']][y] = x[y]
         self._client = RunfolderClient(client_urls, self._logger)
         self._infolog("Created client: {0}".format(self._client))
     except Exception as ex:
         # TODO: It seems that st2 isn't logging the entire exception, or
         # they're not in /var/log/st2
         self._logger.error(str(ex))
     self._infolog("setup finished")
Пример #7
0
class RunfolderSensor(PollingSensor):
    def __init__(self,
                 sensor_service,
                 config=None,
                 poll_interval=None,
                 trigger='arteria-packs.runfolder_ready'):
        super(RunfolderSensor, self).__init__(sensor_service=sensor_service,
                                              config=config,
                                              poll_interval=poll_interval)
        self._logger = self._sensor_service.get_logger(__name__)
        self._infolog("__init__")
        self._client = None
        self._trigger = trigger
        self._hostconfigs = {}

    def setup(self):
        self._infolog("setup")
        try:
            self._load_config()
            client_urls = self.config["runfolder_svc_urls"]
            self._client = RunfolderClient(client_urls, self._logger)
            self._infolog("Created client: {0}".format(self._client))
        except Exception as ex:
            # TODO: It seems that st2 isn't logging the entire exception, or
            # they're not in /var/log/st2
            self._logger.error(str(ex))
        self._infolog("setup finished")

    def poll(self):
        try:
            self._infolog("poll")
            self._infolog("Checking for available runfolders")
            result = self._client.next_ready()
            self._infolog("Result from client: {0}".format(result))

            if result:
                self._handle_result(result)
        except Exception as ex:
            self._logger.error(str(ex))

    def cleanup(self):
        self._infolog("cleanup")

    def add_trigger(self, trigger):
        self._infolog("add_trigger")

    def update_trigger(self, trigger):
        self._infolog("update_trigger")

    def remove_trigger(self, trigger):
        self._infolog("remove_trigger")

    def _handle_result(self, result):
        self._infolog("_handle_result")
        trigger = self._trigger
        runfolder_path = result['response']['path']
        runfolder_name = os.path.split(runfolder_path)[1]
        payload = {
            'host': result['response']['host'],
            'runfolder': runfolder_path,
            'runfolder_name': runfolder_name,
            'link': result['response']['link'],
            'timestamp': datetime.utcnow().isoformat(),
            'destination': ""
        }
        if result['requesturl'] in self._hostconfigs:
            payload['destination'] = self._hostconfigs[
                result['requesturl']].get('dest_folder', "")
            payload['remote_user'] = self._hostconfigs[
                result['requesturl']].get('remote_user', "")
            payload['user_key'] = self._hostconfigs[result['requesturl']].get(
                'user_key', "")
        self._sensor_service.dispatch(trigger=trigger,
                                      payload=payload,
                                      trace_tag=runfolder_name)

    def _load_config(self):
        config_path = "/opt/stackstorm/packs/arteria-packs/config.yaml"
        with open(config_path) as stream:
            self.config = yaml.load(stream)
            self._infolog("Loaded configuration from {}".format(config_path))

    def _infolog(self, msg):
        self._logger.info("[arteria-packs." + self.__class__.__name__ + "] " +
                          msg)
 def test_server_down_only_logs(self):
     logger = MagicMock()
     client = RunfolderClient(["http://testarteria1-notavailable:10800"], logger)
     result = client.next_ready()
     self.assertEqual(result, None)
Пример #9
0
class RunfolderSensor(PollingSensor):

    def __init__(self, sensor_service, config=None, poll_interval=None, trigger='snpseq_packs.runfolder_ready'):
        super(RunfolderSensor, self).__init__(sensor_service=sensor_service,
                                              config=config,
                                              poll_interval=poll_interval)
        self._logger = self._sensor_service.get_logger(__name__)
        self._infolog("__init__")
        self._client = None
        self._trigger = trigger
        self._hostconfigs = {}

    def setup(self):
        self._infolog("setup")
        try:
            self._load_config()
            client_urls = self.config["runfolder_svc_urls"]
            self._client = RunfolderClient(client_urls, self._logger)
            self._infolog("Created client: {0}".format(self._client))
        except Exception as ex:
            # TODO: It seems that st2 isn't logging the entire exception, or
            # they're not in /var/log/st2
            self._logger.error(str(ex))
        self._infolog("setup finished")

    def poll(self):
        try:
            self._infolog("poll")
            self._infolog("Checking for available runfolders")
            result = self._client.next_ready()
            self._infolog("Result from client: {0}".format(result))

            if result:
                self._handle_result(result)
        except Exception as ex:
            self._logger.error(str(ex))

    def cleanup(self):
        self._infolog("cleanup")

    def add_trigger(self, trigger):
        self._infolog("add_trigger")

    def update_trigger(self, trigger):
        self._infolog("update_trigger")

    def remove_trigger(self, trigger):
        self._infolog("remove_trigger")

    def _handle_result(self, result):
        self._infolog("_handle_result")
        trigger = self._trigger
        runfolder_path = result['response']['path']
        runfolder_name = os.path.split(runfolder_path)[1]
        payload = {
            'host': result['response']['host'],
            'runfolder': runfolder_path,
            'runfolder_name': runfolder_name,
            'link': result['response']['link'],
            'timestamp': datetime.utcnow().isoformat(),
            'destination': ""
        }
        if result['requesturl'] in self._hostconfigs:
            payload['destination'] = self._hostconfigs[result['requesturl']].get('dest_folder', "")
            payload['remote_user'] = self._hostconfigs[result['requesturl']].get('remote_user', "")
            payload['user_key'] = self._hostconfigs[result['requesturl']].get('user_key', "")
        self._sensor_service.dispatch(trigger=trigger, payload=payload, trace_tag=runfolder_name)

    def _load_config(self):
        config_path = "/opt/stackstorm/packs/snpseq_packs/config.yaml"
        with open(config_path) as stream:
            self.config = yaml.load(stream)
            self._infolog("Loaded configuration from {}".format(config_path))

    def _infolog(self, msg):
        self._logger.info("[snpseq_packs." + self.__class__.__name__ + "] " + msg)
Пример #10
0
class RunfolderSensor(PollingSensor):
    def __init__(self,
                 sensor_service,
                 config=None,
                 poll_interval=None,
                 trigger='arteria.runfolder_ready'):
        super(RunfolderSensor, self).__init__(sensor_service=sensor_service,
                                              config=config,
                                              poll_interval=poll_interval)
        self._logger = self._sensor_service.get_logger(__name__)
        self._infolog("__init__")
        self._client = None
        self._trigger = trigger
        self._hostconfigs = {}

    def setup(self):
        self._infolog("setup")
        client_urls = self._config["runfolder_service_url"]
        self._client = RunfolderClient(client_urls, self._logger)
        self._infolog("Created client: {0}".format(self._client))
        self._infolog("setup finished")

    def poll(self):
        self._infolog("poll")
        self._infolog("Checking for available runfolders")
        result = self._client.next_ready()
        self._infolog("Result from client: {0}".format(result))
        if result:
            self._handle_result(result)

    def cleanup(self):
        self._infolog("cleanup")

    def add_trigger(self, trigger):
        self._infolog("add_trigger")

    def update_trigger(self, trigger):
        self._infolog("update_trigger")

    def remove_trigger(self, trigger):
        self._infolog("remove_trigger")

    def _handle_result(self, result):
        self._infolog("_handle_result")
        trigger = self._trigger
        runfolder_path = result['response']['path']
        runfolder_name = os.path.split(runfolder_path)[1]
        payload = {
            'host': result['response']['host'],
            'runfolder': runfolder_path,
            'runfolder_name': runfolder_name,
            'link': result['response']['link'],
            'timestamp': datetime.utcnow().isoformat(),
            'destination': ""
        }
        if result['requesturl'] in self._hostconfigs:
            payload['destination'] = self._hostconfigs[
                result['requesturl']].get('dest_folder', "")
            payload['remote_user'] = self._hostconfigs[
                result['requesturl']].get('remote_user', "")
            payload['user_key'] = self._hostconfigs[result['requesturl']].get(
                'user_key', "")
        self._sensor_service.dispatch(trigger=trigger,
                                      payload=payload,
                                      trace_tag=runfolder_name)

    def _infolog(self, msg):
        self._logger.info("[arteria-packs." + self.__class__.__name__ + "] " +
                          msg)
Пример #11
0
 def setup(self):
     self._infolog("setup")
     client_urls = self._config["runfolder_service_url"]
     self._client = RunfolderClient(client_urls, self._logger)
     self._infolog("Created client: {0}".format(self._client))
     self._infolog("setup finished")
 def setup(self):
     self._infolog("setup")
     client_urls = self._config["runfolder_service_url"]
     self._client = RunfolderClient(client_urls, self._logger)
     self._infolog("Created client: {0}".format(self._client))
     self._infolog("setup finished")
Пример #13
0
 def test_server_down_only_logs(self):
     logger = MagicMock()
     client = RunfolderClient(["http://testarteria1-notavailable:10800"],
                              logger)
     result = client.next_ready()
     self.assertEqual(result, None)