From 9f3dbf417129067a5928b3df903bab07bf71c23b Mon Sep 17 00:00:00 2001 From: Rui Han Date: Fri, 19 Apr 2019 16:49:13 +0800 Subject: [PATCH] Fix byPath promotion gauges --- .../indy/promote/data/PromotionManager.java | 34 ++++++++++++------- .../promote/model/PathsPromoteResult.java | 2 +- .../indy/metrics/IndyMetricsManager.java | 10 +++--- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/addons/promote/common/src/main/java/org/commonjava/indy/promote/data/PromotionManager.java b/addons/promote/common/src/main/java/org/commonjava/indy/promote/data/PromotionManager.java index 6f42b3315e..8356c54cca 100644 --- a/addons/promote/common/src/main/java/org/commonjava/indy/promote/data/PromotionManager.java +++ b/addons/promote/common/src/main/java/org/commonjava/indy/promote/data/PromotionManager.java @@ -15,6 +15,7 @@ */ package org.commonjava.indy.promote.data; +import com.codahale.metrics.Gauge; import org.apache.commons.lang.StringUtils; import org.commonjava.cdi.util.weft.DrainingExecutorCompletionService; import org.commonjava.cdi.util.weft.ExecutorConfig; @@ -59,6 +60,7 @@ import org.slf4j.LoggerFactory; import org.slf4j.MDC; +import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.event.Event; import javax.inject.Inject; @@ -75,6 +77,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -157,10 +160,26 @@ public class PromotionManager @Inject private NotFoundCache nfc; + private final AtomicInteger pathPromotionTotal = new AtomicInteger(); + + private final AtomicInteger pathPromotionCompleted = new AtomicInteger(); + + private final AtomicInteger pathPromotionSkipped = new AtomicInteger(); + protected PromotionManager() { } + @PostConstruct + public void init() + { + Map> gauges = new HashMap<>(); + gauges.put( "total", () -> pathPromotionTotal.get() ); + gauges.put( "completed", () -> pathPromotionCompleted.get() ); + gauges.put( "skipped", () -> pathPromotionSkipped.get() ); + metricsManager.addGauges( this.getClass(), "path.promote.last", gauges ); + } + public PromotionManager( PromotionValidator validator, final ContentManager contentManager, final DownloadManager downloadManager, final StoreDataManager storeManager, Locker byPathTargetLocks, Locker byGroupTargetLocks, @@ -594,18 +613,9 @@ else if ( e instanceof IndyWorkflowException ) private void doPathPromoteMetrics( int total, PathsPromoteResult result ) { - try - { - Map pathPromoteMetrics = new HashMap<>(); - pathPromoteMetrics.put( "total", total ); - pathPromoteMetrics.put( "complete", result.getCompletedPaths().size() ); - pathPromoteMetrics.put( "skipped", result.getSkippedPaths().size() ); - metricsManager.addGauges( this.getClass(), "path.promote", pathPromoteMetrics ); - } - catch ( Throwable e ) - { - logger.warn( "Failed to get path promote files metrics. Reason: {} ", e.getMessage() ); - } + pathPromotionTotal.set( total ); + pathPromotionCompleted.set( result.getCompletedPaths().size() ); + pathPromotionSkipped.set( result.getSkippedPaths().size() ); } private Future submitPathsPromoteRequest( PathsPromoteRequest request, final String baseUrl ) diff --git a/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/PathsPromoteResult.java b/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/PathsPromoteResult.java index 74c01fe846..513a19851b 100644 --- a/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/PathsPromoteResult.java +++ b/addons/promote/model-java/src/main/java/org/commonjava/indy/promote/model/PathsPromoteResult.java @@ -101,7 +101,7 @@ public void setCompletedPaths( final Set completedPaths ) public Set getSkippedPaths() { - return skippedPaths; + return skippedPaths == null ? Collections. emptySet() : skippedPaths; } public void setSkippedPaths( Set skippedPaths ) diff --git a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/IndyMetricsManager.java b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/IndyMetricsManager.java index a5c35788b2..c8e79bee9c 100644 --- a/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/IndyMetricsManager.java +++ b/subsys/metrics/reporter/src/main/java/org/commonjava/indy/metrics/IndyMetricsManager.java @@ -15,6 +15,7 @@ */ package org.commonjava.indy.metrics; +import com.codahale.metrics.Gauge; import com.codahale.metrics.Meter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.Timer; @@ -46,6 +47,7 @@ import static org.commonjava.indy.metrics.IndyMetricsConstants.METER; import static org.commonjava.indy.metrics.IndyMetricsConstants.SKIP_METRIC; import static org.commonjava.indy.metrics.IndyMetricsConstants.TIMER; +import static org.commonjava.indy.metrics.IndyMetricsConstants.getDefaultName; import static org.commonjava.indy.metrics.jvm.IndyJVMInstrumentation.registerJvmMetric; import static org.commonjava.indy.model.core.StoreType.remote; import static org.commonjava.indy.pkg.maven.model.MavenPackageTypeDescriptor.MAVEN_PKG_KEY; @@ -251,12 +253,12 @@ public T wrapWithStandardMetrics( final Supplier method, final Supplier void addGauges( Class className, String method, Map gauges ) + public void addGauges( Class className, String method, Map> gauges ) { - String defaultName = IndyMetricsConstants.getDefaultName( className, method ); - gauges.forEach( ( k, t ) -> { + String defaultName = getDefaultName( className, method ); + gauges.forEach( ( k, v ) -> { String name = IndyMetricsConstants.getName( config.getNodePrefix(), DEFAULT, defaultName, k ); - metricRegistry.gauge( name, () -> () -> t ); + metricRegistry.gauge( name, () -> v ); } ); }