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
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')
|