From fb2fd1b64d3df0201a12c4bf19a2e8b5adf64f42 Mon Sep 17 00:00:00 2001 From: haerong22 Date: Sun, 26 Mar 2023 01:40:15 +0900 Subject: [PATCH] #35 springboot: custom metric - timer --- .../main/java/hello/ActuatorApplication.java | 4 +- .../java/hello/order/v3/OrderConfigV3.java | 16 +++++ .../java/hello/order/v3/OrderServiceV3.java | 62 +++++++++++++++++++ 3 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 springboot/actuator/src/main/java/hello/order/v3/OrderConfigV3.java create mode 100644 springboot/actuator/src/main/java/hello/order/v3/OrderServiceV3.java diff --git a/springboot/actuator/src/main/java/hello/ActuatorApplication.java b/springboot/actuator/src/main/java/hello/ActuatorApplication.java index a33b6a3d..99002535 100644 --- a/springboot/actuator/src/main/java/hello/ActuatorApplication.java +++ b/springboot/actuator/src/main/java/hello/ActuatorApplication.java @@ -3,6 +3,7 @@ package hello; import hello.order.v0.OrderConfigV0; import hello.order.v1.OrderConfigV1; import hello.order.v2.OrderConfigV2; +import hello.order.v3.OrderConfigV3; import org.springframework.boot.SpringApplication; import org.springframework.boot.actuate.web.exchanges.InMemoryHttpExchangeRepository; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -11,7 +12,8 @@ import org.springframework.context.annotation.Import; //@Import(OrderConfigV0.class) //@Import(OrderConfigV1.class) -@Import(OrderConfigV2.class) +//@Import(OrderConfigV2.class) +@Import(OrderConfigV3.class) @SpringBootApplication(scanBasePackages = "hello.controller") public class ActuatorApplication { diff --git a/springboot/actuator/src/main/java/hello/order/v3/OrderConfigV3.java b/springboot/actuator/src/main/java/hello/order/v3/OrderConfigV3.java new file mode 100644 index 00000000..8189137f --- /dev/null +++ b/springboot/actuator/src/main/java/hello/order/v3/OrderConfigV3.java @@ -0,0 +1,16 @@ +package hello.order.v3; + +import hello.order.OrderService; +import io.micrometer.core.instrument.MeterRegistry; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class OrderConfigV3 { + + @Bean + public OrderService orderService(MeterRegistry registry) { + return new OrderServiceV3(registry); + } + +} diff --git a/springboot/actuator/src/main/java/hello/order/v3/OrderServiceV3.java b/springboot/actuator/src/main/java/hello/order/v3/OrderServiceV3.java new file mode 100644 index 00000000..707b1333 --- /dev/null +++ b/springboot/actuator/src/main/java/hello/order/v3/OrderServiceV3.java @@ -0,0 +1,62 @@ +package hello.order.v3; + +import hello.order.OrderService; +import io.micrometer.core.annotation.Counted; +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Timer; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +import java.util.Random; +import java.util.concurrent.atomic.AtomicInteger; + +@Slf4j +@RequiredArgsConstructor +public class OrderServiceV3 implements OrderService { + + private final MeterRegistry registry; + private final AtomicInteger stock = new AtomicInteger(100); + + @Override + public void order() { + Timer timer = Timer.builder("my.order") + .tag("class", this.getClass().getName()) + .tag("method", "order") + .description("order") + .register(registry); + + timer.record(() -> { + log.info("주문"); + stock.decrementAndGet(); + sleep(500); + }); + } + + @Override + public void cancel() { + Timer timer = Timer.builder("my.order") + .tag("class", this.getClass().getName()) + .tag("method", "cancel") + .description("order") + .register(registry); + + timer.record(() -> { + log.info("취소"); + stock.incrementAndGet(); + sleep(200); + }); + } + + @Override + public AtomicInteger getStock() { + return stock; + } + + private void sleep(int l) { + try { + Thread.sleep(l + new Random().nextInt(200)); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } +}