Add logging for invalid api_tokens during sync (#4905)
# What this PR does Add logging for when we skip an organization for sync if it is missing its api token. ## Which issue(s) this PR closes Related to [issue link here] <!-- *Note*: If you want the issue to be auto-closed once the PR is merged, change "Related to" to "Closes" in the line above. If you have more than one GitHub issue that this PR closes, be sure to preface each issue link with a [closing keyword](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/using-keywords-in-issues-and-pull-requests#linking-a-pull-request-to-an-issue). This ensures that the issue(s) are auto-closed once the PR has been merged. --> ## Checklist - [x] Unit, integration, and e2e (if applicable) tests updated - [x] Documentation added (or `pr:no public docs` PR label added if not required) - [x] 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.
This commit is contained in:
parent
66925366a6
commit
042fb49aaf
2 changed files with 40 additions and 9 deletions
|
|
@ -41,14 +41,17 @@ def sync_organizations_v2(org_ids=None):
|
|||
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")
|
||||
for idx, org in enumerate(organization_qs):
|
||||
client = GrafanaAPIClient(api_url=org.grafana_url, api_token=org.api_token)
|
||||
_, status = client.sync()
|
||||
if status["status_code"] != 200:
|
||||
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 org.api_token:
|
||||
client = GrafanaAPIClient(api_url=org.grafana_url, api_token=org.api_token)
|
||||
_, status = client.sync()
|
||||
if status["status_code"] != 200:
|
||||
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)
|
||||
else:
|
||||
logger.info(f"Skipping stack_slug={org.stack_slug}, api_token is not set")
|
||||
else:
|
||||
logger.info(f"Issuing sync requests already in progress lock_id={lock_id}, check slow outgoing requests")
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ from rest_framework import status
|
|||
from rest_framework.test import APIClient
|
||||
|
||||
from apps.api.permissions import LegacyAccessControlRole
|
||||
from apps.grafana_plugin.tasks import sync_organizations_v2
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
|
@ -44,3 +45,30 @@ def test_invalid_auth(make_organization_and_user_with_plugin_token, make_user_au
|
|||
|
||||
assert response.status_code == status.HTTP_401_UNAUTHORIZED
|
||||
assert not mock_sync.called
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"api_token, sync_called",
|
||||
[
|
||||
("", False),
|
||||
("abc", True),
|
||||
],
|
||||
)
|
||||
@pytest.mark.django_db
|
||||
def test_skip_org_without_api_token(make_organization, api_token, sync_called):
|
||||
organization = make_organization(api_token=api_token)
|
||||
|
||||
with patch(
|
||||
"apps.grafana_plugin.helpers.GrafanaAPIClient.sync",
|
||||
return_value=(
|
||||
None,
|
||||
{
|
||||
"url": "",
|
||||
"connected": True,
|
||||
"status_code": status.HTTP_200_OK,
|
||||
"message": "",
|
||||
},
|
||||
),
|
||||
) as mock_sync:
|
||||
sync_organizations_v2(org_ids=[organization.id])
|
||||
assert mock_sync.called == sync_called
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue