From c8fbdd8a66769cd3b7288e995b5c829007c04524 Mon Sep 17 00:00:00 2001 From: David Chan Date: Fri, 10 Jun 2022 15:27:45 -0400 Subject: [PATCH 1/8] Remove scope appending from MetricsMetadata --- .../io/smallrye/metrics/setup/MetricsMetadata.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java b/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java index 370d198e..fc1eeb9c 100644 --- a/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java +++ b/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java @@ -39,8 +39,7 @@ public static List registerMetrics(MetricRegistry registry, MetricReso registry.counter(metadata, tags); if (registry instanceof LegacyMetricRegistryAdapter) { //add this CDI MetricID into MetricRegistry's MetricID list.... - MetricID metricID = new MetricID(metadata.getName(), - appendScopeTags(tags, (LegacyMetricRegistryAdapter) registry)); + MetricID metricID = new MetricID(metadata.getName()); metricIDs.add(metricID); //Some list in MetricRegistry that maps the CDI element, metricID and metric type @@ -57,8 +56,7 @@ public static List registerMetrics(MetricRegistry registry, MetricReso Tag[] tags = parseTagsAsArray(t.tags()); registry.timer(metadata, tags); if (registry instanceof LegacyMetricRegistryAdapter) { - MetricID metricID = new MetricID(metadata.getName(), - appendScopeTags(tags, (LegacyMetricRegistryAdapter) registry)); + MetricID metricID = new MetricID(metadata.getName()); metricIDs.add(metricID); ((LegacyMetricRegistryAdapter) registry).getMemberToMetricMappings().addMetric(element, metricID, MetricType.TIMER); @@ -75,9 +73,4 @@ public static Metadata getMetadata(Object origin, String name, String unit, Stri .withDisplayName(displayName).build(); return new OriginAndMetadata(origin, metadata); } - - private static Tag[] appendScopeTags(Tag[] tags, LegacyMetricRegistryAdapter adapter) { - return Stream.concat(Arrays.stream(tags), Arrays.stream(adapter.scopeTagsLegacy())).toArray(Tag[]::new); - } - } From 801a718b2f8271e4af224207148b0945f1b9e1bd Mon Sep 17 00:00:00 2001 From: David Chan Date: Fri, 10 Jun 2022 15:29:55 -0400 Subject: [PATCH 2/8] ThreadLocals while regsitering/retrieving Gauge in GaugeAdapter and modify LegacyMetricRegistryAdapter to pass metadata for metadata pramed reg/ret for gauge --- .../java/io/smallrye/metrics/legacyapi/GaugeAdapter.java | 7 +++++++ .../metrics/legacyapi/LegacyMetricRegistryAdapter.java | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/implementation/src/main/java/io/smallrye/metrics/legacyapi/GaugeAdapter.java b/implementation/src/main/java/io/smallrye/metrics/legacyapi/GaugeAdapter.java index 2e9c3888..342ebd45 100644 --- a/implementation/src/main/java/io/smallrye/metrics/legacyapi/GaugeAdapter.java +++ b/implementation/src/main/java/io/smallrye/metrics/legacyapi/GaugeAdapter.java @@ -9,6 +9,7 @@ import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; +import io.smallrye.metrics.MetricRegistries; interface GaugeAdapter extends Gauge, MeterHolder { @@ -26,12 +27,14 @@ static class DoubleFunctionGauge implements GaugeAdapter { } public GaugeAdapter register(MpMetadata metadata, MetricDescriptor metricInfo, MeterRegistry registry) { + MetricRegistries.MP_APP_METER_REG_ACCESS.set(true); gauge = io.micrometer.core.instrument.Gauge.builder(metricInfo.name(), obj, f) .description(metadata.getDescription()) .tags(metricInfo.tags()) .baseUnit(metadata.getUnit()) .strongReference(true) .register(registry); + MetricRegistries.MP_APP_METER_REG_ACCESS.set(false); return this; } @@ -63,12 +66,14 @@ static class FunctionGauge implements GaugeAdapter { } public GaugeAdapter register(MpMetadata metadata, MetricDescriptor metricInfo, MeterRegistry registry) { + MetricRegistries.MP_APP_METER_REG_ACCESS.set(true); gauge = io.micrometer.core.instrument.Gauge.builder(metricInfo.name(), obj, obj -> f.apply(obj).doubleValue()) .description(metadata.getDescription()) .tags(metricInfo.tags()) .baseUnit(metadata.getUnit()) .strongReference(true) .register(registry); + MetricRegistries.MP_APP_METER_REG_ACCESS.set(false); return this; } @@ -99,11 +104,13 @@ static class NumberSupplierGauge implements GaugeAdapter { @Override public GaugeAdapter register(MpMetadata metadata, MetricDescriptor metricInfo, MeterRegistry registry) { if (gauge == null || metadata.cleanDirtyMetadata()) { + MetricRegistries.MP_APP_METER_REG_ACCESS.set(true); gauge = io.micrometer.core.instrument.Gauge.builder(metricInfo.name(), (Supplier) supplier) .description(metadata.getDescription()) .tags(metricInfo.tags()) .baseUnit(metadata.getUnit()) .strongReference(true).register(registry); + MetricRegistries.MP_APP_METER_REG_ACCESS.set(false); } return this; diff --git a/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricRegistryAdapter.java b/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricRegistryAdapter.java index 60c5f6f2..c02504aa 100644 --- a/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricRegistryAdapter.java +++ b/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricRegistryAdapter.java @@ -384,7 +384,7 @@ public Gauge gauge(MetricID metricID, T o, Function Gauge gauge(Metadata metadata, T o, Function f, Tag... tags) { String name = metadata.getName(); - return internalGauge(internalGetMetadata(name, MetricType.GAUGE), + return internalGauge(internalGetMetadata(metadata, MetricType.GAUGE), new MetricDescriptor(name, withAppTags(tags)), o, f); } @@ -425,7 +425,7 @@ public Gauge gauge(MetricID metricID, Supplier f) { @Override public Gauge gauge(Metadata metadata, Supplier f, Tag... tags) { String name = metadata.getName(); - return internalGauge(internalGetMetadata(name, MetricType.GAUGE), + return internalGauge(internalGetMetadata(metadata, MetricType.GAUGE), new MetricDescriptor(name, withAppTags(tags)), f); } From 9b018d3a80fe00ed10a5e765ae31f8d4ea65c8f6 Mon Sep 17 00:00:00 2001 From: David Chan Date: Fri, 10 Jun 2022 15:33:24 -0400 Subject: [PATCH 3/8] include quantiles/percentiles -- to be configurable in future --- .../io/smallrye/metrics/legacyapi/HistogramAdapter.java | 9 +++++++-- .../java/io/smallrye/metrics/legacyapi/TimerAdapter.java | 7 ++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/implementation/src/main/java/io/smallrye/metrics/legacyapi/HistogramAdapter.java b/implementation/src/main/java/io/smallrye/metrics/legacyapi/HistogramAdapter.java index 061faa33..8f492d65 100644 --- a/implementation/src/main/java/io/smallrye/metrics/legacyapi/HistogramAdapter.java +++ b/implementation/src/main/java/io/smallrye/metrics/legacyapi/HistogramAdapter.java @@ -15,8 +15,13 @@ class HistogramAdapter implements Histogram, MeterHolder { HistogramAdapter register(MpMetadata metadata, MetricDescriptor metricInfo, MeterRegistry registry) { MetricRegistries.MP_APP_METER_REG_ACCESS.set(true); if (summary == null || metadata.cleanDirtyMetadata()) { - summary = DistributionSummary.builder(metricInfo.name()).description(metadata.getDescription()) - .baseUnit(metadata.getUnit()).tags(metricInfo.tags()).register(registry); + summary = DistributionSummary.builder(metricInfo.name()) + .description(metadata.getDescription()) + .baseUnit(metadata.getUnit()) + .tags(metricInfo.tags()) + .publishPercentiles(0.5, 0.75, 0.95, 0.98, 0.99, 0.999) + .percentilePrecision(5) //from 0 - 5 , more precision == more memory usage + .register(registry); } MetricRegistries.MP_APP_METER_REG_ACCESS.set(false); return this; diff --git a/implementation/src/main/java/io/smallrye/metrics/legacyapi/TimerAdapter.java b/implementation/src/main/java/io/smallrye/metrics/legacyapi/TimerAdapter.java index 4b38c5f5..c34ff61a 100644 --- a/implementation/src/main/java/io/smallrye/metrics/legacyapi/TimerAdapter.java +++ b/implementation/src/main/java/io/smallrye/metrics/legacyapi/TimerAdapter.java @@ -28,7 +28,12 @@ class TimerAdapter implements org.eclipse.microprofile.metrics.Timer, MeterHolde public TimerAdapter register(MpMetadata metadata, MetricDescriptor descriptor) { MetricRegistries.MP_APP_METER_REG_ACCESS.set(true); if (timer == null || metadata.cleanDirtyMetadata()) { - timer = Timer.builder(descriptor.name()).description(metadata.getDescription()).tags(descriptor.tags()) + timer = Timer + .builder(descriptor.name()) + .description(metadata.getDescription()) + .tags(descriptor.tags()) + .publishPercentiles(0.5, 0.75, 0.95, 0.98, 0.99, 0.999) + .percentilePrecision(5) //from 0 - 5 , more precision == more memory usage .register(registry); } MetricRegistries.MP_APP_METER_REG_ACCESS.set(false); From f9fe71ae84273f7fcb9195c51e592a79656a8f7c Mon Sep 17 00:00:00 2001 From: David Chan Date: Sun, 12 Jun 2022 15:59:27 -0400 Subject: [PATCH 4/8] change back to 5.0.0-SNAPSHOT --- api/pom.xml | 2 +- coverage/pom.xml | 2 +- implementation/pom.xml | 2 +- pom.xml | 2 +- release/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/pom.xml b/api/pom.xml index 10c0c590..b3632430 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -3,7 +3,7 @@ smallrye-metrics-parent io.smallrye - 5.0.1-SNAPSHOT + 5.0.0-SNAPSHOT 4.0.0 diff --git a/coverage/pom.xml b/coverage/pom.xml index d822f093..01aa3f6b 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -6,7 +6,7 @@ io.smallrye smallrye-metrics-parent - 5.0.1-SNAPSHOT + 5.0.0-SNAPSHOT smallrye-metrics-coverage diff --git a/implementation/pom.xml b/implementation/pom.xml index aded5739..68fda634 100644 --- a/implementation/pom.xml +++ b/implementation/pom.xml @@ -10,7 +10,7 @@ io.smallrye smallrye-metrics-parent - 5.0.1-SNAPSHOT + 5.0.0-SNAPSHOT ../pom.xml diff --git a/pom.xml b/pom.xml index 6f6a59f2..f4d27706 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,7 @@ smallrye-metrics-parent - 5.0.1-SNAPSHOT + 5.0.0-SNAPSHOT pom SmallRye: MicroProfile Metrics Parent diff --git a/release/pom.xml b/release/pom.xml index 08c4726b..f5dd40cb 100644 --- a/release/pom.xml +++ b/release/pom.xml @@ -5,7 +5,7 @@ io.smallrye smallrye-metrics-parent - 5.0.1-SNAPSHOT + 5.0.0-SNAPSHOT smallrye-metrics-release From 30b5facab500e5bf5fe2a623bd4fbf8f1a108692 Mon Sep 17 00:00:00 2001 From: David Chan Date: Mon, 13 Jun 2022 13:14:35 -0400 Subject: [PATCH 5/8] Update impl to remove references of ConcurrentGauge, SimpleTimer and Meter metric types, see MP Metrics PR #664, TODO: verify JaxrsFilter works --- .../adapter/cdi/CDIAnnotationInfo.java | 39 ----- .../jaxrs/JaxRsMetricsServletFilter.java | 8 +- .../LegacyMetricRegistryAdapter.java | 146 ------------------ .../legacyapi/LegacyMetricsExtension.java | 7 +- .../metrics/legacyapi/TimerAdapter.java | 31 +--- .../interceptors/MetricResolver.java | 15 -- 6 files changed, 8 insertions(+), 238 deletions(-) diff --git a/implementation/src/main/java/io/smallrye/metrics/elementdesc/adapter/cdi/CDIAnnotationInfo.java b/implementation/src/main/java/io/smallrye/metrics/elementdesc/adapter/cdi/CDIAnnotationInfo.java index 1370f29d..b9599df9 100644 --- a/implementation/src/main/java/io/smallrye/metrics/elementdesc/adapter/cdi/CDIAnnotationInfo.java +++ b/implementation/src/main/java/io/smallrye/metrics/elementdesc/adapter/cdi/CDIAnnotationInfo.java @@ -2,11 +2,8 @@ import java.lang.annotation.Annotation; -import org.eclipse.microprofile.metrics.annotation.ConcurrentGauge; import org.eclipse.microprofile.metrics.annotation.Counted; import org.eclipse.microprofile.metrics.annotation.Gauge; -import org.eclipse.microprofile.metrics.annotation.Metered; -import org.eclipse.microprofile.metrics.annotation.SimplyTimed; import org.eclipse.microprofile.metrics.annotation.Timed; import io.smallrye.metrics.SmallRyeMetricsMessages; @@ -24,16 +21,10 @@ public class CDIAnnotationInfo implements AnnotationInfo { public String name() { if (annotation instanceof Counted) { return ((Counted) annotation).name(); - } else if (annotation instanceof ConcurrentGauge) { - return ((ConcurrentGauge) annotation).name(); } else if (annotation instanceof Gauge) { return ((Gauge) annotation).name(); - } else if (annotation instanceof Metered) { - return ((Metered) annotation).name(); } else if (annotation instanceof Timed) { return ((Timed) annotation).name(); - } else if (annotation instanceof SimplyTimed) { - return ((SimplyTimed) annotation).name(); } else { throw new IllegalArgumentException("Unknown metric annotation type " + annotation.annotationType()); } @@ -43,16 +34,10 @@ public String name() { public boolean absolute() { if (annotation instanceof Counted) { return ((Counted) annotation).absolute(); - } else if (annotation instanceof ConcurrentGauge) { - return ((ConcurrentGauge) annotation).absolute(); } else if (annotation instanceof Gauge) { return ((Gauge) annotation).absolute(); - } else if (annotation instanceof Metered) { - return ((Metered) annotation).absolute(); } else if (annotation instanceof Timed) { return ((Timed) annotation).absolute(); - } else if (annotation instanceof SimplyTimed) { - return ((SimplyTimed) annotation).absolute(); } else { throw SmallRyeMetricsMessages.msg.unknownMetricAnnotationType(annotation.annotationType()); } @@ -62,16 +47,10 @@ public boolean absolute() { public String[] tags() { if (annotation instanceof Counted) { return ((Counted) annotation).tags(); - } else if (annotation instanceof ConcurrentGauge) { - return ((ConcurrentGauge) annotation).tags(); } else if (annotation instanceof Gauge) { return ((Gauge) annotation).tags(); - } else if (annotation instanceof Metered) { - return ((Metered) annotation).tags(); } else if (annotation instanceof Timed) { return ((Timed) annotation).tags(); - } else if (annotation instanceof SimplyTimed) { - return ((SimplyTimed) annotation).tags(); } else { throw SmallRyeMetricsMessages.msg.unknownMetricAnnotationType(annotation.annotationType()); } @@ -81,16 +60,10 @@ public String[] tags() { public String unit() { if (annotation instanceof Counted) { return ((Counted) annotation).unit(); - } else if (annotation instanceof ConcurrentGauge) { - return ((ConcurrentGauge) annotation).unit(); } else if (annotation instanceof Gauge) { return ((Gauge) annotation).unit(); - } else if (annotation instanceof Metered) { - return ((Metered) annotation).unit(); } else if (annotation instanceof Timed) { return ((Timed) annotation).unit(); - } else if (annotation instanceof SimplyTimed) { - return ((SimplyTimed) annotation).unit(); } else { throw SmallRyeMetricsMessages.msg.unknownMetricAnnotationType(annotation.annotationType()); } @@ -100,16 +73,10 @@ public String unit() { public String description() { if (annotation instanceof Counted) { return ((Counted) annotation).description(); - } else if (annotation instanceof ConcurrentGauge) { - return ((ConcurrentGauge) annotation).description(); } else if (annotation instanceof Gauge) { return ((Gauge) annotation).description(); - } else if (annotation instanceof Metered) { - return ((Metered) annotation).description(); } else if (annotation instanceof Timed) { return ((Timed) annotation).description(); - } else if (annotation instanceof SimplyTimed) { - return ((SimplyTimed) annotation).description(); } else { throw SmallRyeMetricsMessages.msg.unknownMetricAnnotationType(annotation.annotationType()); } @@ -119,16 +86,10 @@ public String description() { public String displayName() { if (annotation instanceof Counted) { return ((Counted) annotation).displayName(); - } else if (annotation instanceof ConcurrentGauge) { - return ((ConcurrentGauge) annotation).displayName(); } else if (annotation instanceof Gauge) { return ((Gauge) annotation).displayName(); - } else if (annotation instanceof Metered) { - return ((Metered) annotation).displayName(); } else if (annotation instanceof Timed) { return ((Timed) annotation).displayName(); - } else if (annotation instanceof SimplyTimed) { - return ((SimplyTimed) annotation).displayName(); } else { throw SmallRyeMetricsMessages.msg.unknownMetricAnnotationType(annotation.annotationType()); } diff --git a/implementation/src/main/java/io/smallrye/metrics/jaxrs/JaxRsMetricsServletFilter.java b/implementation/src/main/java/io/smallrye/metrics/jaxrs/JaxRsMetricsServletFilter.java index a2fa58b4..69ed4d7f 100644 --- a/implementation/src/main/java/io/smallrye/metrics/jaxrs/JaxRsMetricsServletFilter.java +++ b/implementation/src/main/java/io/smallrye/metrics/jaxrs/JaxRsMetricsServletFilter.java @@ -79,10 +79,11 @@ private void update(boolean success, long startTimestamp, MetricID metricID) { } } + //TODO: Verify it works properly. private void updateAfterSuccess(long startTimestamp, MetricID metricID) { long duration = System.nanoTime() - startTimestamp; MetricRegistry registry = MetricRegistries.getOrCreate(MetricRegistry.Type.BASE); - registry.getSimpleTimer(metricID).update(Duration.ofNanos(duration)); + registry.getTimer(metricID).update(Duration.ofNanos(duration)); } private void updateAfterFailure(MetricID metricID) { @@ -94,9 +95,10 @@ private MetricID transformToMetricIDForFailedRequest(MetricID metricID) { return new MetricID("REST.request.unmappedException.total", metricID.getTagsAsArray()); } + //TODO: Verify it works properly. private void createMetrics(MetricID metricID) { MetricRegistry registry = MetricRegistries.getOrCreate(MetricRegistry.Type.BASE); - if (registry.getSimpleTimer(metricID) == null) { + if (registry.getTimer(metricID) == null) { Metadata successMetadata = Metadata.builder() .withName(metricID.getName()) .withDescription( @@ -104,7 +106,7 @@ private void createMetrics(MetricID metricID) { "resource method since the start of the server.") .withUnit(MetricUnits.NANOSECONDS) .build(); - registry.simpleTimer(successMetadata, metricID.getTagsAsArray()); + registry.timer(successMetadata, metricID.getTagsAsArray()); } MetricID metricIDForFailure = transformToMetricIDForFailedRequest(metricID); if (registry.getCounter(metricIDForFailure) == null) { diff --git a/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricRegistryAdapter.java b/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricRegistryAdapter.java index c02504aa..15f95c5f 100644 --- a/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricRegistryAdapter.java +++ b/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricRegistryAdapter.java @@ -16,18 +16,15 @@ import java.util.function.ToDoubleFunction; import org.eclipse.microprofile.config.ConfigProvider; -import org.eclipse.microprofile.metrics.ConcurrentGauge; import org.eclipse.microprofile.metrics.Counter; import org.eclipse.microprofile.metrics.Gauge; import org.eclipse.microprofile.metrics.Histogram; import org.eclipse.microprofile.metrics.Metadata; -import org.eclipse.microprofile.metrics.Meter; import org.eclipse.microprofile.metrics.Metric; import org.eclipse.microprofile.metrics.MetricFilter; import org.eclipse.microprofile.metrics.MetricID; import org.eclipse.microprofile.metrics.MetricRegistry; import org.eclipse.microprofile.metrics.MetricType; -import org.eclipse.microprofile.metrics.SimpleTimer; import org.eclipse.microprofile.metrics.Tag; import org.eclipse.microprofile.metrics.Timer; @@ -269,21 +266,6 @@ public LegacyMetricRegistryAdapter(Type type, MeterRegistry registry) { this(type, registry, ApplicationNameResolver.DEFAULT); } - @Override - public T register(String name, T t) throws IllegalArgumentException { - throw new UnsupportedOperationException("Can not register a pre-constructed Metric with Micrometer"); - } - - @Override - public T register(Metadata metadata, T t) throws IllegalArgumentException { - throw new UnsupportedOperationException("Can not register a pre-constructed Metric with Micrometer"); - } - - @Override - public T register(Metadata metadata, T t, Tag... tags) throws IllegalArgumentException { - throw new UnsupportedOperationException("Can not register a pre-constructed Metric with Micrometer"); - } - @Override public Counter counter(String name) { return internalCounter(internalGetMetadata(name, MetricType.COUNTER), @@ -333,31 +315,6 @@ CounterAdapter internalCounter(MpMetadata metadata, MetricDescriptor id) { return result.register(metadata, id, registry); } - @Override - public ConcurrentGauge concurrentGauge(String name) { - return null; - } - - @Override - public ConcurrentGauge concurrentGauge(String name, Tag... tags) { - return null; - } - - @Override - public ConcurrentGauge concurrentGauge(MetricID metricID) { - return null; - } - - @Override - public ConcurrentGauge concurrentGauge(Metadata metadata) { - return null; - } - - @Override - public ConcurrentGauge concurrentGauge(Metadata metadata, Tag... tags) { - return null; - } - public Gauge gauge(String name, T o, ToDoubleFunction f) { return internalGauge(internalGetMetadata(name, MetricType.GAUGE), new MetricDescriptor(name, withAppTags()), o, f); @@ -493,31 +450,6 @@ HistogramAdapter internalHistogram(MpMetadata metadata, MetricDescriptor id) { return result.register(metadata, id, registry); } - @Override - public Meter meter(String name) { - return null; - } - - @Override - public Meter meter(String name, Tag... tags) { - return null; - } - - @Override - public Meter meter(MetricID metricID) { - return null; - } - - @Override - public Meter meter(Metadata metadata) { - return null; - } - - @Override - public Meter meter(Metadata metadata, Tag... tags) { - return null; - } - @Override public Timer timer(String name) { return internalTimer(internalGetMetadata(name, MetricType.TIMER), @@ -567,31 +499,6 @@ TimerAdapter internalTimer(MpMetadata metadata, MetricDescriptor id) { return result.register(metadata, id); } - @Override - public SimpleTimer simpleTimer(String name) { - return null; - } - - @Override - public SimpleTimer simpleTimer(String name, Tag... tags) { - return null; - } - - @Override - public SimpleTimer simpleTimer(MetricID metricID) { - return null; - } - - @Override - public SimpleTimer simpleTimer(Metadata metadata) { - return null; - } - - @Override - public SimpleTimer simpleTimer(Metadata metadata, Tag... tags) { - return null; - } - @Override public Metric getMetric(MetricID metricID) { return constructedMeters.get(new MetricDescriptor(metricID.getName(), withAppTags(metricID.getTagsAsArray()))); @@ -609,12 +516,6 @@ public Counter getCounter(MetricID metricID) { .get(new MetricDescriptor(metricID.getName(), withAppTags(metricID.getTagsAsArray()))); } - @Override - public ConcurrentGauge getConcurrentGauge(MetricID metricID) { - return (ConcurrentGauge) constructedMeters - .get(new MetricDescriptor(metricID.getName(), withAppTags(metricID.getTagsAsArray()))); - } - @Override public Gauge getGauge(MetricID metricID) { return (Gauge) constructedMeters @@ -627,33 +528,16 @@ public Histogram getHistogram(MetricID metricID) { .get(new MetricDescriptor(metricID.getName(), withAppTags(metricID.getTagsAsArray()))); } - @Override - public Meter getMeter(MetricID metricID) { - return (Meter) constructedMeters.get(new MetricDescriptor(metricID.getName(), withAppTags(metricID.getTagsAsArray()))); - } - @Override public Timer getTimer(MetricID metricID) { return (Timer) constructedMeters.get(new MetricDescriptor(metricID.getName(), withAppTags(metricID.getTagsAsArray()))); } - @Override - public SimpleTimer getSimpleTimer(MetricID metricID) { - return (SimpleTimer) constructedMeters - .get(new MetricDescriptor(metricID.getName(), withAppTags(metricID.getTagsAsArray()))); - } - @Override public Metadata getMetadata(String name) { return metadataMap.get(name); } - TimerAdapter injectedSimpleTimer(org.eclipse.microprofile.metrics.annotation.Metric annotation) { - return internalSimpleTimer( - internalGetMetadata(annotation.name(), MetricType.SIMPLE_TIMER).merge(annotation), - new MetricDescriptor(annotation.name(), annotation.tags())); - } - TimerAdapter internalSimpleTimer(MpMetadata metadata, MetricDescriptor id) { // SimpleTimer --> Micrometer Timer TimerAdapter result = checkCast(TimerAdapter.class, metadata, @@ -749,16 +633,6 @@ public SortedMap getCounters(MetricFilter metricFilter) { return getMetrics(MetricType.COUNTER, metricFilter); } - @Override - public SortedMap getConcurrentGauges() { - return getConcurrentGauges(MetricFilter.ALL); - } - - @Override - public SortedMap getConcurrentGauges(MetricFilter metricFilter) { - return getMetrics(MetricType.CONCURRENT_GAUGE, metricFilter); - } - @Override public SortedMap getHistograms() { return getHistograms(MetricFilter.ALL); @@ -769,16 +643,6 @@ public SortedMap getHistograms(MetricFilter metricFilter) { return getMetrics(MetricType.HISTOGRAM, metricFilter); } - @Override - public SortedMap getMeters() { - return getMeters(MetricFilter.ALL); - } - - @Override - public SortedMap getMeters(MetricFilter metricFilter) { - return getMetrics(MetricType.METERED, metricFilter); - } - @Override public SortedMap getTimers() { return getTimers(MetricFilter.ALL); @@ -789,16 +653,6 @@ public SortedMap getTimers(MetricFilter metricFilter) { return getMetrics(MetricType.TIMER, metricFilter); } - @Override - public SortedMap getSimpleTimers() { - return getSimpleTimers(MetricFilter.ALL); - } - - @Override - public SortedMap getSimpleTimers(MetricFilter metricFilter) { - return getMetrics(MetricType.SIMPLE_TIMER, metricFilter); - } - @Override public SortedMap getMetrics(MetricFilter filter) { SortedMap out = new TreeMap<>(); diff --git a/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricsExtension.java b/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricsExtension.java index 3d075768..eaf82e8c 100644 --- a/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricsExtension.java +++ b/implementation/src/main/java/io/smallrye/metrics/legacyapi/LegacyMetricsExtension.java @@ -29,11 +29,8 @@ import org.eclipse.microprofile.metrics.MetricID; import org.eclipse.microprofile.metrics.MetricRegistry; -import org.eclipse.microprofile.metrics.annotation.ConcurrentGauge; import org.eclipse.microprofile.metrics.annotation.Counted; import org.eclipse.microprofile.metrics.annotation.Gauge; -import org.eclipse.microprofile.metrics.annotation.Metered; -import org.eclipse.microprofile.metrics.annotation.SimplyTimed; import org.eclipse.microprofile.metrics.annotation.Timed; import io.smallrye.metrics.MetricProducer; @@ -114,8 +111,8 @@ void registerAnnotatedTypes(@Observes BeforeBeanDiscovery bbd, BeanManager manag /* * For classes annotated with metrics (@Counted, etc, add to metricsInterface list - to address cdi injection). */ - private void findAnnotatedInterfaces(@Observes @WithAnnotations({ Counted.class, Gauge.class, Metered.class, - SimplyTimed.class, Timed.class, ConcurrentGauge.class }) ProcessAnnotatedType pat) { + private void findAnnotatedInterfaces( + @Observes @WithAnnotations({ Counted.class, Gauge.class, Timed.class }) ProcessAnnotatedType pat) { Class clazz = pat.getAnnotatedType().getJavaClass(); Package pack = clazz.getPackage(); diff --git a/implementation/src/main/java/io/smallrye/metrics/legacyapi/TimerAdapter.java b/implementation/src/main/java/io/smallrye/metrics/legacyapi/TimerAdapter.java index c34ff61a..9969da9c 100644 --- a/implementation/src/main/java/io/smallrye/metrics/legacyapi/TimerAdapter.java +++ b/implementation/src/main/java/io/smallrye/metrics/legacyapi/TimerAdapter.java @@ -5,7 +5,6 @@ import java.util.concurrent.TimeUnit; import org.eclipse.microprofile.metrics.MetricType; -import org.eclipse.microprofile.metrics.SimpleTimer; import org.eclipse.microprofile.metrics.Snapshot; import io.micrometer.core.instrument.Meter; @@ -37,9 +36,6 @@ public TimerAdapter register(MpMetadata metadata, MetricDescriptor descriptor) { .register(registry); } MetricRegistries.MP_APP_METER_REG_ACCESS.set(false); - if (metadata.type == MetricType.SIMPLE_TIMER) { - metricType = MetricType.SIMPLE_TIMER; - } return this; } @@ -79,31 +75,6 @@ public long getCount() { return timer.count(); } - //TODO: remove - @Override - public double getFifteenMinuteRate() { - throw new UnsupportedOperationException("This operation is not supported when used with micrometer"); - } - - //TODO: remove - @Override - public double getFiveMinuteRate() { - throw new UnsupportedOperationException("This operation is not supported when used with micrometer"); - } - - //TODO: remove - @Override - public double getMeanRate() { - throw new UnsupportedOperationException("This operation is not supported when used with micrometer"); - } - - //TODO: remove - @Override - public double getOneMinuteRate() { - throw new UnsupportedOperationException("This operation is not supported when used with micrometer"); - } - - //TODO: remove @Override public Snapshot getSnapshot() { throw new UnsupportedOperationException("This operation is not supported when used with micrometer"); @@ -122,7 +93,7 @@ public void stop(Timer.Sample sample) { sample.stop(timer); } - class SampleAdapter implements org.eclipse.microprofile.metrics.Timer.Context, SimpleTimer.Context { + class SampleAdapter implements org.eclipse.microprofile.metrics.Timer.Context { final Timer timer; final Timer.Sample sample; diff --git a/implementation/src/main/java/io/smallrye/metrics/legacyapi/interceptors/MetricResolver.java b/implementation/src/main/java/io/smallrye/metrics/legacyapi/interceptors/MetricResolver.java index 414e4a84..b0c7338f 100644 --- a/implementation/src/main/java/io/smallrye/metrics/legacyapi/interceptors/MetricResolver.java +++ b/implementation/src/main/java/io/smallrye/metrics/legacyapi/interceptors/MetricResolver.java @@ -7,11 +7,8 @@ import org.eclipse.microprofile.metrics.MetricRegistry; import org.eclipse.microprofile.metrics.Tag; -import org.eclipse.microprofile.metrics.annotation.ConcurrentGauge; import org.eclipse.microprofile.metrics.annotation.Counted; import org.eclipse.microprofile.metrics.annotation.Gauge; -import org.eclipse.microprofile.metrics.annotation.Metered; -import org.eclipse.microprofile.metrics.annotation.SimplyTimed; import org.eclipse.microprofile.metrics.annotation.Timed; import io.smallrye.metrics.SmallRyeMetricsMessages; @@ -30,26 +27,14 @@ public Of counted(BeanInfo topClass, MemberInfo element) { return resolverOf(topClass, element, Counted.class); } - public Of concurrentGauge(BeanInfo topClass, MemberInfo element) { - return resolverOf(topClass, element, ConcurrentGauge.class); - } - public Of gauge(BeanInfo topClass, MemberInfo method) { return resolverOf(topClass, method, Gauge.class); } - public Of metered(BeanInfo topClass, MemberInfo element) { - return resolverOf(topClass, element, Metered.class); - } - public Of timed(BeanInfo bean, MemberInfo element) { return resolverOf(bean, element, Timed.class); } - public Of simplyTimed(BeanInfo bean, MemberInfo element) { - return resolverOf(bean, element, SimplyTimed.class); - } - private Of resolverOf(BeanInfo bean, MemberInfo element, Class metric) { if (element.isAnnotationPresent(metric)) { return elementResolverOf(element, metric); From 3c6f2af334f95434128eeb870e157ffef32a5e37 Mon Sep 17 00:00:00 2001 From: David Chan Date: Mon, 13 Jun 2022 13:17:25 -0400 Subject: [PATCH 6/8] formatting --- .../java/io/smallrye/metrics/legacyapi/HistogramAdapter.java | 2 +- .../main/java/io/smallrye/metrics/setup/MetricsMetadata.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/implementation/src/main/java/io/smallrye/metrics/legacyapi/HistogramAdapter.java b/implementation/src/main/java/io/smallrye/metrics/legacyapi/HistogramAdapter.java index 8f492d65..295f43f8 100644 --- a/implementation/src/main/java/io/smallrye/metrics/legacyapi/HistogramAdapter.java +++ b/implementation/src/main/java/io/smallrye/metrics/legacyapi/HistogramAdapter.java @@ -16,7 +16,7 @@ HistogramAdapter register(MpMetadata metadata, MetricDescriptor metricInfo, Mete MetricRegistries.MP_APP_METER_REG_ACCESS.set(true); if (summary == null || metadata.cleanDirtyMetadata()) { summary = DistributionSummary.builder(metricInfo.name()) - .description(metadata.getDescription()) + .description(metadata.getDescription()) .baseUnit(metadata.getUnit()) .tags(metricInfo.tags()) .publishPercentiles(0.5, 0.75, 0.95, 0.98, 0.99, 0.999) diff --git a/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java b/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java index fc1eeb9c..c16142ec 100644 --- a/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java +++ b/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java @@ -3,9 +3,7 @@ import static io.smallrye.metrics.legacyapi.TagsUtils.parseTagsAsArray; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.stream.Stream; import org.eclipse.microprofile.metrics.Metadata; import org.eclipse.microprofile.metrics.MetricID; From 7cfdde33753b1e358dd794c867c42a2e36cb7e3f Mon Sep 17 00:00:00 2001 From: David Chan Date: Mon, 20 Jun 2022 16:27:36 -0400 Subject: [PATCH 7/8] Include the mp.metrics.appName tag with the MetricID passsed to MembertoMetricMappings's metric maps, probably remove MembertoMetricMapping one day and direclty query metric/meter-registry --- .../smallrye/metrics/setup/MetricsMetadata.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java b/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java index c16142ec..6428b8c1 100644 --- a/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java +++ b/implementation/src/main/java/io/smallrye/metrics/setup/MetricsMetadata.java @@ -13,6 +13,7 @@ import org.eclipse.microprofile.metrics.annotation.Counted; import org.eclipse.microprofile.metrics.annotation.Timed; +import io.micrometer.core.instrument.Tags; import io.smallrye.metrics.OriginAndMetadata; import io.smallrye.metrics.elementdesc.AnnotationInfo; import io.smallrye.metrics.elementdesc.BeanInfo; @@ -36,8 +37,22 @@ public static List registerMetrics(MetricRegistry registry, MetricReso Tag[] tags = parseTagsAsArray(t.tags()); registry.counter(metadata, tags); if (registry instanceof LegacyMetricRegistryAdapter) { + + //FIXME: Temporary, resolve the mp.metrics.appName tag if if available to append to MembersToMetricMapping + //so that interceptors can find the annotated metric + //Possibly remove MembersToMetricMapping in future, and directly query metric/meter-registry. + Tags mmTags = ((LegacyMetricRegistryAdapter) registry).withAppTags(tags); + + List mpListTags = new ArrayList(); + mmTags.forEach(tag -> { + Tag mpTag = new Tag(tag.getKey(), tag.getValue()); + mpListTags.add(mpTag); + }); + + Tag[] mpTagArray = mpListTags.toArray(new Tag[0]); + //add this CDI MetricID into MetricRegistry's MetricID list.... - MetricID metricID = new MetricID(metadata.getName()); + MetricID metricID = new MetricID(metadata.getName(), mpTagArray); metricIDs.add(metricID); //Some list in MetricRegistry that maps the CDI element, metricID and metric type From 97537a92c4672d63cf7e15f2298c0020ccaa86bb Mon Sep 17 00:00:00 2001 From: David Chan Date: Mon, 20 Jun 2022 16:32:00 -0400 Subject: [PATCH 8/8] Use MP Metrics 5.0.0-SNAPSHOT, see MP Metrics PR #664 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f4d27706..a9da5187 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ 2.0 - 3.0 + 5.0.0-SNAPSHOT 1.8.5