You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2025/10/15 07:04:54 UTC
(syncope) 03/03: [SYNCOPE-1916] CXF server metrics
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ò <il...@apache.org>
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 -->