添加服务器信息获取能力。
parent
d7afcab601
commit
ea85a620d1
8
pom.xml
8
pom.xml
|
@ -155,7 +155,6 @@
|
||||||
<version>1.7.35</version>
|
<version>1.7.35</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- xml解析库 -->
|
<!-- xml解析库 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.dom4j</groupId>
|
<groupId>org.dom4j</groupId>
|
||||||
|
@ -212,6 +211,13 @@
|
||||||
<version>3.0.4</version>
|
<version>3.0.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 获取系统信息 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.oshi</groupId>
|
||||||
|
<artifactId>oshi-core</artifactId>
|
||||||
|
<version>6.1.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.session</groupId>
|
<groupId>org.springframework.session</groupId>
|
||||||
<artifactId>spring-session-core</artifactId>
|
<artifactId>spring-session-core</artifactId>
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.genersoft.iot.vmp.common;
|
||||||
|
|
||||||
|
public class SystemInfoDto<T> {
|
||||||
|
private String time;
|
||||||
|
private T data;
|
||||||
|
|
||||||
|
public String getTime() {
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTime(String time) {
|
||||||
|
this.time = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getData() {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setData(T data) {
|
||||||
|
this.data = data;
|
||||||
|
}
|
||||||
|
}
|
|
@ -60,7 +60,13 @@ public class VideoManagerConstants {
|
||||||
|
|
||||||
public static final String SIP_SN_PREFIX = "VMP_SIP_SN_";
|
public static final String SIP_SN_PREFIX = "VMP_SIP_SN_";
|
||||||
|
|
||||||
public static final String SIP_SUBSCRIBE_PREFIX = "SIP_SUBSCRIBE_";
|
public static final String SIP_SUBSCRIBE_PREFIX = "VMP_SIP_SUBSCRIBE_";
|
||||||
|
|
||||||
|
public static final String SYSTEM_INFO_CPU_PREFIX = "VMP_SYSTEM_INFO_CPU_";
|
||||||
|
|
||||||
|
public static final String SYSTEM_INFO_MEM_PREFIX = "VMP_SYSTEM_INFO_MEM_";
|
||||||
|
|
||||||
|
public static final String SYSTEM_INFO_NET_PREFIX = "VMP_SYSTEM_INFO_NET_";
|
||||||
|
|
||||||
//************************** redis 消息*********************************
|
//************************** redis 消息*********************************
|
||||||
public static final String WVP_MSG_STREAM_CHANGE_PREFIX = "WVP_MSG_STREAM_CHANGE_";
|
public static final String WVP_MSG_STREAM_CHANGE_PREFIX = "WVP_MSG_STREAM_CHANGE_";
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.genersoft.iot.vmp.conf;
|
||||||
|
|
||||||
|
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
||||||
|
import com.genersoft.iot.vmp.utils.SystemInfoUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.scheduling.annotation.Scheduled;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取系统信息写入redis
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class SystemInfoTimerTask {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IRedisCatchStorage redisCatchStorage;
|
||||||
|
|
||||||
|
@Scheduled(fixedRate = 1000) //每1秒执行一次
|
||||||
|
public void execute(){
|
||||||
|
try {
|
||||||
|
double cpuInfo = SystemInfoUtils.getCpuInfo();
|
||||||
|
redisCatchStorage.addCpuInfo(cpuInfo);
|
||||||
|
double memInfo = SystemInfoUtils.getMemInfo();
|
||||||
|
redisCatchStorage.addMemInfo(memInfo);
|
||||||
|
Map<String, String> networkInterfaces = SystemInfoUtils.getNetworkInterfaces();
|
||||||
|
redisCatchStorage.addNetInfo(networkInterfaces);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -214,4 +214,10 @@ public interface IRedisCatchStorage {
|
||||||
List<SubscribeInfo> getAllSubscribe();
|
List<SubscribeInfo> getAllSubscribe();
|
||||||
|
|
||||||
List<String> getAllSubscribePlatform();
|
List<String> getAllSubscribePlatform();
|
||||||
|
|
||||||
|
void addCpuInfo(double cpuInfo);
|
||||||
|
|
||||||
|
void addMemInfo(double memInfo);
|
||||||
|
|
||||||
|
void addNetInfo(Map<String, String> networkInterfaces);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.storager.impl;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.genersoft.iot.vmp.common.StreamInfo;
|
import com.genersoft.iot.vmp.common.StreamInfo;
|
||||||
|
import com.genersoft.iot.vmp.common.SystemInfoDto;
|
||||||
import com.genersoft.iot.vmp.common.VideoManagerConstants;
|
import com.genersoft.iot.vmp.common.VideoManagerConstants;
|
||||||
import com.genersoft.iot.vmp.conf.UserSetup;
|
import com.genersoft.iot.vmp.conf.UserSetup;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.*;
|
import com.genersoft.iot.vmp.gb28181.bean.*;
|
||||||
|
@ -534,4 +535,49 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addCpuInfo(double cpuInfo) {
|
||||||
|
String key = VideoManagerConstants.SYSTEM_INFO_CPU_PREFIX + userSetup.getServerId();
|
||||||
|
SystemInfoDto<Double> systemInfoDto = new SystemInfoDto<>();
|
||||||
|
systemInfoDto.setTime(format.format(System.currentTimeMillis()));
|
||||||
|
systemInfoDto.setData(cpuInfo);
|
||||||
|
redis.lSet(key, systemInfoDto);
|
||||||
|
// 每秒一个,最多只存30个
|
||||||
|
if (redis.lGetListSize(key) > 30) {
|
||||||
|
for (int i = 0; i < redis.lGetListSize(key) - 30; i++) {
|
||||||
|
redis.lLeftPop(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addMemInfo(double memInfo) {
|
||||||
|
String key = VideoManagerConstants.SYSTEM_INFO_MEM_PREFIX + userSetup.getServerId();
|
||||||
|
SystemInfoDto<Double> systemInfoDto = new SystemInfoDto<>();
|
||||||
|
systemInfoDto.setTime(format.format(System.currentTimeMillis()));
|
||||||
|
systemInfoDto.setData(memInfo);
|
||||||
|
redis.lSet(key, systemInfoDto);
|
||||||
|
// 每秒一个,最多只存30个
|
||||||
|
if (redis.lGetListSize(key) > 30) {
|
||||||
|
for (int i = 0; i < redis.lGetListSize(key) - 30; i++) {
|
||||||
|
redis.lLeftPop(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addNetInfo(Map<String, String> networkInterfaces) {
|
||||||
|
String key = VideoManagerConstants.SYSTEM_INFO_NET_PREFIX + userSetup.getServerId();
|
||||||
|
SystemInfoDto<Map<String, String>> systemInfoDto = new SystemInfoDto<>();
|
||||||
|
systemInfoDto.setTime(format.format(System.currentTimeMillis()));
|
||||||
|
systemInfoDto.setData(networkInterfaces);
|
||||||
|
redis.lSet(key, systemInfoDto);
|
||||||
|
// 每秒一个,最多只存30个
|
||||||
|
if (redis.lGetListSize(key) > 30) {
|
||||||
|
for (int i = 0; i < redis.lGetListSize(key) - 30; i++) {
|
||||||
|
redis.lLeftPop(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,92 @@
|
||||||
|
package com.genersoft.iot.vmp.utils;
|
||||||
|
|
||||||
|
import oshi.SystemInfo;
|
||||||
|
import oshi.hardware.CentralProcessor;
|
||||||
|
import oshi.hardware.GlobalMemory;
|
||||||
|
import oshi.hardware.HardwareAbstractionLayer;
|
||||||
|
import oshi.hardware.NetworkIF;
|
||||||
|
import oshi.software.os.OperatingSystem;
|
||||||
|
import oshi.util.FormatUtil;
|
||||||
|
|
||||||
|
import java.text.DecimalFormat;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实现参考自xiaozhangnomoney原创文章,
|
||||||
|
* 版权声明:本文为xiaozhangnomoney原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
|
||||||
|
* 原文出处链接:https://blog.csdn.net/xiaozhangnomoney/article/details/107769147
|
||||||
|
*/
|
||||||
|
public class SystemInfoUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取cpu信息
|
||||||
|
* @return
|
||||||
|
* @throws InterruptedException
|
||||||
|
*/
|
||||||
|
public static double getCpuInfo() throws InterruptedException {
|
||||||
|
SystemInfo systemInfo = new SystemInfo();
|
||||||
|
CentralProcessor processor = systemInfo.getHardware().getProcessor();
|
||||||
|
long[] prevTicks = processor.getSystemCpuLoadTicks();
|
||||||
|
// 睡眠1s
|
||||||
|
TimeUnit.SECONDS.sleep(1);
|
||||||
|
long[] ticks = processor.getSystemCpuLoadTicks();
|
||||||
|
long nice = ticks[CentralProcessor.TickType.NICE.getIndex()] - prevTicks[CentralProcessor.TickType.NICE.getIndex()];
|
||||||
|
long irq = ticks[CentralProcessor.TickType.IRQ.getIndex()] - prevTicks[CentralProcessor.TickType.IRQ.getIndex()];
|
||||||
|
long softirq = ticks[CentralProcessor.TickType.SOFTIRQ.getIndex()] - prevTicks[CentralProcessor.TickType.SOFTIRQ.getIndex()];
|
||||||
|
long steal = ticks[CentralProcessor.TickType.STEAL.getIndex()] - prevTicks[CentralProcessor.TickType.STEAL.getIndex()];
|
||||||
|
long cSys = ticks[CentralProcessor.TickType.SYSTEM.getIndex()] - prevTicks[CentralProcessor.TickType.SYSTEM.getIndex()];
|
||||||
|
long user = ticks[CentralProcessor.TickType.USER.getIndex()] - prevTicks[CentralProcessor.TickType.USER.getIndex()];
|
||||||
|
long iowait = ticks[CentralProcessor.TickType.IOWAIT.getIndex()] - prevTicks[CentralProcessor.TickType.IOWAIT.getIndex()];
|
||||||
|
long idle = ticks[CentralProcessor.TickType.IDLE.getIndex()] - prevTicks[CentralProcessor.TickType.IDLE.getIndex()];
|
||||||
|
long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;
|
||||||
|
return 1.0-(idle * 1.0 / totalCpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取内存使用率
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static double getMemInfo(){
|
||||||
|
SystemInfo systemInfo = new SystemInfo();
|
||||||
|
GlobalMemory memory = systemInfo.getHardware().getMemory();
|
||||||
|
//总内存
|
||||||
|
long totalByte = memory.getTotal();
|
||||||
|
//剩余
|
||||||
|
long acaliableByte = memory.getAvailable();
|
||||||
|
return (totalByte-acaliableByte)*1.0/totalByte;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取网络上传和下载
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Map<String,String> getNetworkInterfaces() {
|
||||||
|
SystemInfo si = new SystemInfo();
|
||||||
|
HardwareAbstractionLayer hal = si.getHardware();
|
||||||
|
List<NetworkIF> networkIFs = hal.getNetworkIFs();
|
||||||
|
int i= networkIFs.size() -1;
|
||||||
|
NetworkIF net= networkIFs.get(i);
|
||||||
|
|
||||||
|
String in = FormatUtil.formatBytes(net.getBytesRecv());
|
||||||
|
String out = FormatUtil.formatBytes(net.getBytesSent());
|
||||||
|
HashMap<String, String> map = new HashMap<>();
|
||||||
|
map.put("in",in);
|
||||||
|
map.put("out",out);
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取进程数
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static int getProcessesCount(){
|
||||||
|
SystemInfo si = new SystemInfo();
|
||||||
|
OperatingSystem os = si.getOperatingSystem();
|
||||||
|
|
||||||
|
int processCount = os.getProcessCount();
|
||||||
|
return processCount;
|
||||||
|
}
|
||||||
|
}
|
|
@ -660,6 +660,24 @@ public class RedisUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在键为 key 的 list中移除第一个元素
|
||||||
|
* @param key 键
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Object lLeftPop(String key) {
|
||||||
|
return redisTemplate.opsForList().leftPop(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 在键为 key 的 list中移除、最后一个元素
|
||||||
|
* @param key 键
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Object lrightPop(String key) {
|
||||||
|
return redisTemplate.opsForList().rightPop(key);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模糊查询
|
* 模糊查询
|
||||||
* @param key 键
|
* @param key 键
|
||||||
|
|
Loading…
Reference in New Issue