From 9655a90f236162aa1046e3fc9d9c048952ab5943 Mon Sep 17 00:00:00 2001 From: Michael Derynck Date: Mon, 26 Aug 2024 13:12:18 -0600 Subject: [PATCH] Fix plugin sync issues (#4930) # What this PR does - Fix incorrect response for error message on sync - Remove sleep delay from sync (natural latency provides enough delay) ## Which issue(s) this PR closes Related to [issue link here] ## Checklist - [ ] Unit, integration, and e2e (if applicable) tests updated - [ ] Documentation added (or `pr:no public docs` PR label added if not required) - [ ] Added the relevant release notes label (see labels prefixed w/ `release:`). These labels dictate how your PR will show up in the autogenerated release notes. --- engine/apps/grafana_plugin/tasks/sync_v2.py | 10 +++------- engine/apps/grafana_plugin/views/sync_v2.py | 7 +++++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/engine/apps/grafana_plugin/tasks/sync_v2.py b/engine/apps/grafana_plugin/tasks/sync_v2.py index 0f351e30..27a3d915 100644 --- a/engine/apps/grafana_plugin/tasks/sync_v2.py +++ b/engine/apps/grafana_plugin/tasks/sync_v2.py @@ -1,6 +1,4 @@ import logging -import math -from time import sleep from celery.utils.log import get_task_logger from django.utils import timezone @@ -38,8 +36,7 @@ def sync_organizations_v2(org_ids=None): logger.debug(f"Found {len(active_instance_ids)} active instances") organization_qs = organization_qs.filter(stack_id__in=active_instance_ids) - orgs_per_second = math.ceil(len(organization_qs) / SYNC_PERIOD.seconds) - logger.info(f"Syncing {len(organization_qs)} organizations @ {orgs_per_second} per 1s pause") + logger.info(f"Syncing {len(organization_qs)} organizations") for idx, org in enumerate(organization_qs): if GrafanaAPIClient.validate_grafana_token_format(org.api_token): client = GrafanaAPIClient(api_url=org.grafana_url, api_token=org.api_token) @@ -48,9 +45,8 @@ def sync_organizations_v2(org_ids=None): logger.error( f"Failed to request sync stack_slug={org.stack_slug} status_code={status['status_code']} url={status['url']} message={status['message']}" ) - if idx % orgs_per_second == 0: - logger.info(f"Sleep 1s after {idx + 1} organizations processed") - sleep(1) + if idx % 1000 == 0: + logger.info(f"{idx + 1} organizations processed") else: logger.info(f"Skipping stack_slug={org.stack_slug}, api_token format is invalid or not set") else: diff --git a/engine/apps/grafana_plugin/views/sync_v2.py b/engine/apps/grafana_plugin/views/sync_v2.py index 7df24cfe..1c17cef8 100644 --- a/engine/apps/grafana_plugin/views/sync_v2.py +++ b/engine/apps/grafana_plugin/views/sync_v2.py @@ -1,5 +1,5 @@ import logging -from dataclasses import asdict +from dataclasses import asdict, is_dataclass from django.conf import settings from rest_framework import status @@ -49,6 +49,9 @@ class SyncV2View(APIView): try: self.do_sync(request) except SyncException as e: - return Response(data=asdict(e.error_data), status=status.HTTP_400_BAD_REQUEST) + return Response( + data=asdict(e.error_data) if is_dataclass(e.error_data) else e.error_data, + status=status.HTTP_400_BAD_REQUEST, + ) return Response(status=status.HTTP_200_OK)