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.
78 lines
3.1 KiB
78 lines
3.1 KiB
# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved.
|
|
import json
|
|
|
|
from itsi_py3 import _
|
|
from ITOA.itoa_object import ItoaObject, CRUDMethodTypes
|
|
import ITOA.itoa_common as utils
|
|
from ITOA.setup_logging import logger
|
|
from itsi.objects.itsi_kpi_threshold_template import ItsiKpiThresholdTemplate
|
|
from itsi.objects.itsi_kpi import ItsiKpi
|
|
|
|
class ItsiKpiTemplate(ItoaObject):
|
|
'''
|
|
Implements ITSI KPI Template
|
|
'''
|
|
|
|
log_prefix = '[ITSI KPI Template] '
|
|
collection_name = 'itsi_services'
|
|
|
|
def __init__(self, session_key, current_user_name):
|
|
super(ItsiKpiTemplate, self).__init__(
|
|
session_key, current_user_name, 'kpi_template', collection_name=self.collection_name,
|
|
is_securable_object=True)
|
|
|
|
def validate_kpi_time_policies(self, kpi):
|
|
# Assume KPI already validate to be valid JSON
|
|
|
|
if not 'time_variate_thresholds_specification' in kpi:
|
|
kpi['time_variate_thresholds_specification'] = {}
|
|
|
|
itsi_kpi_threshold_template = ItsiKpiThresholdTemplate(
|
|
self.session_key,
|
|
self.current_user_name)
|
|
|
|
itsi_kpi_threshold_template.validate_time_policies(kpi['time_variate_thresholds_specification'])
|
|
|
|
def validate_kpi_templates(self, objects):
|
|
"""
|
|
Validate the following kpi_template specific variables:
|
|
- "description" is a mandatory field, data type is a string
|
|
- "kpis" is a mandatory field, data type is an array, at least 1 element in the kpis list
|
|
"""
|
|
|
|
itsi_kpi = ItsiKpi(
|
|
self.session_key,
|
|
self.current_user_name)
|
|
|
|
for json_data in objects:
|
|
if not utils.is_valid_str(json_data.get('description', None)):
|
|
self.raise_error_bad_validation(logger, _('There is no description specified for object_type: %s. ' \
|
|
'Provide some description for this KPI template.') % self.object_type)
|
|
|
|
kpis = json_data.get('kpis', [])
|
|
|
|
if utils.is_valid_str(kpis):
|
|
json_data['kpis'] = json.loads(kpis)
|
|
kpis = json_data['kpis']
|
|
|
|
if not utils.is_valid_list(kpis):
|
|
self.raise_error_bad_validation(
|
|
logger,
|
|
_('KPIs seem invalid. Expected list, found {0}.').format(type(kpis))
|
|
)
|
|
|
|
if len(kpis) == 0:
|
|
self.raise_error_bad_validation(logger, _('Need at least one KPI defined in the KPI template.'))
|
|
|
|
for kpi in kpis:
|
|
if not utils.is_valid_str(kpi.get('kpi_template_kpi_id', None)):
|
|
# Populate the field if it does not exist
|
|
template_kpi_id = kpi.get('title')
|
|
kpi['kpi_template_kpi_id'] = "itsi_" + template_kpi_id.replace(" ", "_").lower()
|
|
itsi_kpi.validate_kpi_basic_structure(kpi)
|
|
self.validate_kpi_time_policies(kpi)
|
|
|
|
def do_additional_setup(self, owner, objects, req_source = 'unknown', method=CRUDMethodTypes.METHOD_UPSERT, transaction_id=None, skip_local_failure=False):
|
|
# Assume json_data already validated as list of dicts
|
|
self.validate_kpi_templates(objects)
|