This is an automated email from the ASF dual-hosted git repository. ilgrosso pushed a commit to branch 4_0_X in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 7a169796fa7def7044f53fd90ea2fbdd283c915e Author: Francesco Chicchiriccò <[email protected]> AuthorDate: Wed Oct 15 09:04:42 2025 +0200 [SYNCOPE-1916] CXF server metrics --- .../core/rest/cxf/IdRepoRESTCXFContext.java | 5 +++-- core/metrics-starter/pom.xml | 5 +++++ .../syncope/core/starter/MetricsContext.java | 23 ++++++++++++++++++++++ pom.xml | 5 +++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/IdRepoRESTCXFContext.java b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/IdRepoRESTCXFContext.java index ebe7ed979b..ed422f422f 100644 --- a/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/IdRepoRESTCXFContext.java +++ b/core/idrepo/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/IdRepoRESTCXFContext.java @@ -29,6 +29,7 @@ import java.util.Map; import java.util.Set; import org.apache.cxf.Bus; import org.apache.cxf.endpoint.Server; +import org.apache.cxf.feature.Feature; import org.apache.cxf.jaxrs.ext.ContextProvider; import org.apache.cxf.jaxrs.ext.search.SearchContext; import org.apache.cxf.jaxrs.ext.search.SearchContextImpl; @@ -300,7 +301,7 @@ public class IdRepoRESTCXFContext { final GZIPInInterceptor gzipInInterceptor, final GZIPOutInterceptor gzipOutInterceptor, final ThreadLocalCleanupOutInterceptor threadLocalCleanupOutInterceptor, - final OpenApiFeature openapiFeature, + final List<Feature> features, final RestServiceExceptionMapper restServiceExceptionMapper, final Bus bus) { @@ -331,7 +332,7 @@ public class IdRepoRESTCXFContext { restContainer.setOutInterceptors(List.of(gzipOutInterceptor, threadLocalCleanupOutInterceptor)); - restContainer.setFeatures(List.of(openapiFeature)); + restContainer.setFeatures(features); return restContainer.create(); } diff --git a/core/metrics-starter/pom.xml b/core/metrics-starter/pom.xml index f72bbd153b..ce3765b806 100644 --- a/core/metrics-starter/pom.xml +++ b/core/metrics-starter/pom.xml @@ -44,6 +44,11 @@ under the License. <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-features-metrics</artifactId> + </dependency> + <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-core</artifactId> diff --git a/core/metrics-starter/src/main/java/org/apache/syncope/core/starter/MetricsContext.java b/core/metrics-starter/src/main/java/org/apache/syncope/core/starter/MetricsContext.java index f7720ada02..5d8165f40c 100644 --- a/core/metrics-starter/src/main/java/org/apache/syncope/core/starter/MetricsContext.java +++ b/core/metrics-starter/src/main/java/org/apache/syncope/core/starter/MetricsContext.java @@ -20,6 +20,16 @@ package org.apache.syncope.core.starter; import io.micrometer.core.instrument.MeterRegistry; import java.util.List; +import org.apache.cxf.metrics.MetricsFeature; +import org.apache.cxf.metrics.MetricsProvider; +import org.apache.cxf.metrics.micrometer.MicrometerMetricsProperties; +import org.apache.cxf.metrics.micrometer.MicrometerMetricsProvider; +import org.apache.cxf.metrics.micrometer.provider.DefaultExceptionClassProvider; +import org.apache.cxf.metrics.micrometer.provider.DefaultTimedAnnotationProvider; +import org.apache.cxf.metrics.micrometer.provider.StandardTags; +import org.apache.cxf.metrics.micrometer.provider.StandardTagsProvider; +import org.apache.cxf.metrics.micrometer.provider.jaxrs.JaxrsOperationTagsCustomizer; +import org.apache.cxf.metrics.micrometer.provider.jaxrs.JaxrsTags; import org.apache.syncope.common.keymaster.client.api.ConfParamOps; import org.apache.syncope.core.persistence.api.EncryptorManager; import org.apache.syncope.core.persistence.api.attrvalue.PlainAttrValidationManager; @@ -58,6 +68,19 @@ import org.springframework.core.task.AsyncTaskExecutor; @Configuration(proxyBeanMethods = false) public class MetricsContext { + @ConditionalOnMissingBean + @Bean + public MetricsFeature metricsFeature(final MeterRegistry meterRegistry) { + MetricsProvider metricsProvider = new MicrometerMetricsProvider( + meterRegistry, + new StandardTagsProvider(new DefaultExceptionClassProvider(), new StandardTags()), + List.of(new JaxrsOperationTagsCustomizer(new JaxrsTags())), + new DefaultTimedAnnotationProvider(), + new MicrometerMetricsProperties()); + + return new MetricsFeature(metricsProvider); + } + @ConditionalOnMissingBean(name = "instrumentedAuthDataAccessor") @Bean(name = { "authDataAccessor", "instrumentedAuthDataAccessor" }) public AuthDataAccessor instrumentedAuthDataAccessor( diff --git a/pom.xml b/pom.xml index 963fc9719b..506fcba8ac 100644 --- a/pom.xml +++ b/pom.xml @@ -602,6 +602,11 @@ under the License. <artifactId>cxf-rt-features-logging</artifactId> <version>${cxf.version}</version> </dependency> + <dependency> + <groupId>org.apache.cxf</groupId> + <artifactId>cxf-rt-features-metrics</artifactId> + <version>${cxf.version}</version> + </dependency> <!-- /CXF --> <!-- Swagger -->
