Skip to content

Commit

Permalink
Implement the Micrometer card for the new dev ui
Browse files Browse the repository at this point in the history
  • Loading branch information
cescoffier committed Feb 26, 2023
1 parent 88cfc7d commit 77c2054
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import io.quarkus.arc.processor.Annotations;
import io.quarkus.arc.processor.AnnotationsTransformer;
import io.quarkus.arc.processor.InterceptorBindingRegistrar;
import io.quarkus.deployment.IsDevelopment;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.annotations.BuildSteps;
Expand All @@ -38,7 +39,10 @@
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
import io.quarkus.deployment.metrics.MetricsCapabilityBuildItem;
import io.quarkus.deployment.metrics.MetricsFactoryConsumerBuildItem;
import io.quarkus.devui.spi.page.CardPageBuildItem;
import io.quarkus.devui.spi.page.Page;
import io.quarkus.micrometer.deployment.export.PrometheusRegistryProcessor;
import io.quarkus.micrometer.deployment.export.RegistryBuildItem;
import io.quarkus.micrometer.runtime.ClockProvider;
import io.quarkus.micrometer.runtime.CompositeRegistryCreator;
import io.quarkus.micrometer.runtime.MeterFilterConstraint;
Expand Down Expand Up @@ -233,4 +237,27 @@ ReflectiveClassBuildItem createReflectiveBuildItem(DotName sourceAnnotation, Ind
return ReflectiveClassBuildItem.builder(classes.toArray(new String[0])).build();
}

@BuildStep(onlyIf = IsDevelopment.class)
public CardPageBuildItem createCard(List<RegistryBuildItem> registries) {
var card = new CardPageBuildItem("Micrometer metrics");

var json = registries.stream().filter(r -> "JSON".equals(r.name())).map(RegistryBuildItem::path).findFirst()
.orElse(null);
var prom = registries.stream().filter(r -> "Prometheus".equals(r.name())).map(RegistryBuildItem::path).findFirst()
.orElse(null);

if (prom != null) {
card.addPage(Page.externalPageBuilder("Prometheus")
.icon("font-awesome-solid:chart-line")
.url(prom));
} else if (json != null) {
card.addPage(Page.externalPageBuilder("JSON")
.icon("font-awesome-solid:chart-line")
.url(json)
.isJsonContent());
}

return card;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public void initializeJsonRegistry(MicrometerConfig config,
BuildProducer<MicrometerRegistryProviderBuildItem> registryProviders,
BuildProducer<RouteBuildItem> routes,
BuildProducer<AdditionalBeanBuildItem> additionalBeans,
BuildProducer<RegistryBuildItem> registries,
NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem,
JsonRecorder recorder) {
additionalBeans.produce(AdditionalBeanBuildItem.builder()
Expand All @@ -53,6 +54,8 @@ public void initializeJsonRegistry(MicrometerConfig config,

log.debug("Initialized a JSON meter registry on path="
+ nonApplicationRootPathBuildItem.resolvePath(config.export.json.path));

registries.produce(new RegistryBuildItem("JSON", nonApplicationRootPathBuildItem.resolvePath(config.export.json.path)));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ void registerEmptyExamplarProvider(
@BuildStep
@Record(value = ExecutionTime.STATIC_INIT)
void createPrometheusRoute(BuildProducer<RouteBuildItem> routes,
BuildProducer<RegistryBuildItem> registries,
MicrometerConfig mConfig,
NonApplicationRootPathBuildItem nonApplicationRootPathBuildItem,
PrometheusRecorder recorder) {
Expand Down Expand Up @@ -118,5 +119,7 @@ void createPrometheusRoute(BuildProducer<RouteBuildItem> routes,
.routeFunction(pConfig.path + (pConfig.path.endsWith("/") ? "*" : "/*"), recorder.fallbackRoute())
.handler(recorder.getFallbackHandler())
.build());

registries.produce(new RegistryBuildItem("Prometheus", nonApplicationRootPathBuildItem.resolvePath(pConfig.path)));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.quarkus.micrometer.deployment.export;

import io.quarkus.builder.item.MultiBuildItem;

public final class RegistryBuildItem extends MultiBuildItem {

private final String name;

private final String path;

public RegistryBuildItem(String name, String path) {
this.name = name;
this.path = path;
}

public String name() {
return name;
}

public String path() {
return path;
}
}

0 comments on commit 77c2054

Please sign in to comment.