优化在线数量统计

This commit is contained in:
zhouhao 2022-05-10 16:53:08 +08:00
parent 30a996070b
commit e35ee69588
3 changed files with 61 additions and 0 deletions

View File

@ -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>

View File

@ -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");
}
}

View File

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