def test_cursor_is_preserved_between_runs(self): return_value = [{ 'next': 'http://next_page_url/?cursor=next_cursor', 'count': 2, 'results': [{ 'ip_address': '127.0.0.1', 'querystring': '', 'start_time': '2018-06-07T05:00:00-03:00', 'id': 2, 'uri': '/series/api/series/', }] }, { 'next': None, 'count': 2, 'results': [{ 'ip_address': '127.0.0.1', 'querystring': '', 'start_time': '2018-06-07T05:00:00-03:00', 'id': 3, 'uri': '/series/api/series/', }] }] enqueue_new_import_analytics_task(requests_lib=FakeRequests( responses=return_value)) self.assertIsNotNone(ImportConfig.get_solo().last_cursor)
def exec_request(self, url=None, **params): """Wrapper sobre la llamada a la API de api-mgmt""" if url and params: raise ValueError import_config_model = ImportConfig.get_solo() if url is None: url = import_config_model.endpoint return self.requests.get( url, headers=import_config_model.get_authorization_header(), params=params, ).json()
def run(self, import_all=False): task = AnalyticsImportTask(status=AnalyticsImportTask.RUNNING, timestamp=timezone.now()) import_config_model = ImportConfig.get_solo() task.write_logs( "Usando config: endpoint {}, api_id {}, token {}".format( import_config_model.endpoint, import_config_model.kong_api_id, import_config_model.token)) try: self._run_import(import_all) task.write_logs("Todo OK") except Exception as e: task.write_logs("Error importando analytics: {}".format(e)) task.status = task.FINISHED task.save()
def run(self, import_all=False): import_config_model = ImportConfig.get_solo() AnalyticsImportTask.info(self.task, "Usando config: endpoint {}, api_id {}, token {}".format( import_config_model.endpoint, import_config_model.kong_api_id, import_config_model.token )) try: self._run_import(import_all) AnalyticsImportTask.info(self.task, "Todo OK") except Exception as e: AnalyticsImportTask.info(self.task, "Error importando analytics: {}".format(e)) self.task.refresh_from_db() self.task.status = AnalyticsImportTask.FINISHED self.task.save()
def _run_import(self, import_all=False): import_config_model = ImportConfig.get_solo() if (not import_config_model.endpoint or not import_config_model.token or not import_config_model.kong_api_id): raise FieldError("Configuración de importación de analytics no inicializada") cursor = import_config_model.last_cursor or None if import_all: cursor = None response = self.exec_request(cursor=cursor, kong_api_id=import_config_model.kong_api_id) self._load_queries(response) next_results = response['next'] while next_results: # Actualizo el cursor en cada iteración en caso de error import_config_model.last_cursor = parse.parse_qs(parse.urlsplit(next_results).query)['cursor'][0] import_config_model.save() response = self.exec_request(url=next_results) self._load_queries(response) next_results = response['next']
def _run_import(self, import_all=False): last_query = Query.objects.last() if import_all or last_query is None: start_date = None else: start_date = last_query.timestamp.date() import_config_model = ImportConfig.get_solo() if (not import_config_model.endpoint or not import_config_model.token or not import_config_model.kong_api_id): raise FieldError( "Configuración de importación de analytics no inicializada") response = self.exec_request( from_date=start_date, limit=self.limit, kong_api_id=import_config_model.kong_api_id) self._load_queries_into_db(response) next_results = response['next'] while next_results: response = self.exec_request(url=next_results) self._load_queries_into_db(response) next_results = response['next']
def setUp(self): config_model = ImportConfig.get_solo() config_model.endpoint = 'http://localhost:80/fake_endpoint' config_model.token = 'fake-token' config_model.kong_api_id = 'fake_id' config_model.save()