From b9068e1546d2dea17cb614927f1cd496950271c1 Mon Sep 17 00:00:00 2001 From: Shay Keren Date: Sat, 31 May 2025 18:02:00 +0300 Subject: [PATCH] Add database query monitoring metrics --- .../petclinic/monitoring/DatabaseMetrics.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/main/java/org/springframework/samples/petclinic/monitoring/DatabaseMetrics.java diff --git a/src/main/java/org/springframework/samples/petclinic/monitoring/DatabaseMetrics.java b/src/main/java/org/springframework/samples/petclinic/monitoring/DatabaseMetrics.java new file mode 100644 index 00000000000..6f8341ee417 --- /dev/null +++ b/src/main/java/org/springframework/samples/petclinic/monitoring/DatabaseMetrics.java @@ -0,0 +1,31 @@ +package org.springframework.samples.petclinic.monitoring; + +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Timer; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; + +@Aspect +@Component +public class DatabaseMetrics { + private final MeterRegistry registry; + + public DatabaseMetrics(MeterRegistry registry) { + this.registry = registry; + } + + @Around("execution(* org.springframework.samples.petclinic.activity.ClinicActivityController.*(..))") + public Object measureQueryTime(ProceedingJoinPoint joinPoint) throws Throwable { + Timer.Sample sample = Timer.start(registry); + try { + return joinPoint.proceed(); + } finally { + sample.stop(Timer.builder("clinic.activity.query.time") + .description("Time taken for clinic activity queries") + .tag("method", joinPoint.getSignature().getName()) + .register(registry)); + } + } +} \ No newline at end of file