diff --git a/jetlinks-components/configure-component/pom.xml b/jetlinks-components/configure-component/pom.xml
index e0b7dc60..c3a4fa07 100644
--- a/jetlinks-components/configure-component/pom.xml
+++ b/jetlinks-components/configure-component/pom.xml
@@ -121,6 +121,18 @@
grpc-netty-shaded
1.45.0
+
+
+ io.micrometer
+ micrometer-core
+
+
+
+ org.jetlinks.community
+ common-component
+ ${project.version}
+
+
\ No newline at end of file
diff --git a/jetlinks-components/configure-component/src/main/java/org/jetlinks/community/configure/device/DeviceClusterConfiguration.java b/jetlinks-components/configure-component/src/main/java/org/jetlinks/community/configure/device/DeviceClusterConfiguration.java
index 45477706..e2ca8352 100644
--- a/jetlinks-components/configure-component/src/main/java/org/jetlinks/community/configure/device/DeviceClusterConfiguration.java
+++ b/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");
+ }
+
}
diff --git a/jetlinks-components/configure-component/src/main/java/org/jetlinks/community/configure/device/DeviceSessionMonitor.java b/jetlinks-components/configure-component/src/main/java/org/jetlinks/community/configure/device/DeviceSessionMonitor.java
new file mode 100644
index 00000000..6aa2475d
--- /dev/null
+++ b/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 session = sessionManager.totalSessions(true);
+ Long val = null;
+ if (session instanceof Callable) {
+ val = ((Callable) session).call();
+ } else {
+ val = session
+ .toFuture()
+ .getNow(0L);
+ }
+ return val == null ? 0 : val;
+ }
+}