Skip to content

Commit 707a03b

Browse files
authored
4.x: Initial commit of neutral metrics API with high-level interfaces; more to come (helidon-io#7261)
1 parent b6fe001 commit 707a03b

310 files changed

Lines changed: 15459 additions & 11149 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

archetypes/helidon/src/main/archetype/common/observability.xml

Lines changed: 18 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -127,42 +127,24 @@ curl -H 'Accept: application/json' -X GET http://localhost:8080/metrics
127127
@Inject
128128
private MetricRegistry registry;]]></value>
129129
</list>
130-
<list key="Main-other-imports" if="${flavor} == 'se'">
131-
<value>org.eclipse.microprofile.metrics.MetricRegistry</value>
132-
</list>
133130
<list key="Main-helidon-imports" if="${flavor} == 'se'">
134-
<value>io.helidon.metrics.api.MetricsSettings</value>
135-
<value>io.helidon.metrics.api.Registry</value>
136-
<value>io.helidon.metrics.api.RegistryFactory</value>
137-
<value>io.helidon.metrics.api.RegistrySettings</value>
131+
<value>io.helidon.metrics.api.MeterRegistry</value>
138132
<value>io.helidon.webserver.observe.metrics.MetricsFeature</value>
139133
<value>io.helidon.webserver.observe.metrics.MetricsObserveProvider</value>
140134
</list>
141135
<list key="Main-routing" if="${flavor} == 'se'">
142136
<value><![CDATA[
143-
MetricsSettings.Builder metricsSettingsBuilder =
144-
MetricsSettings.builder()
145-
.registrySettings(Registry.APPLICATION_SCOPE, RegistrySettings.create());
146-
MetricsFeature metrics = MetricsFeature.builder()
147-
.metricsSettings(metricsSettingsBuilder)
148-
.build();
149-
MetricRegistry appRegistry = RegistryFactory.getInstance(metricsSettingsBuilder.build())
150-
.getRegistry(MetricRegistry.APPLICATION_SCOPE);
151-
152-
MetricsService metricsService = new MetricsService(config, appRegistry);
137+
MetricsService metricsService = new MetricsService(config);
153138
]]></value>
154139
</list>
155140
<list key="Main-routing-builder" if="${flavor} == 'se'">
156-
<value><![CDATA[.addFeature(ObserveFeature.create(MetricsObserveProvider.create(metrics)))]]></value>
141+
<value><![CDATA[.addFeature(ObserveFeature.create(MetricsObserveProvider.create(MetricsFeature.create())))]]></value>
157142
<value><![CDATA[.register("/metrics-greet", metricsService)]]></value>
158143
</list>
159144
<list key="MetricsService-imports" if="${flavor} == 'se'">
160-
<value>io.helidon.metrics.api.Registry</value>
161-
<value>io.helidon.metrics.api.RegistryFactory</value>
162-
<value>org.eclipse.microprofile.metrics.Counter</value>
163-
<value>org.eclipse.microprofile.metrics.Metadata</value>
164-
<value>org.eclipse.microprofile.metrics.MetricRegistry</value>
165-
<value>org.eclipse.microprofile.metrics.MetricUnits</value>
145+
<value>io.helidon.metrics.api.Metrics</value>
146+
<value>io.helidon.metrics.api.MeterRegistry</value>
147+
<value>io.helidon.metrics.api.Counter</value>
166148
</list>
167149
<list key="MetricsService-fields" if="${flavor} == 'se'">
168150
<value><![CDATA[
@@ -172,19 +154,17 @@ curl -H 'Accept: application/json' -X GET http://localhost:8080/metrics
172154
</list>
173155
<list key="MetricsService-constructor" if="${flavor} == 'se'">
174156
<value><![CDATA[
175-
Metadata metadata = Metadata.builder()
176-
.withName(PERSONALIZED_GETS_COUNTER_NAME)
177-
.withDescription("Counts the number of HTTP responses to /{name} query")
178-
.withUnit(MetricUnits.NONE)
179-
.build();
180-
this.personalizedGetCounter = appRegistry.counter(metadata);
157+
MeterRegistry appRegistry = Metrics.globalRegistry();
158+
this.personalizedGetCounter = appRegistry.getOrCreate(
159+
Counter.builder(PERSONALIZED_GETS_COUNTER_NAME)
160+
.description("Counts the number of HTTP responses to /{name} query"));
181161
]]></value>
182162
</list>
183163
<list key="MetricsService-routing" if="${flavor} == 'se'">
184164
<value><![CDATA[
185165
.get("/{name}",
186166
(req, resp) -> {
187-
personalizedGetCounter.inc();
167+
personalizedGetCounter.increment();
188168
resp.next();
189169
})]]></value>
190170
</list>
@@ -197,19 +177,20 @@ curl -H 'Accept: application/json' -X GET http://localhost:8080/metrics
197177
.request();
198178
assertThat(response.status().code(), is(200));
199179
200-
response = client.get("/observe/metrics/application").request();
180+
response = client.get("/observe/metrics").request();
201181
202182
String output = response.as(String.class);
203183
204-
String expected = MetricsService.PERSONALIZED_GETS_COUNTER_NAME + "_total{h_scope=\"application\",} 1.0";
184+
String expected = MetricsService.PERSONALIZED_GETS_COUNTER_NAME + "_total 1.0";
205185
assertThat("Unable to find expected counter result " + expected + "; output is " + output,
206186
output, containsString(expected));
207187
response.close();
208188
}
209189
]]></value>
210190
</list>
211-
<list key="modules">
212-
<value if="${flavor} == 'mp'">io.helidon.microprofile.metrics</value>
191+
<list key="modules" if="${flavor} == 'mp'">
192+
<value>io.helidon.microprofile.metrics</value>
193+
<value>micrometer.core</value>
213194
</list>
214195
</model>
215196
</output>
@@ -393,10 +374,11 @@ allRequests_total 0.0
393374
</list>
394375
<list key="Main-routing-builder" if="${flavor} == 'se'">
395376
<value><![CDATA[.register("/metrics-greet", metricsService)
396-
.addFeature(metricsService.micrometerFeature())]]></value>
377+
.addFeature(metricsService.micrometerFeature())]]></value>
397378
</list>
398379
<list key="modules">
399380
<value if="${flavor} == 'se'">io.helidon.integrations.micrometer</value>
381+
<value>micrometer.core</value>
400382
</list>
401383
</model>
402384
</output>

archetypes/helidon/src/main/archetype/se/custom/files/src/main/java/__pkg__/MetricsService.java.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class MetricsService implements HttpService {
3232
{{/MetricsService-fields}}
3333

3434

35-
MetricsService(Config config, MetricRegistry appRegistry) {
35+
MetricsService(Config config) {
3636
{{#MetricsService-constructor}}
3737
{{.}}
3838
{{/MetricsService-constructor}}

archetypes/helidon/src/main/archetype/se/custom/observability.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@
6969
<value>io.helidon.webserver.observe.health.HealthObserveProvider</value>
7070
</list>
7171
<list key="Main-helidon-imports" if="${metrics}">
72-
<value>io.helidon.metrics.api.MetricsSettings</value>
7372
<value>io.helidon.webserver.observe.metrics.MetricsFeature</value>
7473
<value>io.helidon.webserver.observe.metrics.MetricsObserveProvider</value>
7574
</list>
@@ -121,6 +120,9 @@
121120
}
122121
]]></value>
123122
</list>
123+
<list key="Observe-feature-builder">
124+
<value if="${metrics}"><![CDATA[ .addProvider(MetricsObserveProvider.create())]]></value>
125+
</list>
124126
<list key="Abstract-tests">
125127
<value if="${metrics}"><![CDATA[
126128
@Test

bom/pom.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,17 @@
376376
</dependency>
377377
<dependency>
378378
<groupId>io.helidon.metrics</groupId>
379-
<artifactId>helidon-metrics-service-api</artifactId>
379+
<artifactId>helidon-metrics-system-meters</artifactId>
380+
<version>${helidon.version}</version>
381+
</dependency>
382+
<dependency>
383+
<groupId>io.helidon.metrics</groupId>
384+
<artifactId>helidon-metrics-provider-tests</artifactId>
385+
<version>${helidon.version}</version>
386+
</dependency>
387+
<dependency>
388+
<groupId>io.helidon.metrics.providers</groupId>
389+
<artifactId>helidon-metrics-providers-micrometer</artifactId>
380390
<version>${helidon.version}</version>
381391
</dependency>
382392
<dependency>

dbclient/metrics-hikari/src/main/java/io/helidon/dbclient/metrics/hikari/DropwizardMetricsListener.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@
1616
package io.helidon.dbclient.metrics.hikari;
1717

1818
import java.lang.System.Logger.Level;
19+
import java.util.Set;
1920

2021
import io.helidon.common.LazyValue;
2122
import io.helidon.common.config.Config;
22-
import io.helidon.metrics.api.Registry;
23-
import io.helidon.metrics.api.RegistryFactory;
23+
import io.helidon.metrics.api.MeterRegistry;
24+
import io.helidon.metrics.api.Metrics;
2425

2526
import com.codahale.metrics.Counter;
2627
import com.codahale.metrics.Gauge;
2728
import com.codahale.metrics.Histogram;
2829
import com.codahale.metrics.Meter;
2930
import com.codahale.metrics.MetricRegistryListener;
3031
import com.codahale.metrics.Timer;
31-
import org.eclipse.microprofile.metrics.MetricRegistry;
3232

3333
/**
3434
* Hikari CP to Helidon metrics mapper.
@@ -37,13 +37,14 @@
3737
*/
3838
public class DropwizardMetricsListener implements MetricRegistryListener {
3939

40+
private static final String SCOPE = io.helidon.metrics.api.Meter.Scope.VENDOR;
41+
4042
/** Local logger instance. */
4143
private static final System.Logger LOGGER = System.getLogger(DropwizardMetricsListener.class.getName());
4244

4345
private final String prefix;
4446
// Helidon metrics registry
45-
private final LazyValue<MetricRegistry> registry = LazyValue.create(
46-
() -> RegistryFactory.getInstance().getRegistry(Registry.VENDOR_SCOPE));
47+
private final LazyValue<MeterRegistry> registry = LazyValue.create(Metrics::globalRegistry);
4748

4849
private DropwizardMetricsListener(String prefix) {
4950
this.prefix = prefix;
@@ -59,8 +60,8 @@ public void onGaugeAdded(String name, Gauge<?> gauge) {
5960
if (value instanceof Number) {
6061
LOGGER.log(Level.TRACE, () -> String.format("Gauge added: %s", name));
6162
@SuppressWarnings("unchecked")
62-
org.eclipse.microprofile.metrics.Gauge<?> mpGauge = new HikariMetricsGauge<>((Gauge<? extends Number>) gauge);
63-
registry.get().gauge(prefix + name, mpGauge::getValue);
63+
Gauge<? extends Number> nGauge = (Gauge<? extends Number>) gauge;
64+
registerGauge(name, nGauge);
6465
} else {
6566
LOGGER.log(Level.WARNING, () -> String.format("Cannot add gauge returning type "
6667
+ value.getClass().getName()
@@ -71,19 +72,19 @@ public void onGaugeAdded(String name, Gauge<?> gauge) {
7172
@Override
7273
public void onGaugeRemoved(String name) {
7374
LOGGER.log(Level.TRACE, () -> String.format("Gauge removed: %s", name));
74-
registry.get().remove(prefix + name);
75+
registry.get().remove(prefix + name, Set.of(), SCOPE);
7576
}
7677

7778
@Override
7879
public void onCounterAdded(String name, Counter counter) {
7980
LOGGER.log(Level.TRACE, () -> String.format("Counter added: %s", name));
80-
registry.get().gauge(prefix + name, counter::getCount);
81+
registerGauge(name, counter);
8182
}
8283

8384
@Override
8485
public void onCounterRemoved(String name) {
8586
LOGGER.log(Level.TRACE, () -> String.format("Counter removed: %s", name));
86-
registry.get().remove(prefix + name);
87+
registry.get().remove(prefix + name, Set.of(), SCOPE);
8788
}
8889

8990
@Override
@@ -128,4 +129,20 @@ public void onTimerRemoved(String name) {
128129
LOGGER.log(Level.TRACE, () -> String.format("Ignoring histogram removed: %s", name));
129130
}
130131

132+
133+
private io.helidon.metrics.api.Gauge registerGauge(String name, Gauge<? extends Number> gauge) {
134+
return registry.get()
135+
.getOrCreate(io.helidon.metrics.api.Gauge.builder(prefix + name,
136+
gauge,
137+
g -> g.getValue().doubleValue())
138+
.scope(SCOPE));
139+
}
140+
141+
private io.helidon.metrics.api.Gauge registerGauge(String name, Counter counter) {
142+
return registry.get()
143+
.getOrCreate(io.helidon.metrics.api.Gauge.builder(prefix + name,
144+
counter,
145+
Counter::getCount)
146+
.scope(SCOPE));
147+
}
131148
}

dbclient/metrics-hikari/src/main/java/io/helidon/dbclient/metrics/hikari/HikariMetricsCounter.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

dbclient/metrics-hikari/src/main/java/io/helidon/dbclient/metrics/hikari/HikariMetricsGauge.java

Lines changed: 0 additions & 38 deletions
This file was deleted.

dbclient/metrics-hikari/src/main/java/io/helidon/dbclient/metrics/hikari/HikariMetricsHistogram.java

Lines changed: 0 additions & 56 deletions
This file was deleted.

0 commit comments

Comments
 (0)