# What this PR does Introduce OnCall UI for Unified Slack migration. It's mostly banners and text adjustments. Changes are behind feature flag. <!-- *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 - [ ] 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. --------- Co-authored-by: Innokentii Konstantinov <innokenty.konstantinov@grafana.com>
75 lines
2.7 KiB
Python
75 lines
2.7 KiB
Python
import enum
|
|
|
|
from django.conf import settings
|
|
from drf_spectacular.plumbing import resolve_type_hint
|
|
from drf_spectacular.utils import extend_schema
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from apps.auth_token.auth import PluginAuthentication
|
|
from apps.base.utils import live_settings
|
|
from apps.labels.utils import is_labels_feature_enabled
|
|
|
|
|
|
class Feature(enum.StrEnum):
|
|
MSTEAMS = "msteams"
|
|
SLACK = "slack"
|
|
UNIFIED_SLACK = "unified_slack"
|
|
TELEGRAM = "telegram"
|
|
LIVE_SETTINGS = "live_settings"
|
|
GRAFANA_CLOUD_NOTIFICATIONS = "grafana_cloud_notifications"
|
|
GRAFANA_CLOUD_CONNECTION = "grafana_cloud_connection"
|
|
# GRAFANA_ALERTING_V2 enables advanced OnCall <-> Alerting integration.
|
|
# On Alerting side it enables integration dropdown in OnCall contact point.
|
|
# On OnCall side it do nothing, just indicating if OnCall API is ready to that integration.
|
|
GRAFANA_ALERTING_V2 = "grafana_alerting_v2"
|
|
LABELS = "labels"
|
|
GOOGLE_OAUTH2 = "google_oauth2"
|
|
|
|
|
|
class FeaturesAPIView(APIView):
|
|
"""
|
|
Return whitelist of enabled features.
|
|
It is needed to disable features for On-prem installations.
|
|
"""
|
|
|
|
authentication_classes = (PluginAuthentication,)
|
|
|
|
@extend_schema(responses={status.HTTP_200_OK: resolve_type_hint(list[Feature])})
|
|
def get(self, request):
|
|
data = self._get_enabled_features(request)
|
|
return Response(data)
|
|
|
|
def _get_enabled_features(self, request):
|
|
enabled_features = []
|
|
|
|
if settings.FEATURE_SLACK_INTEGRATION_ENABLED:
|
|
enabled_features.append(Feature.SLACK)
|
|
|
|
if settings.UNIFIED_SLACK_APP_ENABLED:
|
|
enabled_features.append(Feature.UNIFIED_SLACK)
|
|
|
|
if settings.FEATURE_TELEGRAM_INTEGRATION_ENABLED:
|
|
enabled_features.append(Feature.TELEGRAM)
|
|
|
|
if settings.IS_OPEN_SOURCE:
|
|
# Features below should be enabled only in OSS
|
|
enabled_features.append(Feature.GRAFANA_CLOUD_CONNECTION)
|
|
if settings.FEATURE_LIVE_SETTINGS_ENABLED:
|
|
enabled_features.append(Feature.LIVE_SETTINGS)
|
|
if live_settings.GRAFANA_CLOUD_NOTIFICATIONS_ENABLED:
|
|
enabled_features.append(Feature.GRAFANA_CLOUD_NOTIFICATIONS)
|
|
else:
|
|
enabled_features.append(Feature.MSTEAMS)
|
|
|
|
if settings.FEATURE_GRAFANA_ALERTING_V2_ENABLED:
|
|
enabled_features.append(Feature.GRAFANA_ALERTING_V2)
|
|
|
|
if is_labels_feature_enabled(self.request.auth.organization):
|
|
enabled_features.append(Feature.LABELS)
|
|
|
|
if settings.GOOGLE_OAUTH2_ENABLED:
|
|
enabled_features.append(Feature.GOOGLE_OAUTH2)
|
|
|
|
return enabled_features
|