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.
66 lines
3.1 KiB
66 lines
3.1 KiB
# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved.
|
|
|
|
from ITOA.itoa_exceptions import ItoaValidationError
|
|
from ITOA.itoa_object import ItoaObject, CRUDMethodTypes
|
|
from ITOA.setup_logging import logger
|
|
|
|
|
|
class ItsiDriftDetection(ItoaObject):
|
|
"""
|
|
Implements ITSI drift detection templates (for use with the drift detection feature)
|
|
"""
|
|
collection_name = "itsi_drift_detection_template"
|
|
REQUIRED_FIELDS = ["aggregation_function", "aggregation_span", "lookback_period", "threshold_direction",
|
|
"tolerance_in_percent"]
|
|
|
|
def __init__(self, session_key, current_user_name):
|
|
super(ItsiDriftDetection, self).__init__(session_key, current_user_name, "drift_detection_template",
|
|
collection_name=self.collection_name)
|
|
|
|
def do_object_validation(self, owner, objects, validate_name=True, dupname_tag=None, transaction_id=None,
|
|
skip_local_failure=False, ignore_same_key=False):
|
|
"""
|
|
See ItoaObject.do_object_validation()
|
|
"""
|
|
aggregation_function_values = set(["avg", "max", "min", "sum"])
|
|
threshold_values = set(["up", "down", "both"])
|
|
for object in objects:
|
|
for field in self.REQUIRED_FIELDS:
|
|
if object.get(field) is None:
|
|
raise ItoaValidationError(message="Required field %s missing" % field, logger=logger)
|
|
if object["aggregation_function"] not in aggregation_function_values:
|
|
raise ItoaValidationError(
|
|
message="Invalid aggregation_function value: %s" % object["aggregation_function"], logger=logger,
|
|
)
|
|
if object["threshold_direction"] not in threshold_values:
|
|
raise ItoaValidationError(
|
|
message="Invalid threshold value: %s" % object["threshold_direction"], logger=logger,
|
|
)
|
|
|
|
return super(ItsiDriftDetection, self).do_object_validation(
|
|
owner, objects, validate_name=validate_name, dupname_tag=dupname_tag, transaction_id=transaction_id,
|
|
skip_local_failure=skip_local_failure, ignore_same_key=ignore_same_key,
|
|
)
|
|
|
|
def do_additional_setup(self, owner, objects, req_source="unknown", method=CRUDMethodTypes.METHOD_UPSERT,
|
|
transaction_id=None, skip_local_failure=False, **kwargs):
|
|
"""
|
|
See ItoaObject.identify_dependencies()
|
|
"""
|
|
for object in objects:
|
|
object["tolerance_in_percent"] = int(object["tolerance_in_percent"])
|
|
|
|
def identify_dependencies(self, owner, objects, method, req_source="unknown", transaction_id=None):
|
|
"""
|
|
See ItoaObject.identify_dependencies()
|
|
"""
|
|
refresh_jobs = []
|
|
if method == CRUDMethodTypes.METHOD_DELETE:
|
|
change_type = "delete_drift_detection_template_from_service"
|
|
for object in objects:
|
|
change = self.get_refresh_job_meta_data(
|
|
change_type, object["_key"], self.object_type, transaction_id=transaction_id,
|
|
)
|
|
refresh_jobs.append(change)
|
|
return len(refresh_jobs) > 0, refresh_jobs
|