Browse Source

添加服务器信息获取能力。

pull/324/head
648540858 3 years ago
parent
commit
ea85a620d1
  1. 8
      pom.xml
  2. 22
      src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java
  3. 8
      src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
  4. 34
      src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java
  5. 6
      src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
  6. 46
      src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
  7. 92
      src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java
  8. 18
      src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java

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>

22
src/main/java/com/genersoft/iot/vmp/common/SystemInfoDto.java

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

8
src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java

@ -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_";

34
src/main/java/com/genersoft/iot/vmp/conf/SystemInfoTimerTask.java

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

6
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java

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

46
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java

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

92
src/main/java/com/genersoft/iot/vmp/utils/SystemInfoUtils.java

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

18
src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java

@ -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…
Cancel
Save