예제 #1
0
    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)
예제 #2
0
    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()
예제 #3
0
 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()
예제 #4
0
    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()
예제 #5
0
    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']
예제 #6
0
    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']
예제 #7
0
 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()