36 lines
1.4 KiB
Python
36 lines
1.4 KiB
Python
|
|
import logging
|
||
|
|
|
||
|
|
from django.core.cache import cache
|
||
|
|
|
||
|
|
from apps.grafana_plugin.helpers.client import GrafanaAPIClient
|
||
|
|
from apps.grafana_plugin.tasks import sync_team_members_for_organization_async
|
||
|
|
from apps.user_management.sync import sync_teams, sync_users
|
||
|
|
|
||
|
|
logger = logging.getLogger(__name__)
|
||
|
|
|
||
|
|
SYNC_REQUEST_TIMEOUT = 5
|
||
|
|
SYNC_PERIOD = 60
|
||
|
|
|
||
|
|
|
||
|
|
def is_request_from_terraform(request) -> bool:
|
||
|
|
return "terraform-provider-grafana" in request.META.get("HTTP_USER_AGENT", "")
|
||
|
|
|
||
|
|
|
||
|
|
def sync_users_on_tf_request(organization):
|
||
|
|
cache_key = f"sync_users_on_tf_request_{organization.id}"
|
||
|
|
if not cache.get(cache_key):
|
||
|
|
logger.info(f"Start sync_users_on_tf_request organization_id={organization.id}")
|
||
|
|
client = GrafanaAPIClient(api_url=organization.grafana_url, api_token=organization.api_token)
|
||
|
|
cache.set(cache_key, True, SYNC_PERIOD)
|
||
|
|
sync_users(client, organization, timeout=SYNC_REQUEST_TIMEOUT)
|
||
|
|
|
||
|
|
|
||
|
|
def sync_teams_on_tf_request(organization):
|
||
|
|
cache_key = f"sync_teams_on_tf_request_{organization.id}"
|
||
|
|
if not cache.get(cache_key):
|
||
|
|
logger.info(f"Start sync_teams_on_tf_request organization_id={organization.id}")
|
||
|
|
cache.set(cache_key, True, SYNC_PERIOD)
|
||
|
|
client = GrafanaAPIClient(api_url=organization.grafana_url, api_token=organization.api_token)
|
||
|
|
sync_teams(client, organization, timeout=SYNC_REQUEST_TIMEOUT)
|
||
|
|
sync_team_members_for_organization_async.apply_async((organization.id,))
|