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; + } +}