oncall-engine/engine/apps/labels/utils.py

61 lines
1.8 KiB
Python
Raw Normal View History

import logging
import typing
from django.apps import apps # noqa: I251
from django.conf import settings
if typing.TYPE_CHECKING:
from apps.labels.models import AssociatedLabel
logger = logging.getLogger(__name__)
LABEL_OUTDATED_TIMEOUT_MINUTES = 30
ASSOCIATED_MODEL_NAME = "AssociatedLabel"
class LabelUpdateParam(typing.TypedDict):
name: str
class LabelParams(typing.TypedDict):
id: str
name: str
class LabelData(typing.TypedDict):
key: LabelParams
value: LabelParams
class LabelKeyData(typing.TypedDict):
key: LabelParams
values: typing.List[LabelParams]
LabelsData = typing.List[LabelData]
LabelsKeysData = typing.List[LabelParams]
def get_associating_label_model(obj_model_name: str) -> typing.Type["AssociatedLabel"]:
associating_label_model_name = obj_model_name + ASSOCIATED_MODEL_NAME
label_model = apps.get_model("labels", associating_label_model_name)
return label_model
def is_labels_feature_enabled(organization) -> bool:
"""
Checks if labels feature enabled for all organizations (FEATURE_LABELS_ENABLED_FOR_ALL).
If not, checks if current organization's grafana org_id is in the list of organizations labels feature enabled for
(FEATURE_LABELS_ENABLED_FOR_GRAFANA_ORGS)
"""
logger.info(
"is_labels_feature_enabled: "
f"FEATURE_LABELS_ENABLED_FOR_ALL={settings.FEATURE_LABELS_ENABLED_FOR_ALL}, "
f"organization in FEATURE_LABELS_ENABLED_FOR_GRAFANA_ORGS="
f"{organization.id in settings.FEATURE_LABELS_ENABLED_FOR_GRAFANA_ORGS}, "
f"organization={organization.id}"
)
if not settings.FEATURE_LABELS_ENABLED_FOR_ALL:
return organization.org_id in settings.FEATURE_LABELS_ENABLED_FOR_GRAFANA_ORGS
return settings.FEATURE_LABELS_ENABLED_FOR_ALL