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.
162 lines
5.7 KiB
162 lines
5.7 KiB
# KV Store collection name
|
|
KV_AT_TIME_POLICIES_COLLECTION = "kpis_at_configurations"
|
|
|
|
# HTTP error messages
|
|
MISSING_JOB_ID = "Missing job_id."
|
|
METHOD_NOT_ALLOWED = "Method not allowed."
|
|
JOB_ID_NOT_FOUND = "job_id not found"
|
|
|
|
# Constants for Column and Field Names
|
|
ITSI_KPI_ID = 'itsi_kpi_id'
|
|
ITSI_SERVICE_ID = 'itsi_service_id'
|
|
KPI_AT_CONFIGURATION = "kpi_at_configurations"
|
|
RECOMMENDATION_FLAG = 'Recommendation Flag'
|
|
ALGORITHM = 'Algorithm'
|
|
CRON_EXPRESSION = 'Cron Expression'
|
|
DURATION = 'Duration'
|
|
THRESHOLD_DIRECTION = 'Threshold Direction'
|
|
THRESHOLDS = 'Thresholds'
|
|
MEAN = 'Mean'
|
|
STD = 'Std'
|
|
SENSITIVITY = 'Sensitivity'
|
|
SCORE = 'Score'
|
|
CONFIDENCE = 'Confidence'
|
|
TIME_POLICY_DESCRIPTION = 'Time Policy Description'
|
|
ANALYSIS_WINDOW = 'Analysis Window'
|
|
USE_STATIC = 'Use Static'
|
|
NON_NEGATIVE = "Non_negative"
|
|
SENSITIVITY_LEVEL = "Sensitivity Level"
|
|
|
|
ALL_DATA_RECEIVED = "all_data_received"
|
|
CONSTANT_KPI = 'CONSTANT_KPI'
|
|
ENTITY_KEY = 'entity_key'
|
|
ENTITY_TITLE = 'entity_title'
|
|
ALERT_VALUE = 'alert_value'
|
|
ENTITY_AT_CONFIGURATIONS = 'entity_at_configurations'
|
|
NA = 'N/A'
|
|
|
|
FIELD_TO_SNAKE_CASE_DICT = {
|
|
ITSI_SERVICE_ID: 'itsi_service_id',
|
|
ITSI_KPI_ID: 'itsi_kpi_id',
|
|
# ITSI_SERVICE_ID is required in this dictionary for validation/formatting
|
|
# when reading the data from the KVStore.
|
|
ITSI_SERVICE_ID: "itsi_service_id",
|
|
RECOMMENDATION_FLAG: 'recommendation_flag',
|
|
ALGORITHM: 'algorithm',
|
|
CRON_EXPRESSION: 'cron_expression',
|
|
DURATION: 'duration',
|
|
THRESHOLD_DIRECTION: 'threshold_direction',
|
|
THRESHOLDS: 'thresholds',
|
|
MEAN: 'mean',
|
|
STD: 'std',
|
|
SENSITIVITY: 'sensitivity',
|
|
SCORE: 'score',
|
|
CONFIDENCE: 'confidence',
|
|
TIME_POLICY_DESCRIPTION: 'time_policy_description',
|
|
ANALYSIS_WINDOW: 'analysis_window',
|
|
USE_STATIC: 'use_static',
|
|
NON_NEGATIVE: "non_negative",
|
|
SENSITIVITY_LEVEL: "sensitivity_level",
|
|
ENTITY_KEY: ENTITY_KEY,
|
|
ENTITY_TITLE: ENTITY_TITLE,
|
|
}
|
|
|
|
# This endpoint is only for entity level, though there is "kpi" in its name.
|
|
ITSI_ENTITIES_AT_RESULTS_POST_URI = "itoa_interface/kpi_entity_threshold_recommendations"
|
|
# This endpoint is for kpi level
|
|
ITSI_KPI_RESULTS_POST_URI = "itoa_interface/kpi_threshold_recommendations"
|
|
|
|
# post Api response status
|
|
class PostReturnStatusConstants:
|
|
"""
|
|
A class containing constants that represent the status of posting,
|
|
used for checking return status of sending results to ITSI
|
|
"""
|
|
SUCCESS = "success"
|
|
FAILURE = "failure"
|
|
EXCEPTION = "exception"
|
|
|
|
# Constants for testing
|
|
FLOAT_NUMBER_TOLERANCE = 0.1
|
|
FLOAT_PERCENTAGE_TOLERANCE = 0.1
|
|
FLOAT_ABS_TOLERANCE = 1e-6
|
|
|
|
## Sensitivity Adjustment
|
|
class SensitivityLevelConstants:
|
|
"""
|
|
A class containing constants that represent the status of posting,
|
|
used for checking return status of sending alerts to ITSI
|
|
"""
|
|
LOW = "0"
|
|
MEDIUM = "1"
|
|
HIGH = "2"
|
|
|
|
class FilterConfig:
|
|
"""
|
|
A configuration class for defining filter parameters.
|
|
|
|
Attributes:
|
|
percentile_lower_threshold (float): The lower threshold for filtering data,
|
|
represented as a percentile (0-100).
|
|
percentile_upper_threshold (float): The upper threshold for filtering data,
|
|
represented as a percentile (0-100),
|
|
should be larger than `percentile_lower_thres`
|
|
variation_unit_multiplier (float): A multiplier that adjusts the sensitivity of the variation unit,
|
|
larger value means less sensitivity.
|
|
"""
|
|
# Predefined configurations for different sensitivity levels.
|
|
FILTER_CONFIGS = {
|
|
SensitivityLevelConstants.LOW: {
|
|
"percentile_lower_threshold": 0,
|
|
"percentile_upper_threshold": 100,
|
|
# With larger variation_unit_multiplier, the threshold boundary will be wider and result in a lower sensitivity.
|
|
# Infinite multiplier means use all the data, no filter.
|
|
"variation_unit_multiplier": float("inf")
|
|
},
|
|
SensitivityLevelConstants.MEDIUM: {
|
|
"percentile_lower_threshold": 15,
|
|
"percentile_upper_threshold": 85,
|
|
"variation_unit_multiplier": 2.5
|
|
},
|
|
SensitivityLevelConstants.HIGH: {
|
|
"percentile_lower_threshold": 25,
|
|
"percentile_upper_threshold": 75,
|
|
"variation_unit_multiplier": 1.5
|
|
}
|
|
}
|
|
|
|
def __init__(self, percentile_lower_threshold, percentile_upper_threshold, variation_unit_multiplier):
|
|
self.percentile_lower_threshold = percentile_lower_threshold
|
|
self.percentile_upper_threshold = percentile_upper_threshold
|
|
self.variation_unit_multiplier = variation_unit_multiplier
|
|
|
|
@classmethod
|
|
def getSensitivityConfig(cls, sensitivity_level):
|
|
"""
|
|
Retrieve the filter configuration for a given sensitivity level.
|
|
|
|
Args:
|
|
level (str): The sensitivity level choose from
|
|
SensitivityLevelConstants.LOW,
|
|
SensitivityLevelConstants.MEDIUM,
|
|
SensitivityLevelConstants.HIGH.
|
|
|
|
Returns:
|
|
FilterConfig: An instance of the FilterConfig class for the specified level.
|
|
"""
|
|
# if sensitivity level is not in range, we return default value "low"
|
|
config = cls.FILTER_CONFIGS.get(sensitivity_level, cls.FILTER_CONFIGS[SensitivityLevelConstants.LOW])
|
|
return cls(
|
|
config['percentile_lower_threshold'],
|
|
config['percentile_upper_threshold'],
|
|
config['variation_unit_multiplier']
|
|
)
|
|
|
|
CONSTANT_TIME_SERIES_THRESHOLD = 0.01
|
|
CONSTANT_TIMESERIES_SENSITIVITY_DICT = {
|
|
SensitivityLevelConstants.LOW: 0.05,
|
|
SensitivityLevelConstants.MEDIUM: 0.03,
|
|
SensitivityLevelConstants.HIGH: 0.01
|
|
}
|
|
|