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.

182 lines
7.4 KiB

# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved.
class SuiteContent(object):
"""
This class defines Python data structures of ITSI suite content.
This class is designed to only implement data definition and simple helper methods
to construct, read and maintain these data structures.
Application logic interpreting these data structures should be implemented outside of this class.
"""
_RESTRICTED_SUITE = "standard"
_UNRESTRICTED_SUITE = "plus"
# changing _SUITES might affect the _SUITES_PERMISSIVENESS_ORDER
_SUITES = _RESTRICTED_SUITE, _UNRESTRICTED_SUITE
_SUITES_PERMISSIVENESS_ORDER = _SUITES
FEATURE_itsi_alerts_onboarding = "itsi_alerts_onboarding"
FEATURE_itsi_backup_restore = "itsi_backup_restore"
FEATURE_itsi_content_packs = "itsi_content_packs"
FEATURE_itsi_content_packs_authorship = "itsi_content_packs_authorship"
FEATURE_itsi_cp_service_overview = "itsi_cp_service_overview"
FEATURE_itsi_cp_infra_overview = "itsi_cp_infra_overview"
FEATURE_itsi_custom_threshold_windows = "itsi_custom_threshold_windows"
FEATURE_itsi_data_integration = "itsi_data_integration"
FEATURE_itsi_drift_detection = "itsi_drift_detection_configuration"
FEATURE_itsi_entities = "itsi_entities"
FEATURE_itsi_entity_lifecycle_management = "itsi_entity_lifecycle_management"
FEATURE_itsi_event_analytics = "itsi_event_analytics"
FEATURE_itsi_event_grouping = "itsi_event_grouping"
FEATURE_itsi_deep_dive = "itsi_deep_dive"
FEATURE_itsi_glass_table = "itsi_glass_table"
FEATURE_itsi_health_analytics_console = "itsi_health_analytics_console"
FEATURE_itsi_infrastructure_overview = "itsi_infrastructure_overview"
FEATURE_itsi_maintenance_window = "itsi_maintenance_window"
FEATURE_itsi_predictive_analytics = "itsi_predictive_analytics"
FEATURE_itsi_service_analyzer = "itsi_service_analyzer"
FEATURE_itsi_service_kpi_management = "itsi_service_kpi_management"
FEATURE_itsi_service_monitoring = "itsi_service_monitoring"
FEATURE_itsi_service_sandbox = "itsi_service_sandbox"
FEATURE_itsi_teams = "itsi_teams"
FEATURE_itsi_upgrade_readiness_precheck = "itsi_upgrade_readiness_precheck"
_FEATURES = {
FEATURE_itsi_alerts_onboarding,
FEATURE_itsi_backup_restore,
FEATURE_itsi_content_packs,
FEATURE_itsi_content_packs_authorship,
FEATURE_itsi_cp_service_overview,
FEATURE_itsi_cp_infra_overview,
FEATURE_itsi_custom_threshold_windows,
FEATURE_itsi_data_integration,
FEATURE_itsi_deep_dive,
FEATURE_itsi_drift_detection,
FEATURE_itsi_entities,
FEATURE_itsi_entity_lifecycle_management,
FEATURE_itsi_event_analytics,
FEATURE_itsi_event_grouping,
FEATURE_itsi_glass_table,
FEATURE_itsi_health_analytics_console,
FEATURE_itsi_infrastructure_overview,
FEATURE_itsi_maintenance_window,
FEATURE_itsi_predictive_analytics,
FEATURE_itsi_service_analyzer,
FEATURE_itsi_service_kpi_management,
FEATURE_itsi_service_monitoring,
FEATURE_itsi_service_sandbox,
FEATURE_itsi_teams,
FEATURE_itsi_upgrade_readiness_precheck
}
_SUITE_TO_FEATURES = {
_RESTRICTED_SUITE: {
FEATURE_itsi_alerts_onboarding: False,
FEATURE_itsi_backup_restore: True,
FEATURE_itsi_content_packs: True,
FEATURE_itsi_content_packs_authorship: False,
FEATURE_itsi_cp_service_overview: False,
FEATURE_itsi_cp_infra_overview: True,
FEATURE_itsi_custom_threshold_windows: False,
FEATURE_itsi_data_integration: True,
FEATURE_itsi_deep_dive: False,
FEATURE_itsi_drift_detection: False,
FEATURE_itsi_entities: True,
FEATURE_itsi_entity_lifecycle_management: False,
FEATURE_itsi_event_analytics: False,
FEATURE_itsi_event_grouping: False,
FEATURE_itsi_glass_table: False,
FEATURE_itsi_health_analytics_console: False,
FEATURE_itsi_infrastructure_overview: True,
FEATURE_itsi_maintenance_window: False,
FEATURE_itsi_predictive_analytics: False,
FEATURE_itsi_service_analyzer: False,
FEATURE_itsi_service_kpi_management: False,
FEATURE_itsi_service_monitoring: False,
FEATURE_itsi_service_sandbox: False,
FEATURE_itsi_teams: False,
FEATURE_itsi_upgrade_readiness_precheck: False
},
_UNRESTRICTED_SUITE: {
FEATURE_itsi_alerts_onboarding: True,
FEATURE_itsi_backup_restore: True,
FEATURE_itsi_content_packs: True,
FEATURE_itsi_content_packs_authorship: True,
FEATURE_itsi_cp_service_overview: True,
FEATURE_itsi_cp_infra_overview: True,
FEATURE_itsi_custom_threshold_windows: True,
FEATURE_itsi_data_integration: True,
FEATURE_itsi_deep_dive: True,
FEATURE_itsi_drift_detection: True,
FEATURE_itsi_entities: True,
FEATURE_itsi_entity_lifecycle_management: True,
FEATURE_itsi_event_analytics: True,
FEATURE_itsi_event_grouping: True,
FEATURE_itsi_glass_table: True,
FEATURE_itsi_health_analytics_console: True,
FEATURE_itsi_infrastructure_overview: True,
FEATURE_itsi_maintenance_window: True,
FEATURE_itsi_predictive_analytics: True,
FEATURE_itsi_service_analyzer: True,
FEATURE_itsi_service_kpi_management: True,
FEATURE_itsi_service_monitoring: True,
FEATURE_itsi_service_sandbox: True,
FEATURE_itsi_teams: True,
FEATURE_itsi_upgrade_readiness_precheck: True
}
}
@staticmethod
def verify_suite_to_features_definition():
for key, val in SuiteContent._SUITE_TO_FEATURES.items():
assert set(val.keys()) == SuiteContent._FEATURES
assert key in SuiteContent._SUITES
@staticmethod
def get_features_for_suite(suite_name):
"""
Returns features and whether they are enabled or not for a particular ITSI suite
@type: str
@param suite_name: suite name
@rtype: dict
@return: dict of this form: {feature_name1: <boolean>, feature_name2: <boolean>,...,feature_nameN: enabled}
"""
assert SuiteContent.is_known_suite(suite_name)
return SuiteContent._SUITE_TO_FEATURES.get(suite_name)
@staticmethod
def least_permissible_suite():
return SuiteContent.get_suite_by_permissiveness_level(0)
@staticmethod
def most_permissible_suite():
return SuiteContent._SUITES_PERMISSIVENESS_ORDER[len(SuiteContent._SUITES_PERMISSIVENESS_ORDER) - 1]
@staticmethod
def is_known_suite(suite):
return suite in SuiteContent._SUITES
@staticmethod
def get_suite_permissiveness_level(suite):
assert SuiteContent.is_known_suite(suite)
return SuiteContent._SUITES_PERMISSIVENESS_ORDER.index(suite)
@staticmethod
def most_restrictive_suite_level():
return SuiteContent.get_suite_permissiveness_level(SuiteContent._RESTRICTED_SUITE)
@staticmethod
def get_suite_by_permissiveness_level(level):
return SuiteContent._SUITES_PERMISSIVENESS_ORDER[level]
@staticmethod
def features():
return SuiteContent._FEATURES
SuiteContent.verify_suite_to_features_definition()