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 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)
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")
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)
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)
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)
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")