فهرست منبع

优化在线数量统计

zhouhao 3 سال پیش
والد
کامیت
e35ee69588

+ 12 - 0
jetlinks-components/configure-component/pom.xml

@@ -121,6 +121,18 @@
             <artifactId>grpc-netty-shaded</artifactId>
             <version>1.45.0</version>
         </dependency>
+
+        <dependency>
+            <groupId>io.micrometer</groupId>
+            <artifactId>micrometer-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.jetlinks.community</groupId>
+            <artifactId>common-component</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 8 - 0
jetlinks-components/configure-component/src/main/java/org/jetlinks/community/configure/device/DeviceClusterConfiguration.java

@@ -8,6 +8,7 @@ import io.vavr.Lazy;
 import org.hswebframework.ezorm.rdb.mapping.ReactiveRepository;
 import org.hswebframework.web.crud.annotation.EnableEasyormRepository;
 import org.jetlinks.community.configure.cluster.ClusterProperties;
+import org.jetlinks.community.micrometer.MeterRegistryManager;
 import org.jetlinks.core.ProtocolSupports;
 import org.jetlinks.core.cluster.ClusterManager;
 import org.jetlinks.core.config.ConfigStorageManager;
@@ -98,4 +99,11 @@ public class DeviceClusterConfiguration {
     }
 
 
+    @Bean(initMethod = "init")
+    public DeviceSessionMonitor deviceSessionMonitor(DeviceSessionManager sessionManager,
+                                                     MeterRegistryManager registryManager){
+
+        return new DeviceSessionMonitor(registryManager,sessionManager,"gateway-server-session");
+    }
+
 }

+ 41 - 0
jetlinks-components/configure-component/src/main/java/org/jetlinks/community/configure/device/DeviceSessionMonitor.java

@@ -0,0 +1,41 @@
+package org.jetlinks.community.configure.device;
+
+import io.micrometer.core.instrument.Gauge;
+import lombok.AllArgsConstructor;
+import lombok.SneakyThrows;
+import org.jetlinks.community.micrometer.MeterRegistryManager;
+import org.jetlinks.core.device.session.DeviceSessionManager;
+import reactor.core.publisher.Mono;
+
+import java.util.concurrent.Callable;
+
+@AllArgsConstructor
+public class DeviceSessionMonitor {
+
+    private MeterRegistryManager registryManager;
+
+    private DeviceSessionManager sessionManager;
+
+    private String name;
+
+    public void init() {
+        Gauge.builder(name, this::getTotalSession)
+             .tag("server", sessionManager.getCurrentServerId())
+             .register(registryManager.getMeterRegister("device_metrics"));
+    }
+
+    @SneakyThrows
+    @SuppressWarnings("all")
+    private long getTotalSession() {
+        Mono<Long> session = sessionManager.totalSessions(true);
+        Long val = null;
+        if (session instanceof Callable) {
+            val = ((Callable<Long>) session).call();
+        } else {
+            val = session
+                .toFuture()
+                .getNow(0L);
+        }
+        return val == null ? 0 : val;
+    }
+}