From 91603ddd4711b641d529806904b4f72d99b33750 Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez Date: Fri, 31 Jan 2025 18:56:42 -0600 Subject: [PATCH] fixes for observability to be autonomous --- kork-actuator/kork-actuator.gradle | 12 ++ .../config/ObservabilityConfiguration.java | 136 ++++++++++++++++++ .../datadog/DataDogRegistryConfig.java | 4 +- .../datadog/DataDogRegistrySupplier.java | 10 +- .../filters/ArmoryRecommendedFilters.java | 4 +- .../observability/filters/Filters.java | 18 ++- .../model/ArmoryEnvironmentMetadata.java | 2 +- .../model/MeterRegistryConfig.java | 2 +- .../observability/model/MetricsConfig.java | 2 +- .../model/MetricsDatadogConfig.java | 2 +- .../model/MetricsIntegrationConfig.java | 2 +- .../model/MetricsNewRelicConfig.java | 2 +- .../model/MetricsPrometheusConfig.java | 2 +- .../ObservabilityConfigurationProperites.java | 2 +- .../newrelic/NewRelicRegistryConfig.java | 8 +- .../newrelic/NewRelicRegistrySupplier.java | 12 +- .../MutatedMicrometerCollector.java | 12 +- .../prometheus/MutatedPrometheusCounter.java | 2 +- .../MutatedPrometheusDistributionSummary.java | 11 +- .../MutatedPrometheusHistogram.java | 2 +- .../MutatedPrometheusMeterRegistry.java | 17 ++- .../prometheus/MutatedPrometheusTimer.java | 11 +- .../prometheus/PrometheusRegistryConfig.java | 4 +- .../PrometheusRegistrySupplier.java | 9 +- .../prometheus}/PrometheusScrapeEndpoint.java | 2 +- .../AddDefaultTagsRegistryCustomizer.java | 6 +- .../AddFiltersRegistryCustomizer.java | 6 +- .../ArmoryObservabilityCompositeRegistry.java | 4 +- .../registry/RegistryConfigWrapper.java | 4 +- .../registry/RegistryCustomizer.java | 4 +- .../service/MeterFilterService.java | 6 +- .../observability/service/TagsService.java | 10 +- .../version/SpringPackageVersionResolver.java | 52 +++++++ .../version/VersionResolver.java | 27 ++++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + kork-core/kork-core.gradle | 12 -- .../config/PrometheusSecurityConfig.java | 53 ------- .../ObservabilityPrometheusConfig.java | 7 +- 38 files changed, 343 insertions(+), 139 deletions(-) create mode 100644 kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/config/ObservabilityConfiguration.java rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/datadog/DataDogRegistryConfig.java (91%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/datadog/DataDogRegistrySupplier.java (82%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/filters/ArmoryRecommendedFilters.java (87%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/filters/Filters.java (63%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/model/ArmoryEnvironmentMetadata.java (92%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/model/MeterRegistryConfig.java (93%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/model/MetricsConfig.java (96%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/model/MetricsDatadogConfig.java (95%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/model/MetricsIntegrationConfig.java (91%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/model/MetricsNewRelicConfig.java (95%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/model/MetricsPrometheusConfig.java (93%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/model/ObservabilityConfigurationProperites.java (93%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/newrelic/NewRelicRegistryConfig.java (86%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/newrelic/NewRelicRegistrySupplier.java (86%) rename {kork-core/src/main/java/io/micrometer => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability}/prometheus/MutatedMicrometerCollector.java (94%) rename {kork-core/src/main/java/io/micrometer => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability}/prometheus/MutatedPrometheusCounter.java (96%) rename {kork-core/src/main/java/io/micrometer => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability}/prometheus/MutatedPrometheusDistributionSummary.java (87%) rename {kork-core/src/main/java/io/micrometer => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability}/prometheus/MutatedPrometheusHistogram.java (98%) rename {kork-core/src/main/java/io/micrometer => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability}/prometheus/MutatedPrometheusMeterRegistry.java (96%) rename {kork-core/src/main/java/io/micrometer => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability}/prometheus/MutatedPrometheusTimer.java (87%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/prometheus/PrometheusRegistryConfig.java (89%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/prometheus/PrometheusRegistrySupplier.java (84%) rename {kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus}/PrometheusScrapeEndpoint.java (97%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/registry/AddDefaultTagsRegistryCustomizer.java (85%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/registry/AddFiltersRegistryCustomizer.java (85%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/registry/ArmoryObservabilityCompositeRegistry.java (96%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/registry/RegistryConfigWrapper.java (85%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/registry/RegistryCustomizer.java (86%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/service/MeterFilterService.java (87%) rename {kork-core/src/main/java/com/netflix/spinnaker/kork => kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator}/observability/service/TagsService.java (93%) create mode 100644 kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/version/SpringPackageVersionResolver.java create mode 100644 kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/version/VersionResolver.java delete mode 100644 kork-web/src/main/groovy/com/netflix/spinnaker/config/PrometheusSecurityConfig.java diff --git a/kork-actuator/kork-actuator.gradle b/kork-actuator/kork-actuator.gradle index 0f441b752..ba1136f0c 100644 --- a/kork-actuator/kork-actuator.gradle +++ b/kork-actuator/kork-actuator.gradle @@ -17,6 +17,7 @@ apply plugin: "java-library" apply from: "$rootDir/gradle/kotlin-test.gradle" +apply from: "$rootDir/gradle/lombok.gradle" dependencies { compileOnly(platform(project(":spinnaker-dependencies"))) @@ -25,9 +26,20 @@ dependencies { implementation "org.springframework.boot:spring-boot-starter-security" implementation "org.springframework.boot:spring-boot-starter-web" compileOnly "org.springframework.boot:spring-boot-starter-actuator" + compileOnly "org.projectlombok:lombok" testImplementation "org.spockframework:spock-core" testImplementation "org.spockframework:spock-spring" testImplementation "org.springframework.boot:spring-boot-starter-test" testRuntimeOnly "cglib:cglib-nodep" testRuntimeOnly "org.objenesis:objenesis" + + implementation("io.micrometer:micrometer-registry-prometheus") { + exclude group: 'io.micrometer', module: 'micrometer-core' + } + implementation('io.micrometer:micrometer-registry-datadog') { + exclude group: 'io.micrometer', module: 'micrometer-core' + } + implementation('com.newrelic.telemetry:micrometer-registry-new-relic:0.5.0') { + exclude group: 'io.micrometer', module: 'micrometer-core' + } } diff --git a/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/config/ObservabilityConfiguration.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/config/ObservabilityConfiguration.java new file mode 100644 index 000000000..9c7ce044d --- /dev/null +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/config/ObservabilityConfiguration.java @@ -0,0 +1,136 @@ +/* + * Copyright 2025 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.netflix.spinnaker.kork.actuator.observability.config; + +import io.micrometer.core.instrument.Clock; +import io.prometheus.client.CollectorRegistry; +import java.util.Collection; +import java.util.function.Supplier; +import lombok.extern.slf4j.Slf4j; +import com.netflix.spinnaker.kork.actuator.observability.datadog.DataDogRegistrySupplier; +import com.netflix.spinnaker.kork.actuator.observability.model.ObservabilityConfigurationProperites; +import com.netflix.spinnaker.kork.actuator.observability.newrelic.NewRelicRegistrySupplier; +import com.netflix.spinnaker.kork.actuator.observability.prometheus.PrometheusRegistrySupplier; +import com.netflix.spinnaker.kork.actuator.observability.prometheus.PrometheusScrapeEndpoint; +import com.netflix.spinnaker.kork.actuator.observability.registry.AddDefaultTagsRegistryCustomizer; +import com.netflix.spinnaker.kork.actuator.observability.registry.AddFiltersRegistryCustomizer; +import com.netflix.spinnaker.kork.actuator.observability.registry.ArmoryObservabilityCompositeRegistry; +import com.netflix.spinnaker.kork.actuator.observability.registry.RegistryConfigWrapper; +import com.netflix.spinnaker.kork.actuator.observability.registry.RegistryCustomizer; +import com.netflix.spinnaker.kork.actuator.observability.service.MeterFilterService; +import com.netflix.spinnaker.kork.actuator.observability.service.TagsService; +import com.netflix.spinnaker.kork.actuator.observability.version.SpringPackageVersionResolver; +import com.netflix.spinnaker.kork.actuator.observability.version.VersionResolver; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; + +@Slf4j +@Configuration +@Order(Ordered.HIGHEST_PRECEDENCE + 66) +@ConditionalOnProperty(name = "observability.enabled", havingValue = "true") +public class ObservabilityConfiguration { + + public ObservabilityConfiguration() { + log.info("Observability enabled"); + } + + @Bean + public ObservabilityConfigurationProperites observabilityConfigurationProperites() { + return new ObservabilityConfigurationProperites(); + } + + @Bean + @ConditionalOnMissingBean(VersionResolver.class) + public static VersionResolver versionResolver(ApplicationContext applicationContext) { + return new SpringPackageVersionResolver(applicationContext); + } + + @Bean + public TagsService tagsService( + ObservabilityConfigurationProperites observabilityConfigurationProperites, + VersionResolver versionResolver, + @Value("${spring.application.name:#{null}}") String springInjectedApplicationName) { + return new TagsService( + observabilityConfigurationProperites, versionResolver, springInjectedApplicationName); + } + + @Bean + public AddDefaultTagsRegistryCustomizer addDefaultTagsRegistryCustomizer( + TagsService tagsService) { + return new AddDefaultTagsRegistryCustomizer(tagsService); + } + + @Bean + public MeterFilterService meterFilterService() { + return new MeterFilterService(); + } + + @Bean + public AddFiltersRegistryCustomizer addFiltersRegistryCustomizer( + MeterFilterService meterFilterService) { + return new AddFiltersRegistryCustomizer(meterFilterService); + } + + @Bean + public CollectorRegistry collectorRegistry() { + return new CollectorRegistry(); + } + + @Bean + public PrometheusRegistrySupplier prometheusRegistrySupplier( + ObservabilityConfigurationProperites pluginConfig, + CollectorRegistry collectorRegistry, + Clock clock) { + return new PrometheusRegistrySupplier(pluginConfig, collectorRegistry, clock); + } + + @Bean + @Primary + public ArmoryObservabilityCompositeRegistry armoryObservabilityCompositeRegistry( + Clock clock, + Collection> registrySuppliers, + Collection meterRegistryCustomizers) { + return new ArmoryObservabilityCompositeRegistry( + clock, registrySuppliers, meterRegistryCustomizers); + } + + @Bean + public PrometheusScrapeEndpoint prometheusScrapeEndpoint(CollectorRegistry collectorRegistry) + { + return new PrometheusScrapeEndpoint(collectorRegistry); + } + + @Bean + public DataDogRegistrySupplier dataDogRegistrySupplier( + @NotNull ObservabilityConfigurationProperites pluginConfig) { + return new DataDogRegistrySupplier(pluginConfig); + } + + @Bean + public NewRelicRegistrySupplier newRelicRegistrySupplier( + ObservabilityConfigurationProperites pluginConfig, TagsService tagsService) { + return new NewRelicRegistrySupplier(pluginConfig, tagsService); + } +} diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/datadog/DataDogRegistryConfig.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/datadog/DataDogRegistryConfig.java similarity index 91% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/datadog/DataDogRegistryConfig.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/datadog/DataDogRegistryConfig.java index 3530caea6..80dbf498c 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/datadog/DataDogRegistryConfig.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/datadog/DataDogRegistryConfig.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.datadog; +package com.netflix.spinnaker.kork.actuator.observability.datadog; -import com.netflix.spinnaker.kork.observability.model.MetricsDatadogConfig; import java.util.Optional; +import com.netflix.spinnaker.kork.actuator.observability.model.MetricsDatadogConfig; public class DataDogRegistryConfig implements io.micrometer.datadog.DatadogConfig { private final MetricsDatadogConfig datadogConfig; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/datadog/DataDogRegistrySupplier.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/datadog/DataDogRegistrySupplier.java similarity index 82% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/datadog/DataDogRegistrySupplier.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/datadog/DataDogRegistrySupplier.java index 5db57fa7e..5429b0060 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/datadog/DataDogRegistrySupplier.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/datadog/DataDogRegistrySupplier.java @@ -14,19 +14,17 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.datadog; +package com.netflix.spinnaker.kork.actuator.observability.datadog; -import com.netflix.spinnaker.kork.observability.model.MetricsDatadogConfig; -import com.netflix.spinnaker.kork.observability.model.ObservabilityConfigurationProperites; -import com.netflix.spinnaker.kork.observability.registry.RegistryConfigWrapper; import io.micrometer.core.ipc.http.HttpUrlConnectionSender; import io.micrometer.datadog.DatadogMeterRegistry; import java.time.Duration; import java.util.function.Supplier; +import com.netflix.spinnaker.kork.actuator.observability.model.MetricsDatadogConfig; +import com.netflix.spinnaker.kork.actuator.observability.model.ObservabilityConfigurationProperites; +import com.netflix.spinnaker.kork.actuator.observability.registry.RegistryConfigWrapper; import org.jetbrains.annotations.NotNull; -import org.springframework.context.annotation.Configuration; -@Configuration public class DataDogRegistrySupplier implements Supplier { private final MetricsDatadogConfig datadogConfig; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/filters/ArmoryRecommendedFilters.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/filters/ArmoryRecommendedFilters.java similarity index 87% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/filters/ArmoryRecommendedFilters.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/filters/ArmoryRecommendedFilters.java index bb4de11b7..48b099b9e 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/filters/ArmoryRecommendedFilters.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/filters/ArmoryRecommendedFilters.java @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.filters; +package com.netflix.spinnaker.kork.actuator.observability.filters; -import static com.netflix.spinnaker.kork.observability.filters.Filters.DENY_CONTROLLER_INVOCATIONS_METRICS; +import static com.netflix.spinnaker.kork.actuator.observability.filters.Filters.DENY_CONTROLLER_INVOCATIONS_METRICS; import io.micrometer.core.instrument.config.MeterFilter; import java.util.List; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/filters/Filters.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/filters/Filters.java similarity index 63% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/filters/Filters.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/filters/Filters.java index 4544d2e35..867a682b9 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/filters/Filters.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/filters/Filters.java @@ -1,4 +1,20 @@ -package com.netflix.spinnaker.kork.observability.filters; +/* + * Copyright 2025 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.netflix.spinnaker.kork.actuator.observability.filters; import io.micrometer.core.instrument.config.MeterFilter; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/ArmoryEnvironmentMetadata.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/ArmoryEnvironmentMetadata.java similarity index 92% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/ArmoryEnvironmentMetadata.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/ArmoryEnvironmentMetadata.java index ab598d7a9..dd96802cf 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/ArmoryEnvironmentMetadata.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/ArmoryEnvironmentMetadata.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.model; +package com.netflix.spinnaker.kork.actuator.observability.model; import lombok.Builder; import lombok.Data; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MeterRegistryConfig.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MeterRegistryConfig.java similarity index 93% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MeterRegistryConfig.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MeterRegistryConfig.java index 3d5410f6f..ede74dab2 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MeterRegistryConfig.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MeterRegistryConfig.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.model; +package com.netflix.spinnaker.kork.actuator.observability.model; import java.util.List; import lombok.AllArgsConstructor; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsConfig.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsConfig.java similarity index 96% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsConfig.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsConfig.java index ed5b3de45..590866ecb 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsConfig.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsConfig.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.model; +package com.netflix.spinnaker.kork.actuator.observability.model; import java.util.Map; import lombok.Data; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsDatadogConfig.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsDatadogConfig.java similarity index 95% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsDatadogConfig.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsDatadogConfig.java index b5f0b7208..825a3545a 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsDatadogConfig.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsDatadogConfig.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.model; +package com.netflix.spinnaker.kork.actuator.observability.model; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsIntegrationConfig.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsIntegrationConfig.java similarity index 91% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsIntegrationConfig.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsIntegrationConfig.java index 08872b6ab..f7218561c 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsIntegrationConfig.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsIntegrationConfig.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.model; +package com.netflix.spinnaker.kork.actuator.observability.model; import lombok.Data; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsNewRelicConfig.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsNewRelicConfig.java similarity index 95% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsNewRelicConfig.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsNewRelicConfig.java index 35f5d2ec5..c5b07f8c4 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsNewRelicConfig.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsNewRelicConfig.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.model; +package com.netflix.spinnaker.kork.actuator.observability.model; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsPrometheusConfig.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsPrometheusConfig.java similarity index 93% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsPrometheusConfig.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsPrometheusConfig.java index 0b8bfb108..0525e4139 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/MetricsPrometheusConfig.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/MetricsPrometheusConfig.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.model; +package com.netflix.spinnaker.kork.actuator.observability.model; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/ObservabilityConfigurationProperites.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/ObservabilityConfigurationProperites.java similarity index 93% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/ObservabilityConfigurationProperites.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/ObservabilityConfigurationProperites.java index 1ec483715..cebc407b7 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/model/ObservabilityConfigurationProperites.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/model/ObservabilityConfigurationProperites.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.model; +package com.netflix.spinnaker.kork.actuator.observability.model; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/newrelic/NewRelicRegistryConfig.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/newrelic/NewRelicRegistryConfig.java similarity index 86% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/newrelic/NewRelicRegistryConfig.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/newrelic/NewRelicRegistryConfig.java index 0da179ee7..ca19ae719 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/newrelic/NewRelicRegistryConfig.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/newrelic/NewRelicRegistryConfig.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.newrelic; +package com.netflix.spinnaker.kork.actuator.observability.newrelic; -import com.netflix.spinnaker.kork.observability.model.MetricsNewRelicConfig; import java.time.Duration; import java.time.temporal.ChronoUnit; import java.util.Optional; -import org.pf4j.PluginRuntimeException; +import com.netflix.spinnaker.kork.actuator.observability.model.MetricsNewRelicConfig; /** * New Relic config wrapper that sources its config from the Spring Context Plugin Configuration. @@ -43,8 +42,7 @@ public String apiKey() { return Optional.ofNullable(newRelicConfig.getApiKey()) .orElseThrow( () -> - new PluginRuntimeException( - "The New Relic API key is a required plugin config property")); + new RuntimeException("The New Relic API key is a required plugin config property")); } @Override diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/newrelic/NewRelicRegistrySupplier.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/newrelic/NewRelicRegistrySupplier.java similarity index 86% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/newrelic/NewRelicRegistrySupplier.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/newrelic/NewRelicRegistrySupplier.java index c107d9383..68612b0ec 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/newrelic/NewRelicRegistrySupplier.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/newrelic/NewRelicRegistrySupplier.java @@ -14,12 +14,8 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.newrelic; +package com.netflix.spinnaker.kork.actuator.observability.newrelic; -import com.netflix.spinnaker.kork.observability.model.MetricsNewRelicConfig; -import com.netflix.spinnaker.kork.observability.model.ObservabilityConfigurationProperites; -import com.netflix.spinnaker.kork.observability.registry.RegistryConfigWrapper; -import com.netflix.spinnaker.kork.observability.service.TagsService; import io.micrometer.core.ipc.http.HttpUrlConnectionSender; import io.micrometer.newrelic.NewRelicRegistry; import java.net.InetSocketAddress; @@ -28,14 +24,16 @@ import java.util.List; import java.util.concurrent.Executors; import java.util.function.Supplier; -import org.springframework.context.annotation.Configuration; +import com.netflix.spinnaker.kork.actuator.observability.model.MetricsNewRelicConfig; +import com.netflix.spinnaker.kork.actuator.observability.model.ObservabilityConfigurationProperites; +import com.netflix.spinnaker.kork.actuator.observability.registry.RegistryConfigWrapper; +import com.netflix.spinnaker.kork.actuator.observability.service.TagsService; /** * A Supplier bean that can be registered with Spring without providing an actual registry * implementation to confuse Spectator/Micrometer. This Supplier configures a New Relic Micrometer * Registry Instance. */ -@Configuration public class NewRelicRegistrySupplier implements Supplier { protected HttpUrlConnectionSender sender; diff --git a/kork-core/src/main/java/io/micrometer/prometheus/MutatedMicrometerCollector.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedMicrometerCollector.java similarity index 94% rename from kork-core/src/main/java/io/micrometer/prometheus/MutatedMicrometerCollector.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedMicrometerCollector.java index 0c3296121..1177806b0 100644 --- a/kork-core/src/main/java/io/micrometer/prometheus/MutatedMicrometerCollector.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedMicrometerCollector.java @@ -28,15 +28,23 @@ * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ -package io.micrometer.prometheus; +package com.netflix.spinnaker.kork.actuator.observability.prometheus; import static java.util.stream.Collectors.toList; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.config.NamingConvention; +import io.micrometer.prometheus.PrometheusConfig; import io.prometheus.client.Collector; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Stream; diff --git a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusCounter.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusCounter.java similarity index 96% rename from kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusCounter.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusCounter.java index 42df94660..f8c23826a 100644 --- a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusCounter.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusCounter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.micrometer.prometheus; +package com.netflix.spinnaker.kork.actuator.observability.prometheus; import io.micrometer.core.instrument.AbstractMeter; import io.micrometer.core.instrument.Counter; diff --git a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusDistributionSummary.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusDistributionSummary.java similarity index 87% rename from kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusDistributionSummary.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusDistributionSummary.java index a75b83a7f..92c41888c 100644 --- a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusDistributionSummary.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusDistributionSummary.java @@ -14,12 +14,19 @@ * limitations under the License. */ -package io.micrometer.prometheus; +package com.netflix.spinnaker.kork.actuator.observability.prometheus; import io.micrometer.core.instrument.AbstractDistributionSummary; import io.micrometer.core.instrument.Clock; -import io.micrometer.core.instrument.distribution.*; +import io.micrometer.core.instrument.distribution.CountAtBucket; +import io.micrometer.core.instrument.distribution.DistributionStatisticConfig; +import io.micrometer.core.instrument.distribution.FixedBoundaryVictoriaMetricsHistogram; +import io.micrometer.core.instrument.distribution.Histogram; +import io.micrometer.core.instrument.distribution.HistogramSnapshot; +import io.micrometer.core.instrument.distribution.TimeWindowMax; +import io.micrometer.core.instrument.distribution.ValueAtPercentile; import io.micrometer.core.lang.Nullable; +import io.micrometer.prometheus.HistogramFlavor; import io.prometheus.client.exemplars.Exemplar; import io.prometheus.client.exemplars.HistogramExemplarSampler; import java.util.Objects; diff --git a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusHistogram.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusHistogram.java similarity index 98% rename from kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusHistogram.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusHistogram.java index 83ac0082f..f0006a973 100644 --- a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusHistogram.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusHistogram.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.micrometer.prometheus; +package com.netflix.spinnaker.kork.actuator.observability.prometheus; import io.micrometer.core.instrument.Clock; import io.micrometer.core.instrument.distribution.DistributionStatisticConfig; diff --git a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusMeterRegistry.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusMeterRegistry.java similarity index 96% rename from kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusMeterRegistry.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusMeterRegistry.java index e31c555f6..2ebc8b455 100644 --- a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusMeterRegistry.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusMeterRegistry.java @@ -28,12 +28,23 @@ * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ -package io.micrometer.prometheus; +package com.netflix.spinnaker.kork.actuator.observability.prometheus; import static java.util.stream.Collectors.toList; import static java.util.stream.StreamSupport.stream; -import io.micrometer.core.instrument.*; +import io.micrometer.core.instrument.Clock; +import io.micrometer.core.instrument.Counter; +import io.micrometer.core.instrument.DistributionSummary; +import io.micrometer.core.instrument.FunctionCounter; +import io.micrometer.core.instrument.FunctionTimer; +import io.micrometer.core.instrument.Gauge; +import io.micrometer.core.instrument.LongTaskTimer; +import io.micrometer.core.instrument.Measurement; +import io.micrometer.core.instrument.Meter; +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Tag; +import io.micrometer.core.instrument.Timer; import io.micrometer.core.instrument.cumulative.CumulativeFunctionCounter; import io.micrometer.core.instrument.cumulative.CumulativeFunctionTimer; import io.micrometer.core.instrument.distribution.CountAtBucket; @@ -44,6 +55,8 @@ import io.micrometer.core.instrument.internal.DefaultLongTaskTimer; import io.micrometer.core.instrument.internal.DefaultMeter; import io.micrometer.core.lang.Nullable; +import io.micrometer.prometheus.PrometheusConfig; +import io.micrometer.prometheus.PrometheusNamingConvention; import io.prometheus.client.Collector; import io.prometheus.client.CollectorRegistry; import io.prometheus.client.exemplars.ExemplarSampler; diff --git a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusTimer.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusTimer.java similarity index 87% rename from kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusTimer.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusTimer.java index f91988f13..c379d5fe7 100644 --- a/kork-core/src/main/java/io/micrometer/prometheus/MutatedPrometheusTimer.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/MutatedPrometheusTimer.java @@ -14,14 +14,21 @@ * limitations under the License. */ -package io.micrometer.prometheus; +package com.netflix.spinnaker.kork.actuator.observability.prometheus; import io.micrometer.core.instrument.AbstractTimer; import io.micrometer.core.instrument.Clock; -import io.micrometer.core.instrument.distribution.*; +import io.micrometer.core.instrument.distribution.CountAtBucket; +import io.micrometer.core.instrument.distribution.DistributionStatisticConfig; +import io.micrometer.core.instrument.distribution.FixedBoundaryVictoriaMetricsHistogram; +import io.micrometer.core.instrument.distribution.Histogram; +import io.micrometer.core.instrument.distribution.HistogramSnapshot; +import io.micrometer.core.instrument.distribution.TimeWindowMax; +import io.micrometer.core.instrument.distribution.ValueAtPercentile; import io.micrometer.core.instrument.distribution.pause.PauseDetector; import io.micrometer.core.instrument.util.TimeUtils; import io.micrometer.core.lang.Nullable; +import io.micrometer.prometheus.HistogramFlavor; import io.prometheus.client.exemplars.Exemplar; import io.prometheus.client.exemplars.HistogramExemplarSampler; import java.util.Objects; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/prometheus/PrometheusRegistryConfig.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/PrometheusRegistryConfig.java similarity index 89% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/prometheus/PrometheusRegistryConfig.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/PrometheusRegistryConfig.java index 565917e8e..5dbddd45b 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/prometheus/PrometheusRegistryConfig.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/PrometheusRegistryConfig.java @@ -14,11 +14,11 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.prometheus; +package com.netflix.spinnaker.kork.actuator.observability.prometheus; -import com.netflix.spinnaker.kork.observability.model.MetricsPrometheusConfig; import io.micrometer.prometheus.PrometheusConfig; import java.time.Duration; +import com.netflix.spinnaker.kork.actuator.observability.model.MetricsPrometheusConfig; /** * Prometheus config wrapper that sources its config from the Spring Context Plugin Configuration. diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/prometheus/PrometheusRegistrySupplier.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/PrometheusRegistrySupplier.java similarity index 84% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/prometheus/PrometheusRegistrySupplier.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/PrometheusRegistrySupplier.java index fd35528cb..3d4cb0536 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/prometheus/PrometheusRegistrySupplier.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/PrometheusRegistrySupplier.java @@ -14,15 +14,14 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.prometheus; +package com.netflix.spinnaker.kork.actuator.observability.prometheus; -import com.netflix.spinnaker.kork.observability.model.MetricsPrometheusConfig; -import com.netflix.spinnaker.kork.observability.model.ObservabilityConfigurationProperites; -import com.netflix.spinnaker.kork.observability.registry.RegistryConfigWrapper; import io.micrometer.core.instrument.Clock; -import io.micrometer.prometheus.MutatedPrometheusMeterRegistry; import io.prometheus.client.CollectorRegistry; import java.util.function.Supplier; +import com.netflix.spinnaker.kork.actuator.observability.model.MetricsPrometheusConfig; +import com.netflix.spinnaker.kork.actuator.observability.model.ObservabilityConfigurationProperites; +import com.netflix.spinnaker.kork.actuator.observability.registry.RegistryConfigWrapper; /** * Supplier bean so that we don't create an actual bean of the prometheus registry. We do this so diff --git a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers/PrometheusScrapeEndpoint.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/PrometheusScrapeEndpoint.java similarity index 97% rename from kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers/PrometheusScrapeEndpoint.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/PrometheusScrapeEndpoint.java index 94ec857a1..e7d7c6ac4 100644 --- a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers/PrometheusScrapeEndpoint.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/prometheus/PrometheusScrapeEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.web.controllers; +package com.netflix.spinnaker.kork.actuator.observability.prometheus; import io.prometheus.client.Collector; import io.prometheus.client.CollectorRegistry; diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/AddDefaultTagsRegistryCustomizer.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/AddDefaultTagsRegistryCustomizer.java similarity index 85% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/AddDefaultTagsRegistryCustomizer.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/AddDefaultTagsRegistryCustomizer.java index 39da33be4..541322882 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/AddDefaultTagsRegistryCustomizer.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/AddDefaultTagsRegistryCustomizer.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.registry; +package com.netflix.spinnaker.kork.actuator.observability.registry; -import com.netflix.spinnaker.kork.observability.model.MeterRegistryConfig; -import com.netflix.spinnaker.kork.observability.service.TagsService; import io.micrometer.core.instrument.MeterRegistry; import lombok.extern.slf4j.Slf4j; +import com.netflix.spinnaker.kork.actuator.observability.model.MeterRegistryConfig; +import com.netflix.spinnaker.kork.actuator.observability.service.TagsService; import org.springframework.context.annotation.Configuration; @Slf4j diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/AddFiltersRegistryCustomizer.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/AddFiltersRegistryCustomizer.java similarity index 85% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/AddFiltersRegistryCustomizer.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/AddFiltersRegistryCustomizer.java index 035aa43d3..072a198c4 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/AddFiltersRegistryCustomizer.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/AddFiltersRegistryCustomizer.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.registry; +package com.netflix.spinnaker.kork.actuator.observability.registry; -import com.netflix.spinnaker.kork.observability.model.MeterRegistryConfig; -import com.netflix.spinnaker.kork.observability.service.MeterFilterService; import io.micrometer.core.instrument.MeterRegistry; import lombok.extern.slf4j.Slf4j; +import com.netflix.spinnaker.kork.actuator.observability.model.MeterRegistryConfig; +import com.netflix.spinnaker.kork.actuator.observability.service.MeterFilterService; import org.springframework.context.annotation.Configuration; @Slf4j diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/ArmoryObservabilityCompositeRegistry.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/ArmoryObservabilityCompositeRegistry.java similarity index 96% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/ArmoryObservabilityCompositeRegistry.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/ArmoryObservabilityCompositeRegistry.java index 72090a064..8b13760af 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/ArmoryObservabilityCompositeRegistry.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/ArmoryObservabilityCompositeRegistry.java @@ -14,11 +14,10 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.registry; +package com.netflix.spinnaker.kork.actuator.observability.registry; import static java.util.Optional.ofNullable; -import com.netflix.spinnaker.kork.observability.model.MeterRegistryConfig; import io.micrometer.core.instrument.Clock; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.composite.CompositeMeterRegistry; @@ -30,6 +29,7 @@ import java.util.function.Supplier; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; +import com.netflix.spinnaker.kork.actuator.observability.model.MeterRegistryConfig; /** * This is the registry that Micrometer/Spectator will use. It will collect all of the enabled diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/RegistryConfigWrapper.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/RegistryConfigWrapper.java similarity index 85% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/RegistryConfigWrapper.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/RegistryConfigWrapper.java index 45a9c29b4..710509675 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/RegistryConfigWrapper.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/RegistryConfigWrapper.java @@ -14,12 +14,12 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.registry; +package com.netflix.spinnaker.kork.actuator.observability.registry; -import com.netflix.spinnaker.kork.observability.model.MeterRegistryConfig; import io.micrometer.core.instrument.MeterRegistry; import lombok.Builder; import lombok.Data; +import com.netflix.spinnaker.kork.actuator.observability.model.MeterRegistryConfig; @Data @Builder diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/RegistryCustomizer.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/RegistryCustomizer.java similarity index 86% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/RegistryCustomizer.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/RegistryCustomizer.java index c30029316..1790f5253 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/registry/RegistryCustomizer.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/registry/RegistryCustomizer.java @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.registry; +package com.netflix.spinnaker.kork.actuator.observability.registry; -import com.netflix.spinnaker.kork.observability.model.MeterRegistryConfig; import io.micrometer.core.instrument.MeterRegistry; +import com.netflix.spinnaker.kork.actuator.observability.model.MeterRegistryConfig; @FunctionalInterface public interface RegistryCustomizer { diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/service/MeterFilterService.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/service/MeterFilterService.java similarity index 87% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/service/MeterFilterService.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/service/MeterFilterService.java index 1832a4132..c6a1ee49e 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/service/MeterFilterService.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/service/MeterFilterService.java @@ -14,15 +14,15 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.service; +package com.netflix.spinnaker.kork.actuator.observability.service; -import static com.netflix.spinnaker.kork.observability.filters.ArmoryRecommendedFilters.ARMORY_RECOMMENDED_FILTERS; +import static com.netflix.spinnaker.kork.actuator.observability.filters.ArmoryRecommendedFilters.ARMORY_RECOMMENDED_FILTERS; -import com.netflix.spinnaker.kork.observability.model.MeterRegistryConfig; import io.micrometer.core.instrument.config.MeterFilter; import java.util.ArrayList; import java.util.List; import lombok.extern.slf4j.Slf4j; +import com.netflix.spinnaker.kork.actuator.observability.model.MeterRegistryConfig; import org.springframework.util.CollectionUtils; /** diff --git a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/service/TagsService.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/service/TagsService.java similarity index 93% rename from kork-core/src/main/java/com/netflix/spinnaker/kork/observability/service/TagsService.java rename to kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/service/TagsService.java index 143940193..832506d4f 100644 --- a/kork-core/src/main/java/com/netflix/spinnaker/kork/observability/service/TagsService.java +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/service/TagsService.java @@ -14,14 +14,10 @@ * limitations under the License. */ -package com.netflix.spinnaker.kork.observability.service; +package com.netflix.spinnaker.kork.actuator.observability.service; import static java.util.Optional.ofNullable; -import com.netflix.spinnaker.kork.observability.model.ArmoryEnvironmentMetadata; -import com.netflix.spinnaker.kork.observability.model.MetricsConfig; -import com.netflix.spinnaker.kork.observability.model.ObservabilityConfigurationProperites; -import com.netflix.spinnaker.kork.version.VersionResolver; import io.micrometer.core.instrument.Tag; import java.util.HashMap; import java.util.List; @@ -29,6 +25,10 @@ import java.util.Properties; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; +import com.netflix.spinnaker.kork.actuator.observability.model.ArmoryEnvironmentMetadata; +import com.netflix.spinnaker.kork.actuator.observability.model.MetricsConfig; +import com.netflix.spinnaker.kork.actuator.observability.model.ObservabilityConfigurationProperites; +import com.netflix.spinnaker.kork.actuator.observability.version.VersionResolver; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.info.BuildProperties; diff --git a/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/version/SpringPackageVersionResolver.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/version/SpringPackageVersionResolver.java new file mode 100644 index 000000000..10da254e4 --- /dev/null +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/version/SpringPackageVersionResolver.java @@ -0,0 +1,52 @@ +/* + * Copyright 2025 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.netflix.spinnaker.kork.actuator.observability.version; + +import java.util.Map; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import org.springframework.lang.Nullable; + +/** + * Resolves the version by finding the Spring bean annotated with {@link SpringBootApplication} and + * then determining the Implementation-Version attribute from the package. + * + *

See {@link Package#getImplementationVersion()} + */ +public class SpringPackageVersionResolver implements VersionResolver { + + ApplicationContext applicationContext; + + public SpringPackageVersionResolver(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } + + @Nullable + @Override + public String resolve(String serviceName) { + Map annotatedBeans = + applicationContext.getBeansWithAnnotation(SpringBootApplication.class); + return annotatedBeans.isEmpty() + ? null + : annotatedBeans.values().toArray()[0].getClass().getPackage().getImplementationVersion(); + } + + @Override + public int getOrder() { + return 0; + } +} diff --git a/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/version/VersionResolver.java b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/version/VersionResolver.java new file mode 100644 index 000000000..64ecee7f9 --- /dev/null +++ b/kork-actuator/src/main/java/com/netflix/spinnaker/kork/actuator/observability/version/VersionResolver.java @@ -0,0 +1,27 @@ +/* + * Copyright 2025 Netflix, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.netflix.spinnaker.kork.actuator.observability.version; + +import org.springframework.core.Ordered; +import org.springframework.lang.Nullable; + +/** Defines a strategy for resolving a service version. */ +public interface VersionResolver extends Ordered { + + /** Returns a service version, if one could be resolved. */ + @Nullable + String resolve(String serviceName); +} diff --git a/kork-actuator/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/kork-actuator/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 2ec0ba41c..08cfe2ae0 100644 --- a/kork-actuator/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/kork-actuator/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,2 +1,3 @@ com.netflix.spinnaker.kork.actuator.ActuatorEndpointsConfiguration com.netflix.spinnaker.kork.actuator.ResolvedEnvEndpointAutoConfiguration +com.netflix.spinnaker.kork.actuator.observability.config.ObservabilityConfiguration diff --git a/kork-core/kork-core.gradle b/kork-core/kork-core.gradle index a17b56511..08bca1a4e 100644 --- a/kork-core/kork-core.gradle +++ b/kork-core/kork-core.gradle @@ -25,18 +25,6 @@ dependencies { implementation "com.netflix.spectator:spectator-ext-jvm" implementation "com.netflix.spectator:spectator-reg-micrometer" - implementation("io.micrometer:micrometer-registry-prometheus") { - exclude group: 'io.micrometer', module: 'micrometer-core' - } - implementation('io.micrometer:micrometer-registry-datadog') { - exclude group: 'io.micrometer', module: 'micrometer-core' - exclude group: 'org.slf4j', module: 'slf4j-api' - } - implementation('com.newrelic.telemetry:micrometer-registry-new-relic:0.5.0') { - exclude group: 'io.micrometer', module: 'micrometer-core' - exclude group: 'org.slf4j', module: 'slf4j-api' - } - testImplementation project(":kork-test") testImplementation "org.assertj:assertj-core" testImplementation "org.junit.jupiter:junit-jupiter-api" diff --git a/kork-web/src/main/groovy/com/netflix/spinnaker/config/PrometheusSecurityConfig.java b/kork-web/src/main/groovy/com/netflix/spinnaker/config/PrometheusSecurityConfig.java deleted file mode 100644 index e80115b5c..000000000 --- a/kork-web/src/main/groovy/com/netflix/spinnaker/config/PrometheusSecurityConfig.java +++ /dev/null @@ -1,53 +0,0 @@ -/// * -// * Copyright 2025 Netflix, Inc. -// * -// * Licensed under the Apache License, Version 2.0 (the "License"); -// * you may not use this file except in compliance with the License. -// * You may obtain a copy of the License at -// * -// * http://www.apache.org/licenses/LICENSE-2.0 -// * -// * Unless required by applicable law or agreed to in writing, software -// * distributed under the License is distributed on an "AS IS" BASIS, -// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// * See the License for the specific language governing permissions and -// * limitations under the License. -// */ -// -// package com.netflix.spinnaker.config; -// -// import com.netflix.spinnaker.kork.observability.model.PluginConfig; -// import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest; -// import org.springframework.context.annotation.ComponentScan; -// import org.springframework.context.annotation.Configuration; -// import org.springframework.core.Ordered; -// import org.springframework.core.annotation.Order; -// import org.springframework.security.config.annotation.web.builders.HttpSecurity; -// import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -// import -// org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -// -//// To avoid collision with other WebSecurityConfigurerAdapters -// @Order(Ordered.HIGHEST_PRECEDENCE + 27) -// @Configuration -// @EnableWebSecurity -// @ComponentScan({"observability.config.metrics.prometheus"}) -// public class PrometheusSecurityConfig extends WebSecurityConfigurerAdapter { -// -// private final PluginConfig pluginConfig; -// -// public PrometheusSecurityConfig(PluginConfig pluginConfig) { -// this.pluginConfig = pluginConfig; -// } -// -// @Override -// protected void configure(HttpSecurity http) throws Exception { -// if (pluginConfig.getMetrics().getPrometheus().isEnabled()) { -// http.requestMatcher(EndpointRequest.to("aop-prometheus")) -// .authorizeRequests((requests) -> requests.anyRequest().permitAll()); -// } else { -// http.requestMatcher(EndpointRequest.to("aop-prometheus")) -// .authorizeRequests((requests) -> requests.anyRequest().denyAll()); -// } -// } -// } diff --git a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers/ObservabilityPrometheusConfig.java b/kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers/ObservabilityPrometheusConfig.java index 41bb94ce1..cb990c30f 100644 --- a/kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers/ObservabilityPrometheusConfig.java +++ b/kork-web/src/main/java/com/netflix/spinnaker/kork/web/controllers/ObservabilityPrometheusConfig.java @@ -16,12 +16,9 @@ package com.netflix.spinnaker.kork.web.controllers; -import com.netflix.spinnaker.kork.observability.model.ObservabilityConfigurationProperites; -import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @@ -30,7 +27,7 @@ @EnableWebSecurity public class ObservabilityPrometheusConfig extends WebSecurityConfigurerAdapter { - private final ObservabilityConfigurationProperites pluginConfig; + /* private final ObservabilityConfigurationProperites pluginConfig; public ObservabilityPrometheusConfig(ObservabilityConfigurationProperites pluginConfig) { this.pluginConfig = pluginConfig; @@ -45,5 +42,5 @@ protected void configure(HttpSecurity http) throws Exception { http.requestMatcher(EndpointRequest.to("aop-prometheus")) .authorizeRequests((requests) -> requests.anyRequest().denyAll()); } - } + }*/ }