From 9e187f42e58605f7669f059bafa399dd0d91bc17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Sat, 14 Mar 2026 11:59:34 +0800 Subject: [PATCH] refactor: use Woodpecker CI and simplify monitoring to Spring Boot Actuator only --- .../main/resources/application-metrics.yml | 32 +++---- novalon-manage-api/manage-common/pom.xml | 12 --- .../common/monitoring/MetricsAspect.java | 79 ----------------- .../common/monitoring/MetricsCollector.java | 88 ------------------- .../common/monitoring/MetricsConfig.java | 23 ----- 5 files changed, 13 insertions(+), 221 deletions(-) delete mode 100644 novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsAspect.java delete mode 100644 novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsCollector.java delete mode 100644 novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsConfig.java diff --git a/novalon-manage-api/manage-app/src/main/resources/application-metrics.yml b/novalon-manage-api/manage-app/src/main/resources/application-metrics.yml index c1080fe..d6fd163 100644 --- a/novalon-manage-api/manage-app/src/main/resources/application-metrics.yml +++ b/novalon-manage-api/manage-app/src/main/resources/application-metrics.yml @@ -2,22 +2,16 @@ management: endpoints: web: exposure: - include: health,info,metrics,prometheus - metrics: - export: - prometheus: - enabled: true - tags: - application: ${spring.application.name} - environment: ${spring.profiles.active:default} - distribution: - percentiles-histogram: - http.server.requests: true - percentiles: - http.server.requests: 0.5,0.95,0.99 - sla: - http.server.requests: 100ms,200ms,500ms,1s,2s - enable: - jvm: true - process: true - system: true \ No newline at end of file + include: health,info,metrics + endpoint: + health: + show-details: always + metrics: + enabled: true + info: + env: + enabled: true + metrics: + export: + simple: + enabled: true \ No newline at end of file diff --git a/novalon-manage-api/manage-common/pom.xml b/novalon-manage-api/manage-common/pom.xml index 2e104a7..aac7eba 100644 --- a/novalon-manage-api/manage-common/pom.xml +++ b/novalon-manage-api/manage-common/pom.xml @@ -59,18 +59,6 @@ jjwt-jackson runtime - - io.micrometer - micrometer-core - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-aop - org.springframework.boot spring-boot-starter-test diff --git a/novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsAspect.java b/novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsAspect.java deleted file mode 100644 index 931fc21..0000000 --- a/novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsAspect.java +++ /dev/null @@ -1,79 +0,0 @@ -package cn.novalon.manage.common.monitoring; - -import org.aspectj.lang.ProceedingJoinPoint; -import org.aspectj.lang.annotation.Around; -import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.annotation.Pointcut; -import org.springframework.stereotype.Component; -import reactor.core.publisher.Mono; - -import java.util.Arrays; - -@Aspect -@Component -public class MetricsAspect { - - private final MetricsCollector metricsCollector; - - public MetricsAspect(MetricsCollector metricsCollector) { - this.metricsCollector = metricsCollector; - } - - @Pointcut("within(cn.novalon.manage..*) && " + - "@annotation(org.springframework.web.bind.annotation.GetMapping || " + - "@annotation(org.springframework.web.bind.annotation.PostMapping || " + - "@annotation(org.springframework.web.bind.annotation.PutMapping || " + - "@annotation(org.springframework.web.bind.annotation.DeleteMapping)") - public void apiMethods() {} - - @Around("apiMethods()") - public Object monitorApiCall(ProceedingJoinPoint joinPoint) throws Throwable { - String className = joinPoint.getTarget().getClass().getSimpleName(); - String methodName = joinPoint.getSignature().getName(); - String module = extractModule(className); - String endpoint = className.replace("Handler", "").toLowerCase() + "/" + methodName; - - long startTime = System.currentTimeMillis(); - boolean success = true; - String errorType = null; - - try { - Object result = joinPoint.proceed(); - - if (result instanceof Mono) { - return ((Mono) result) - .doOnError(error -> { - success = false; - errorType = error.getClass().getSimpleName(); - metricsCollector.recordError(module, errorType, error.getMessage()); - }) - .doOnSuccess(v -> { - long duration = System.currentTimeMillis() - startTime; - metricsCollector.recordApiCall(module, endpoint, "GET", duration, true); - }); - } - - long duration = System.currentTimeMillis() - startTime; - metricsCollector.recordApiCall(module, endpoint, "GET", duration, true); - return result; - - } catch (Exception e) { - success = false; - errorType = e.getClass().getSimpleName(); - long duration = System.currentTimeMillis() - startTime; - metricsCollector.recordApiCall(module, endpoint, "GET", duration, false); - metricsCollector.recordError(module, errorType, e.getMessage()); - throw e; - } - } - - private String extractModule(String className) { - if (className.contains("Notify")) return "notify"; - if (className.contains("File")) return "file"; - if (className.contains("User")) return "user"; - if (className.contains("Role")) return "role"; - if (className.contains("Config")) return "config"; - if (className.contains("Log")) return "log"; - return "system"; - } -} \ No newline at end of file diff --git a/novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsCollector.java b/novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsCollector.java deleted file mode 100644 index a9f115a..0000000 --- a/novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsCollector.java +++ /dev/null @@ -1,88 +0,0 @@ -package cn.novalon.manage.common.monitoring; - -import io.micrometer.core.instrument.Counter; -import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.Timer; -import org.springframework.stereotype.Component; - -import java.util.concurrent.TimeUnit; - -@Component -public class MetricsCollector { - - private final MeterRegistry meterRegistry; - - public MetricsCollector(MeterRegistry meterRegistry) { - this.meterRegistry = meterRegistry; - } - - public Counter buildCounter(String name, String description, String... tags) { - return Counter.builder(name) - .description(description) - .tags(tags) - .register(meterRegistry); - } - - public Timer buildTimer(String name, String description, String... tags) { - return Timer.builder(name) - .description(description) - .tags(tags) - .register(meterRegistry); - } - - public void recordApiCall(String module, String endpoint, String method, long duration, boolean success) { - Timer.builder("api.call.duration") - .description("API call duration") - .tag("module", module) - .tag("endpoint", endpoint) - .tag("method", method) - .register(meterRegistry) - .record(duration, TimeUnit.MILLISECONDS); - - Counter.builder("api.call.count") - .description("API call count") - .tag("module", module) - .tag("endpoint", endpoint) - .tag("method", method) - .tag("status", success ? "success" : "failure") - .register(meterRegistry) - .increment(); - } - - public void recordDatabaseQuery(String module, String operation, long duration, boolean success) { - Timer.builder("db.query.duration") - .description("Database query duration") - .tag("module", module) - .tag("operation", operation) - .register(meterRegistry) - .record(duration, TimeUnit.MILLISECONDS); - - Counter.builder("db.query.count") - .description("Database query count") - .tag("module", module) - .tag("operation", operation) - .tag("status", success ? "success" : "failure") - .register(meterRegistry) - .increment(); - } - - public void recordCacheHit(String module, String cacheName, boolean hit) { - Counter.builder("cache.access") - .description("Cache access count") - .tag("module", module) - .tag("cache", cacheName) - .tag("result", hit ? "hit" : "miss") - .register(meterRegistry) - .increment(); - } - - public void recordError(String module, String errorType, String message) { - Counter.builder("error.count") - .description("Error count") - .tag("module", module) - .tag("type", errorType) - .tag("message", message) - .register(meterRegistry) - .increment(); - } -} \ No newline at end of file diff --git a/novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsConfig.java b/novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsConfig.java deleted file mode 100644 index 2bb2109..0000000 --- a/novalon-manage-api/manage-common/src/main/java/cn/novalon/manage/common/monitoring/MetricsConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package cn.novalon.manage.common.monitoring; - -import io.micrometer.core.instrument.MeterRegistry; -import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -@Configuration -public class MetricsConfig { - - @Bean - public MeterRegistryCustomizer metricsCommonTags() { - return registry -> registry.config().commonTags( - "application", "novalon-manage-api", - "environment", System.getenv().getOrDefault("ENV", "development") - ); - } - - @Bean - public MetricsCollector metricsCollector(MeterRegistry meterRegistry) { - return new MetricsCollector(meterRegistry); - } -} \ No newline at end of file