|
|
@@ -0,0 +1,45 @@
|
|
|
+package com.nb.framework.micrometer;
|
|
|
+
|
|
|
+import io.micrometer.core.instrument.*;
|
|
|
+import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
|
|
|
+import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
|
|
|
+import lombok.Setter;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+import java.util.concurrent.atomic.AtomicLong;
|
|
|
+import java.util.function.Function;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 描述: 计数器统计管理器
|
|
|
+ * @author lifang
|
|
|
+ * @date 2022/7/22 17:28
|
|
|
+ */
|
|
|
+@Setter
|
|
|
+@Component
|
|
|
+public class FunctionTimerManager {
|
|
|
+ private final static CompositeMeterRegistry registry=new CompositeMeterRegistry(Clock.SYSTEM);
|
|
|
+
|
|
|
+ private Map<String, FunctionTimer> meterRegistryMap = new ConcurrentHashMap<>();
|
|
|
+
|
|
|
+
|
|
|
+ private FunctionTimer createMeterTimer(String metric,Function<String,Long> countSupplier,Function<String,Long> timeSupplier) {
|
|
|
+ return FunctionTimer.builder(metric,new Object(),
|
|
|
+ count->countSupplier.apply(metric),
|
|
|
+ time->timeSupplier.apply(metric),
|
|
|
+ TimeUnit.MILLISECONDS
|
|
|
+ ).register(registry);
|
|
|
+ }
|
|
|
+
|
|
|
+ public FunctionTimer getMeterTimer(String metric,Function<String,Long> countSupplier,Function<String,Long> timeSupplier) {
|
|
|
+ return meterRegistryMap.computeIfAbsent(metric,metric_->createMeterTimer(metric,countSupplier,timeSupplier));
|
|
|
+ }
|
|
|
+
|
|
|
+ public FunctionTimer removeMeterTimer(String metric){
|
|
|
+ return meterRegistryMap.remove(metric);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|