Exemple #1
0
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
Exemple #2
0
    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")