Merge branch 'grafana_cloud_notifications' of github.com:grafana/oncall into grafana_cloud_notifications

This commit is contained in:
Yulia Shanyrova 2022-06-08 13:10:19 +02:00
commit cd796d4160
5 changed files with 35 additions and 17 deletions

View file

@ -12,7 +12,7 @@ class CloudUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ["sync_data"]
fields = ["cloud_data"]
def get_cloud_data(self, obj):
link = None

View file

@ -7,7 +7,7 @@ from django.utils import timezone
from rest_framework import status
from apps.base.utils import live_settings
from apps.oss_installation.models import CloudHeartbeat, OssInstallation
from apps.oss_installation.models import CloudConnector, CloudHeartbeat, OssInstallation
from apps.oss_installation.usage_stats import UsageStatsService
from common.custom_celery_tasks import shared_dedicated_queue_retry_task
@ -93,3 +93,17 @@ def send_cloud_heartbeat():
if cloud_heartbeat.pk is not None:
cloud_heartbeat.save()
logger.info("Finish send cloud heartbeat")
@shared_dedicated_queue_retry_task()
def sync_users_with_cloud():
logger.info("Start sync_users_with_cloud")
connector = CloudConnector.objects.first()
if connector is not None:
status, error = connector.sync_users_with_cloud()
log_message = "Users synced. Status {status}."
if error:
log_message += f" Error {error}"
logger.info(log_message)
else:
logger.info("Grafana Cloud is not connected")

View file

@ -1,19 +1,14 @@
from django.urls import path
from django.urls import include, path
from common.api_helpers.optional_slash_router import optional_slash_path
from common.api_helpers.optional_slash_router import OptionalSlashRouter, optional_slash_path
from .views import CloudConnectionView, CloudUsersView, CloudUserView
router = OptionalSlashRouter()
router.register("cloud_users", CloudUserView, basename="cloud-users")
urlpatterns = [
path("", include(router.urls)),
optional_slash_path("cloud_users", CloudUsersView.as_view(), name="cloud-users-list"),
path(
"cloud_users/<str:pk>",
CloudUserView.as_view(
{
"get": "retrieve",
}
),
name="cloud-user-detail",
),
optional_slash_path("cloud_connection", CloudConnectionView.as_view(), name="cloud-connection-status"),
]

View file

@ -7,7 +7,7 @@ from rest_framework.response import Response
from rest_framework.views import APIView
import apps.oss_installation.constants as cloud_constants
from apps.api.permissions import ActionPermission, IsAdmin, IsOwnerOrAdmin
from apps.api.permissions import ActionPermission, AnyRole, IsAdmin, IsOwnerOrAdmin
from apps.auth_token.auth import PluginAuthentication
from apps.oss_installation.models import CloudConnector, CloudUserIdentity
from apps.oss_installation.serializers import CloudUserSerializer
@ -81,8 +81,12 @@ class CloudUserView(
authentication_classes = (PluginAuthentication,)
permission_classes = (IsAuthenticated, ActionPermission)
action_permissions = {
AnyRole: ("retrieve",),
IsAdmin: ("sync",),
}
action_object_permissions = {
IsOwnerOrAdmin: ("retrieve",),
IsOwnerOrAdmin: ("retrieve", "sync"),
}
serializer_class = CloudUserSerializer
@ -91,7 +95,7 @@ class CloudUserView(
return queryset
@action(detail=True, methods=["post"])
def sync_with_cloud(self, request, pk):
def sync(self, request, pk):
user = self.get_object()
connector = CloudConnector.objects.first()
if connector is not None:

View file

@ -40,6 +40,7 @@ if TESTING:
# TODO: OSS: Add these setting to oss settings file. Add Version there too.
OSS_INSTALLATION_FEATURES_ENABLED = True
SEND_ANONYMOUS_USAGE_STATS = True
INSTALLED_APPS += ["apps.oss_installation"] # noqa
@ -55,4 +56,8 @@ CELERY_BEAT_SCHEDULE["send_cloud_heartbeat"] = { # noqa
"args": (),
} # noqa
SEND_ANONYMOUS_USAGE_STATS = True
CELERY_BEAT_SCHEDULE["sync_users_with_cloud"] = { # noqa
"task": "apps.oss_installation.tasks.sync_users_with_cloud",
"schedule": crontab(hour="*/12"), # noqa
"args": (),
} # noqa