添加服务器信息获取能力。
parent
d7afcab601
commit
ea85a620d1
8
pom.xml
8
pom.xml
|
@ -155,7 +155,6 @@
|
|||
<version>1.7.35</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- xml解析库 -->
|
||||
<dependency>
|
||||
<groupId>org.dom4j</groupId>
|
||||
|
@ -212,6 +211,13 @@
|
|||
<version>3.0.4</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 获取系统信息 -->
|
||||
<dependency>
|
||||
<groupId>com.github.oshi</groupId>
|
||||
<artifactId>oshi-core</artifactId>
|
||||
<version>6.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.session</groupId>
|
||||
<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_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 消息*********************************
|
||||
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<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.genersoft.iot.vmp.common.StreamInfo;
|
||||
import com.genersoft.iot.vmp.common.SystemInfoDto;
|
||||
import com.genersoft.iot.vmp.common.VideoManagerConstants;
|
||||
import com.genersoft.iot.vmp.conf.UserSetup;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.*;
|
||||
|
@ -534,4 +535,49 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
|
|||
}
|
||||
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 键
|
||||
|
|
Loading…
Reference in New Issue