From 722ec7b875d4c094d56d7d42e106b67f1f8954f9 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Mon, 27 Mar 2023 00:41:31 +0900 Subject: [PATCH] #35 springboot: custom metric - gauge --- .../main/java/hello/ActuatorApplication.java | 6 +++- .../java/hello/order/gauge/StockConfigV1.java | 35 +++++++++++++++++++ .../java/hello/order/gauge/StockConfigV2.java | 21 +++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 springboot/actuator/src/main/java/hello/order/gauge/StockConfigV1.java create mode 100644 springboot/actuator/src/main/java/hello/order/gauge/StockConfigV2.java diff --git a/springboot/actuator/src/main/java/hello/ActuatorApplication.java b/springboot/actuator/src/main/java/hello/ActuatorApplication.java index a7e8dd97..38bb9df3 100644 --- a/springboot/actuator/src/main/java/hello/ActuatorApplication.java +++ b/springboot/actuator/src/main/java/hello/ActuatorApplication.java @@ -1,5 +1,7 @@ package hello; +import hello.order.gauge.StockConfigV1; +import hello.order.gauge.StockConfigV2; import hello.order.v0.OrderConfigV0; import hello.order.v1.OrderConfigV1; import hello.order.v2.OrderConfigV2; @@ -15,7 +17,9 @@ import org.springframework.context.annotation.Import; //@Import(OrderConfigV1.class) //@Import(OrderConfigV2.class) //@Import(OrderConfigV3.class) -@Import(OrderConfigV4.class) +//@Import(OrderConfigV4.class) +//@Import({OrderConfigV4.class, StockConfigV1.class}) +@Import({OrderConfigV4.class, StockConfigV2.class}) @SpringBootApplication(scanBasePackages = "hello.controller") public class ActuatorApplication { diff --git a/springboot/actuator/src/main/java/hello/order/gauge/StockConfigV1.java b/springboot/actuator/src/main/java/hello/order/gauge/StockConfigV1.java new file mode 100644 index 00000000..3fd4e3cb --- /dev/null +++ b/springboot/actuator/src/main/java/hello/order/gauge/StockConfigV1.java @@ -0,0 +1,35 @@ +package hello.order.gauge; + +import hello.order.OrderService; +import io.micrometer.core.instrument.Gauge; +import io.micrometer.core.instrument.MeterRegistry; +import jakarta.annotation.PostConstruct; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class StockConfigV1 { + + @Bean + public MyStockMetric myStockMetric(OrderService orderService, MeterRegistry registry) { + return new MyStockMetric(orderService, registry); + } + + @Slf4j + @RequiredArgsConstructor + static class MyStockMetric { + + private final OrderService orderService; + private final MeterRegistry registry; + + @PostConstruct + public void init() { + Gauge.builder("my.stock", orderService, service -> { + log.info("stock gauge call"); + return service.getStock().get(); + }).register(registry); + } + } +} diff --git a/springboot/actuator/src/main/java/hello/order/gauge/StockConfigV2.java b/springboot/actuator/src/main/java/hello/order/gauge/StockConfigV2.java new file mode 100644 index 00000000..a55fea97 --- /dev/null +++ b/springboot/actuator/src/main/java/hello/order/gauge/StockConfigV2.java @@ -0,0 +1,21 @@ +package hello.order.gauge; + +import hello.order.OrderService; +import io.micrometer.core.instrument.Gauge; +import io.micrometer.core.instrument.binder.MeterBinder; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Slf4j +@Configuration +public class StockConfigV2 { + + @Bean + public MeterBinder stockSize(OrderService orderService) { + return registry -> Gauge.builder("my.stock", orderService, service -> { + log.info("stock gauge call"); + return service.getStock().get(); + }).register(registry); + } +}