You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

323 lines
9.2 KiB

from itsimodels.core.base_models import BaseModel, ChildModel
from itsimodels.core.compat import string_types
from itsimodels.core.fields import (
BoolField,
DictField,
ForeignKey,
ForeignKeyList,
ListField,
NumberField,
StringField,
TypeField, ForeignKeyMultiEmbeddedStr
)
from itsimodels.team import GLOBAL_TEAM_KEY
'''
Many searches in kip embeds various ids in the query string
we attempt to capture most of them. notice the matching/replacement happens
in itsicli.content_packs.backup.KeysUpdater
'''
GENERIC_SEARCH_RE = (r'id *= *\\"([\w-]+?)(?= |\\)|' # i.e. serviceid=\"a5d84252-acec-40a4-bf1f-ba6f2aecc6ce\"
r'id *= *([\w-]+?)(?= |$)|' # i.e. kpi_id=fcdce583cea75e75d5e26e7d
r'`assess_severity\(([\w-]+?) *, *([\w-]+?)\)`|' # i.e. `assess_severity(a5d84252-acec-40a4-bf1f-ba6f2aecc6ce, fcdce583cea75e75d5e26e7d)`
r'`assess_severity\(([\w-]+?) *, *([\w-]+?) *,.+?\)`|' # i.e. `assess_severity(a5d84252-acec-40a4-bf1f-ba6f2aecc6ce, fcdce583cea75e75d5e26e7d , true, true, true)`
r'`get_full_itsi_summary_[\w]+?\(([\w-]+?)\)`') # i.e. `get_full_itsi_summary_service_health_events(4dbc2a97-8d0e-4b29-92db-2cc5d426a71f)`
class ThresholdLevel(ChildModel):
dynamic_param = NumberField(alias='dynamicParam')
severity_color = StringField(alias='severityColor')
severity_color_light = StringField(alias='severityColorLight')
severity_label = StringField(alias='severityLabel')
severity_label_localized = StringField(alias='severityLabelLocalized')
severity_value = NumberField(alias='severityValue')
threshold_value = NumberField(alias='thresholdValue')
class KpiThresholds(ChildModel):
base_severity_color = StringField(alias='baseSeverityColor')
base_severity_color_light = StringField(alias='baseSeverityColorLight')
base_severity_label = StringField(default='info', alias='baseSeverityLabel')
base_severity_value = NumberField(alias='baseSeverityValue')
gauge_max = NumberField(default=100, alias='gaugeMax')
gauge_min = NumberField(default=0, alias='gaugeMin')
is_max_static = BoolField(default=False, alias='isMaxStatic')
is_min_static = BoolField(default=False, alias='isMinStatic')
metric_field = StringField(alias='metricField')
render_boundary_max = NumberField(alias='renderBoundaryMax')
render_boundary_min = NumberField(alias='renderBoundaryMin')
threshold_levels = ListField(ThresholdLevel, alias='thresholdLevels')
class KpiTimePolicy(ChildModel):
title = StringField(required=True)
aggregate_thresholds = TypeField(KpiThresholds)
entity_thresholds = TypeField(KpiThresholds)
policy_type = StringField(default='static')
time_blocks = ListField(object)
class KpiTimePolicies(ChildModel):
policies = DictField(KpiTimePolicy)
class MetricSearchSpec(ChildModel):
metric_index = StringField(default='')
metric_name = StringField(default='')
class DatamodelFilter(ChildModel):
field = StringField(alias='_field')
operator = StringField(alias='_operator')
value = StringField(alias='_value')
class DatamodelSearchSpec(ChildModel):
datamodel = StringField()
object = StringField()
field = StringField()
owner_field = StringField()
class Kpi(ChildModel):
key = StringField(required=True, alias='_key')
title = StringField(required=True)
alert_eval = StringField(default='')
aggregate_eval = StringField(default='')
aggregate_statop = StringField(default='avg')
adaptive_thresholding_training_window = StringField()
adaptive_thresholds_is_enabled = BoolField(default=False)
aggregate_thresholds = TypeField(KpiThresholds)
aggregate_thresholds_alert_enabled = BoolField(default=False)
aggregate_thresholds_custom_alert_enabled = BoolField(default=False)
aggregate_thresholds_custom_alert_rules = ListField()
alert_lag = StringField(default='30')
alert_on = StringField()
alert_period = StringField()
anomaly_detection_alerting_enabled = BoolField(default=False)
anomaly_detection_is_enabled = BoolField(default=False)
anomaly_detection_sensitivity = NumberField()
anomaly_detection_training_window = StringField()
aggregate_threshold_alert_enabled = BoolField(default=False)
backfill_earliest_time = StringField(default='-7d')
backfill_enabled = BoolField(default=False)
base_search = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
base_search_id = ForeignKey('itsimodels.kpi_base_search.KpiBaseSearch')
base_search_metric = ForeignKey('itsimodels.kpi_base_search.SearchMetric')
base_service_template_id = ForeignKey('itsimodels.service_template.ServiceTemplate')
cohesive_ad = DictField()
cohesive_anomaly_detection_is_enabled = BoolField(default=False)
datamodel = TypeField(DatamodelSearchSpec)
datamodel_filter = ListField(DatamodelFilter)
datamodel_filter_clauses = StringField()
description = StringField(default='')
did_load_recommendation = BoolField(default=False)
enabled = BoolField(default=False)
entity_filter_field = StringField(default='', alias='entity_id_fields')
entity_split_field = StringField(default='', alias='entity_breakdown_id_fields')
entity_statop = StringField(default='avg')
entity_thresholds = TypeField(KpiThresholds)
fill_gaps = StringField(default='null_value')
gap_custom_alert_value = NumberField()
gap_severity = StringField(default='unknown')
gap_severity_color = StringField(default='')
gap_severity_color_light = StringField(default='')
gap_severity_value = StringField(default='-1')
kpi_base_search = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
kpi_template_kpi_id = ForeignKey('itsimodels.kpi_threshold_template.KpiThresholdTemplate', default='')
kpi_threshold_template_id = ForeignKey('itsimodels.kpi_threshold_template.KpiThresholdTemplate', default='')
is_filter_entities_to_service = BoolField(default=False, alias='is_service_entity_filter')
is_recommended_time_policies = BoolField(default=False)
is_split_by_entity = BoolField(default=False, alias='is_entity_breakdown')
metric_search_spec = TypeField(MetricSearchSpec, alias='metric')
metric_qualifier = StringField()
recommendation_training_window = StringField(default='-30d')
search = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
search_aggregate = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
search_alert = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
search_alert_earliest = StringField()
search_alert_entities = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
search_buckets = StringField()
search_entities = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
search_occurrences = NumberField()
search_time_compare = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
search_time_series = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
search_time_series_aggregate = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
search_time_series_entities = ForeignKeyMultiEmbeddedStr(refers=None, key_regex=GENERIC_SEARCH_RE)
search_type = StringField(default='adhoc')
service_title = StringField()
threshold_direction = StringField(default='both')
threshold_eval = StringField(default='')
threshold_field = StringField(default='')
time_policies = TypeField(KpiTimePolicies, alias='time_variate_thresholds_specification')
trending_ad = DictField()
type = StringField(default='kpis_primary')
tz_offset = StringField()
unit = StringField(default='')
use_time_policies = BoolField(default=False, alias='time_variate_thresholds')
urgency = NumberField()
was_recommendation_modified = BoolField(default=False)
class EntityRuleItem(ChildModel):
field = StringField()
field_type = StringField()
rule_type = StringField()
value = StringField()
class EntityRule(ChildModel):
rule_condition = StringField()
rule_items = ListField(EntityRuleItem)
class ServiceDependency(ChildModel):
kpis_depending_on = ForeignKeyList('itsimodels.service.Kpi')
overloaded_urgencies = DictField()
service_id = ForeignKey('itsimodels.service.Service', alias='serviceid')
class ServiceTags(ChildModel):
tags = ListField(string_types)
template_tags = ListField(string_types)
class Service(BaseModel):
key = StringField(required=True, alias='_key')
algorithms = DictField()
title = StringField(required=True)
description = StringField(default='')
enabled = BoolField(default=False)
entity_rules = ListField(EntityRule)
kpis = ListField(Kpi)
services_depends_on = ListField(ServiceDependency)
services_depending_on_me = ListField(ServiceDependency)
service_template_id = ForeignKey('itsimodels.service_template.ServiceTemplate', alias='base_service_template_id')
service_tags = TypeField(ServiceTags)
team_id = ForeignKey('itsimodels.team.Team', default=GLOBAL_TEAM_KEY, alias='sec_grp')