# 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: , feature_name2: ,...,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()