def load_supported_services(context: LoggingContext) -> List[GCPService]: activation_yaml = read_activation_yaml() activation_config_per_service = get_activation_config_per_service( activation_yaml) feature_sets_from_activation_config = load_activated_feature_sets( context, activation_yaml) working_directory = os.path.dirname(os.path.realpath(__file__)) config_directory = os.path.join(working_directory, "config") config_files = [ file for file in listdir(config_directory) if isfile(os.path.join(config_directory, file)) and is_yaml_file(file) ] services = [] for file in config_files: config_file_path = os.path.join(config_directory, file) try: with open(config_file_path, encoding="utf-8") as config_file: config_yaml = yaml.safe_load(config_file) technology_name = extract_technology_name(config_yaml) for service_yaml in config_yaml.get("gcp", {}): service_name = service_yaml.get("service", "None") featureSet = service_yaml.get("featureSet", "default_metrics") # If whitelist of services exists and current service is not present in it, skip # If whitelist is empty - no services explicitly selected - load all available whitelist_exists = feature_sets_from_activation_config.__len__( ) > 0 if f'{service_name}/{featureSet}' in feature_sets_from_activation_config or not whitelist_exists: activation = activation_config_per_service.get( service_name, {}) services.append( GCPService(tech_name=technology_name, **service_yaml, activation=activation)) except Exception as error: context.log( f"Failed to load configuration file: '{config_file_path}'. Error details: {error}" ) continue featureSets = [ f"{service.name}/{service.feature_set}" for service in services ] if featureSets: context.log("Selected feature sets: " + ", ".join(featureSets)) else: context.log("Empty feature sets. GCP services not monitored.") return services
async def execute(self) -> ExtensionsFetchResult: extension_name_to_version_dict = await self._get_extensions_dict_from_dynatrace_cluster() activation_yaml = read_activation_yaml() activation_config_per_service = get_activation_config_per_service(activation_yaml) feature_sets_from_activation_config = load_activated_feature_sets(self.logging_context, activation_yaml) configured_services = [] not_configured_services = [] for extension_name, extension_version in extension_name_to_version_dict.items(): configured_services_for_extension, not_configured_services_for_extension = await self._get_service_configs_for_extension( extension_name, extension_version, activation_config_per_service, feature_sets_from_activation_config) configured_services.extend(configured_services_for_extension) not_configured_services.extend(not_configured_services_for_extension) if not_configured_services: self.logging_context.log(f"Following services from extensions are filtered out, because not found in 'gcpServicesYaml': {not_configured_services}") return ExtensionsFetchResult(services=configured_services)
def test_filtering_missing_configs(monkeypatch: MonkeyPatchFixture): monkeypatch.setenv("ACTIVATION_CONFIG", "{services: []}") activation_yaml = read_activation_yaml() config = load_activated_feature_sets(context, activation_yaml) assert len(config) == 0
def test_services_with_an_empty_feature_sets(monkeypatch: MonkeyPatchFixture): monkeypatch.setenv("ACTIVATION_CONFIG", ACTIVATION_CONFIG_WITH_EMPTY_FEATURE_SET) activation_yaml = read_activation_yaml() activated_service_names = load_activated_feature_sets(context, activation_yaml) assert_that(activated_service_names).contains_only("services_to_be_activated/default_metrics", "services_to_be_activated/test")
def test_filtering_config_loaded(monkeypatch: MonkeyPatchFixture): monkeypatch.setenv("ACTIVATION_CONFIG", ACTIVATION_CONFIG) activation_yaml = read_activation_yaml() activated_service_names = load_activated_feature_sets(context, activation_yaml) assert_that(activated_service_names).contains_only("pubsub_subscription/default_metrics", "pubsub_subscription/test", "pubsub_snapshot/default_metrics")