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.

76 lines
2.7 KiB

# Copyright (C) 2005-2025 Splunk Inc. All Rights Reserved.
import sys
import json
from splunk.clilib.bundle_paths import make_splunkhome_path
sys.path.append(make_splunkhome_path(['etc', 'apps', 'SA-ITOA', 'bin']))
sys.path.append(make_splunkhome_path(['etc', 'apps', 'SA-ITOA', 'lib']))
sys.path.append(make_splunkhome_path(['etc', 'apps', 'SA-ITOA', 'lib', 'SA_ITOA_app_common']))
import itsi_path
from ITOA.setup_logging import getLogger
from ITOA.controller_utils import HTTPError
logger = getLogger()
from ITOA.itoa_config import get_supported_objects
from itsi.health_services.health_services_provider import Provider
from ITOA.controller_utils import ITOAError, handle_json_in_splunkd, block_during_migration
from base_splunkd_rest import BaseSplunkdRest
logger.debug("Setup health provider controller ...")
def path_validate(f) :
def wrapper (self, *args, **kwargs) :
if len (self.pathParts) != 3 :
raise HTTPError(
status=404,
message='{} arguments provided'.format('Insufficient' if len (self.pathParts) < 4 else 'Too many'))
return f (self, *args, **kwargs)
return wrapper
class health_services(BaseSplunkdRest) :
@block_during_migration
@handle_json_in_splunkd
@path_validate
def handle_POST (self) :
try :
provider = Provider (self.sessionKey, logger)
if self.pathParts[2] == 'get_health_score' :
severity_list = json.loads (self.args.get ('severity_urgency_list'))
output = provider.calculate_score (severity_list)
threshold_settings = provider.threshold_settings
# Remove info
for name in list(threshold_settings.keys()):
if name == "info":
del threshold_settings[name]
output['data']['severity_summary'] = provider.threshold_settings
self.response.write (self.render_json (output))
elif self.pathParts[2] == 'get_health_range' :
output = provider.get_min_max_score_for_status (self.args.get ('health_status'))
self.response.write (self.render_json (output))
elif self.pathParts[2] == 'convert_score_to_status' :
output = provider.get_score_to_status (self.args.get ('health_score'))
self.response.write (self.render_json(output))
else :
pass
except Exception as e:
logger.exception(e)
raise
@block_during_migration
@path_validate
def handle_GET (self) :
'''
Function only exists to test pointing a browser at the endpoint
'''
self.response.write ('')