소스 검색

优化每日在线数量统计

zhou-hao 4 년 전
부모
커밋
d8d4668da1

+ 6 - 18
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/measurements/status/DeviceStatusMeasurementProvider.java

@@ -23,18 +23,8 @@ import java.util.function.Function;
 @Component
 public class DeviceStatusMeasurementProvider extends StaticMeasurementProvider {
 
-    private MeterRegistry registry;
 
-    Map<String, LongAdder> productCounts = new ConcurrentHashMap<>();
-
-    Function<String, LongAdder> counterAdder = productId ->
-        productCounts.computeIfAbsent(productId, __id -> {
-            LongAdder adder = new LongAdder();
-            Gauge.builder("online-count", adder, LongAdder::sum)
-                .tag("productId", __id)
-                .register(registry);
-            return adder;
-        });
+    private final MeterRegistry registry;
 
     public DeviceStatusMeasurementProvider(MeterRegistryManager registryManager,
                                            LocalDeviceInstanceService instanceService,
@@ -47,14 +37,13 @@ public class DeviceStatusMeasurementProvider extends StaticMeasurementProvider {
         addMeasurement(new DeviceStatusRecordMeasurement(instanceService, timeSeriesManager));
 
         registry = registryManager.getMeterRegister(DeviceTimeSeriesMetric.deviceMetrics().getId(),
-            "target", "msgType", "productId");
+                                                    "target", "msgType", "productId");
     }
 
     @Subscribe("/device/*/*/online")
-    public Mono<Void> incrementOnline(DeviceMessage msg){
-        return Mono.fromRunnable(()->{
+    public Mono<Void> incrementOnline(DeviceMessage msg) {
+        return Mono.fromRunnable(() -> {
             String productId = parseProductId(msg);
-            counterAdder.apply(productId).increment();
             registry
                 .counter("online", "productId", productId)
                 .increment();
@@ -62,10 +51,9 @@ public class DeviceStatusMeasurementProvider extends StaticMeasurementProvider {
     }
 
     @Subscribe("/device/*/*/offline")
-    public Mono<Void> incrementOffline(DeviceMessage msg){
-        return Mono.fromRunnable(()->{
+    public Mono<Void> incrementOffline(DeviceMessage msg) {
+        return Mono.fromRunnable(() -> {
             String productId = parseProductId(msg);
-           // counterAdder.apply(productId).decrement();
             registry
                 .counter("offline", "productId", productId)
                 .increment();

+ 13 - 7
jetlinks-manager/device-manager/src/main/java/org/jetlinks/community/device/measurements/status/DeviceStatusRecordMeasurement.java

@@ -81,22 +81,28 @@ class DeviceStatusRecordMeasurement
             String format = parameter.getString("format").orElse("yyyy年MM月dd日");
             DateTimeFormatter formatter = DateTimeFormat.forPattern(format);
 
-            return AggregationQueryParam.of()
+            return AggregationQueryParam
+                .of()
                 .max("value")
                 .filter(query ->
-                    query.where("name", "online-count")
-                        .is("productId", parameter.getString("productId").orElse(null))
+                            query.where("name", "gateway-server-session")
                 )
-                .from(parameter.getDate("from").orElse(Date.from(LocalDateTime.now().plusDays(-30).atZone(ZoneId.systemDefault()).toInstant())))
+                .from(parameter
+                          .getDate("from")
+                          .orElse(Date.from(LocalDateTime
+                                                .now()
+                                                .plusDays(-30)
+                                                .atZone(ZoneId.systemDefault())
+                                                .toInstant())))
                 .to(parameter.getDate("to").orElse(new Date()))
                 .groupBy(parameter.getInterval("time").orElse(Interval.ofDays(1)),
-                    parameter.getString("format").orElse("yyyy年MM月dd日"))
+                         parameter.getString("format").orElse("yyyy年MM月dd日"))
                 .limit(parameter.getInt("limit").orElse(10))
                 .execute(timeSeriesManager.getService(DeviceTimeSeriesMetric.deviceMetrics())::aggregation)
                 .map(data -> {
                     long ts = data.getString("time")
-                        .map(time -> DateTime.parse(time, formatter).getMillis())
-                        .orElse(System.currentTimeMillis());
+                                  .map(time -> DateTime.parse(time, formatter).getMillis())
+                                  .orElse(System.currentTimeMillis());
                     return SimpleMeasurementValue.of(
                         data.get("value").orElse(0),
                         data.getString("time", ""),

+ 6 - 2
jetlinks-standalone/src/main/java/org/jetlinks/community/standalone/configuration/JetLinksConfiguration.java

@@ -12,6 +12,8 @@ import org.hswebframework.web.authorization.token.redis.RedisUserTokenManager;
 import org.jetlinks.community.device.entity.DeviceInstanceEntity;
 import org.jetlinks.community.device.entity.DeviceProductEntity;
 import org.jetlinks.community.device.service.AutoDiscoverDeviceRegistry;
+import org.jetlinks.community.device.timeseries.DeviceTimeSeriesMetric;
+import org.jetlinks.community.micrometer.MeterRegistryManager;
 import org.jetlinks.core.ProtocolSupports;
 import org.jetlinks.core.cluster.ClusterManager;
 import org.jetlinks.core.config.ConfigStorageManager;
@@ -145,8 +147,10 @@ public class JetLinksConfiguration {
     }
 
     @Bean
-    public GatewayServerMonitor gatewayServerMonitor(JetLinksProperties properties, MeterRegistry registry) {
-        GatewayServerMetrics metrics = new MicrometerGatewayServerMetrics(properties.getServerId(), registry);
+    public GatewayServerMonitor gatewayServerMonitor(JetLinksProperties properties, MeterRegistryManager registry) {
+        GatewayServerMetrics metrics = new MicrometerGatewayServerMetrics(properties.getServerId(),
+                                                                          registry.getMeterRegister(DeviceTimeSeriesMetric
+                                                                                                        .deviceMetrics().getId()));
 
         return new GatewayServerMonitor() {
             @Override