Skip to content

Commit f288b35

Browse files
committed
Implement the Micrometer card for the new dev ui.
Only link the prometheus and json metrics.
1 parent 88cfc7d commit f288b35

File tree

4 files changed

+52
-0
lines changed

4 files changed

+52
-0
lines changed

extensions/micrometer/deployment/src/main/java/io/quarkus/micrometer/deployment/MicrometerProcessor.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.quarkus.arc.processor.Annotations;
2929
import io.quarkus.arc.processor.AnnotationsTransformer;
3030
import io.quarkus.arc.processor.InterceptorBindingRegistrar;
31+
import io.quarkus.deployment.IsDevelopment;
3132
import io.quarkus.deployment.annotations.BuildProducer;
3233
import io.quarkus.deployment.annotations.BuildStep;
3334
import io.quarkus.deployment.annotations.BuildSteps;
@@ -38,7 +39,10 @@
3839
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
3940
import io.quarkus.deployment.metrics.MetricsCapabilityBuildItem;
4041
import io.quarkus.deployment.metrics.MetricsFactoryConsumerBuildItem;
42+
import io.quarkus.devui.spi.page.CardPageBuildItem;
43+
import io.quarkus.devui.spi.page.Page;
4144
import io.quarkus.micrometer.deployment.export.PrometheusRegistryProcessor;
45+
import io.quarkus.micrometer.deployment.export.RegistryBuildItem;
4246
import io.quarkus.micrometer.runtime.ClockProvider;
4347
import io.quarkus.micrometer.runtime.CompositeRegistryCreator;
4448
import io.quarkus.micrometer.runtime.MeterFilterConstraint;
@@ -233,4 +237,23 @@ ReflectiveClassBuildItem createReflectiveBuildItem(DotName sourceAnnotation, Ind
233237
return ReflectiveClassBuildItem.builder(classes.toArray(new String[0])).build();
234238
}
235239

240+
@BuildStep(onlyIf = IsDevelopment.class)
241+
public CardPageBuildItem createCard(List<RegistryBuildItem> registries) {
242+
var card = new CardPageBuildItem("Micrometer metrics");
243+
244+
var json = registries.stream().filter(r -> "JSON".equals(r.name())).map(RegistryBuildItem::path).findFirst();
245+
var prom = registries.stream().filter(r -> "Prometheus".equals(r.name())).map(RegistryBuildItem::path).findFirst();
246+
247+
prom.ifPresent(s -> card.addPage(Page.externalPageBuilder("Prometheus")
248+
.icon("font-awesome-solid:chart-line")
249+
.url(s)));
250+
251+
json.ifPresent(s -> card.addPage(Page.externalPageBuilder("JSON")
252+
.icon("font-awesome-solid:chart-line")
253+
.url(s)
254+
.isJsonContent()));
255+
256+
return card;
257+
}
258+
236259
}

extensions/micrometer/deployment/src/main/java/io/quarkus/micrometer/deployment/export/JsonRegistryProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public void initializeJsonRegistry(MicrometerConfig config,
3737
BuildProducer<MicrometerRegistryProviderBuildItem> registryProviders,
3838
BuildProducer<RouteBuildItem> routes,
3939
BuildProducer<AdditionalBeanBuildItem> additionalBeans,
40+
BuildProducer<RegistryBuildItem> registries,
4041
NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem,
4142
JsonRecorder recorder) {
4243
additionalBeans.produce(AdditionalBeanBuildItem.builder()
@@ -53,6 +54,8 @@ public void initializeJsonRegistry(MicrometerConfig config,
5354

5455
log.debug("Initialized a JSON meter registry on path="
5556
+ nonApplicationRootPathBuildItem.resolvePath(config.export.json.path));
57+
58+
registries.produce(new RegistryBuildItem("JSON", nonApplicationRootPathBuildItem.resolvePath(config.export.json.path)));
5659
}
5760

5861
}

extensions/micrometer/deployment/src/main/java/io/quarkus/micrometer/deployment/export/PrometheusRegistryProcessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ void registerEmptyExamplarProvider(
8686
@BuildStep
8787
@Record(value = ExecutionTime.STATIC_INIT)
8888
void createPrometheusRoute(BuildProducer<RouteBuildItem> routes,
89+
BuildProducer<RegistryBuildItem> registries,
8990
MicrometerConfig mConfig,
9091
NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem,
9192
PrometheusRecorder recorder) {
@@ -118,5 +119,7 @@ void createPrometheusRoute(BuildProducer<RouteBuildItem> routes,
118119
.routeFunction(pConfig.path + (pConfig.path.endsWith("/") ? "*" : "/*"), recorder.fallbackRoute())
119120
.handler(recorder.getFallbackHandler())
120121
.build());
122+
123+
registries.produce(new RegistryBuildItem("Prometheus", nonApplicationRootPathBuildItem.resolvePath(pConfig.path)));
121124
}
122125
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.quarkus.micrometer.deployment.export;
2+
3+
import io.quarkus.builder.item.MultiBuildItem;
4+
5+
public final class RegistryBuildItem extends MultiBuildItem {
6+
7+
private final String name;
8+
9+
private final String path;
10+
11+
public RegistryBuildItem(String name, String path) {
12+
this.name = name;
13+
this.path = path;
14+
}
15+
16+
public String name() {
17+
return name;
18+
}
19+
20+
public String path() {
21+
return path;
22+
}
23+
}

0 commit comments

Comments
 (0)