提交 5de68433 authored 作者: yangli's avatar yangli

删除

上级 bbe17153
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
<!-- Eclipse Paho 1.1.0 contains major issue with persistence of buffered messages. Using 1.1.1-SNAPSHOT for now. Need to remove this after Paho 1.1.1 release --> <!-- Eclipse Paho 1.1.0 contains major issue with persistence of buffered messages. Using 1.1.1-SNAPSHOT for now. Need to remove this after Paho 1.1.1 release -->
<paho.client.version>1.2.0</paho.client.version> <paho.client.version>1.2.0</paho.client.version>
<milo.client.version>0.1.0</milo.client.version> <milo.client.version>0.1.0</milo.client.version>
<moquette.version>0.10</moquette.version>
<netty.version>4.1.22.Final</netty.version> <netty.version>4.1.22.Final</netty.version>
<commons-lang3.version>3.4</commons-lang3.version> <commons-lang3.version>3.4</commons-lang3.version>
<jackson.version>2.10.2</jackson.version> <jackson.version>2.10.2</jackson.version>
...@@ -100,14 +99,6 @@ ...@@ -100,14 +99,6 @@
<artifactId>org.eclipse.paho.client.mqttv3</artifactId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>${paho.client.version}</version> <version>${paho.client.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.sun.winsw</groupId>
<artifactId>winsw</artifactId>
<version>${winsw.version}</version>
<classifier>bin</classifier>
<type>exe</type>
<scope>provided</scope>
</dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
...@@ -133,12 +124,6 @@ ...@@ -133,12 +124,6 @@
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version> <version>${jackson.version}</version>
</dependency> </dependency>
<dependency>
<groupId>io.moquette</groupId>
<artifactId>moquette-broker</artifactId>
<version>${moquette.version}</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
......
...@@ -19,7 +19,8 @@ import com.priusis.controller.RemoteControlController; ...@@ -19,7 +19,8 @@ import com.priusis.controller.RemoteControlController;
import com.priusis.lib.R; import com.priusis.lib.R;
import com.priusis.monitor.mqtt.*; import com.priusis.monitor.mqtt.*;
import com.priusis.service.common.MacAddrService; import com.priusis.service.common.MacAddrService;
import com.priusis.utils.*; import com.priusis.utils.MacAddrUtil;
import com.priusis.utils.SysConfigUtil;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContext;
...@@ -28,8 +29,8 @@ import io.netty.util.concurrent.Promise; ...@@ -28,8 +29,8 @@ import io.netty.util.concurrent.Promise;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.hyperic.sigar.FileSystem; import org.hyperic.sigar.Mem;
import org.hyperic.sigar.*; import org.hyperic.sigar.Sigar;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
...@@ -398,9 +399,6 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -398,9 +399,6 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
// 存储rpc下发的数据 // 存储rpc下发的数据
powerHandler(message, requestId, bizRequestId, mqttRpcDataMessage); powerHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
remoteControlHandler(message, requestId, bizRequestId, mqttRpcDataMessage); remoteControlHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
realDataMonitorScanHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
remoteRtcHandler(message, requestId, bizRequestId, mqttRpcDataMessage);
try { try {
if (!Arrays.asList("power", "remote_control", "remote_control_exit", "remote_control_accept", if (!Arrays.asList("power", "remote_control", "remote_control_exit", "remote_control_accept",
...@@ -458,10 +456,6 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -458,10 +456,6 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
/** /**
* 远程RPC处理 * 远程RPC处理
* *
...@@ -528,104 +522,9 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -528,104 +522,9 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
} }
} }
/**
* 数据更新频率变为一秒刷新一次 / 扫描软件请求
*
* @param message
* @param requestId
* @param mqttRpcDataMessage
*/
private void realDataMonitorScanHandler(String message, int requestId, String bizRequestId, MqttRpcDataMessage
mqttRpcDataMessage) {
String method = mqttRpcDataMessage.getMethod();
if (!"real_data_monitor".equals(method) && !"facility_scan".equals(method)) {
return;
}
try {
// 数据更新频率变为一秒刷新一次
if ("real_data_monitor".equals(method) && !realDataMonitor) {
realDataMonitor = true;
log.info("数据上报频率请求接受!!! params: {}", mqttRpcDataMessage.getParams());
realDataMonitorScheduler(mqttRpcDataMessage);
}
if ("facility_scan".equals(method)) {
log.info("收到平台扫描软件请求");
programController.addProgram2Platform(bizRequestId);
}
ObjectNode paramsNode = newNode();
paramsNode.put("code", "1");
paramsNode.put("msg", "success");
paramsNode.put("status", "success");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish realDataMonitorSca res", error));
} catch (Exception e) {
log.error("Failed to process rpc command persistent : {}", message, e);
ObjectNode paramsNode = newNode();
paramsNode.put("code", "0");
paramsNode.put("msg", "fail");
paramsNode.put("status", "fail");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish realDataMonitorSca res", error));
}
}
/**
* 收到语音通话请求
*
* @param message
* @param requestId
* @param mqttRpcDataMessage
*/
private void remoteRtcHandler(String message, int requestId, String bizRequestId, MqttRpcDataMessage
mqttRpcDataMessage) {
String method = mqttRpcDataMessage.getMethod();
if (!"remote_rtc".equals(method)) {
return;
}
try {
if ("remote_rtc".equals(method)) {
log.info("收到语音通话请求");
try {
boolean hasApqExeProcess = WinExecuteUtils.findProcess("apq.exe");
if (!hasApqExeProcess) {
String apqExePath = ParseUrlUtil.parseAbsolutePath("apq.exe", "../../../tools/install-package/client/x64/client-soft", "../client-soft");
ProcessExtensionsApqUtil.apq_CreateProcessAsUser(apqExePath);
}
SysConfigUtil.saveProperty("control.request", "2");
} catch (Exception e) {
log.error("语音通话请求异常", e);
SysConfigUtil.saveProperty("control.request", "0");
}
ObjectNode paramsNode = newNode();
paramsNode.put("code", "1");
paramsNode.put("msg", "success");
paramsNode.put("status", "success");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish remoteRtc res", error));
}
} catch (Exception e) {
log.error("Failed to process rpc command persistent : {}", message, e);
ObjectNode paramsNode = newNode();
paramsNode.put("code", "0");
paramsNode.put("msg", "fail");
paramsNode.put("status", "fail");
byte[] msgData = toBytes(newNode().put("requestId", bizRequestId).put("method", method)
.put("resTime", System.currentTimeMillis()).put("response", paramsNode.toString()));
persistMessage(DEVICE_RPC_RES_TOPIC + "/" + requestId, msgIdSeq.incrementAndGet(), msgData, null,
error ->
log.warn("Could not publish remoteRtc res", error));
}
}
/** /**
* 数据上报频率请求 * 数据上报频率请求
...@@ -645,47 +544,17 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall ...@@ -645,47 +544,17 @@ public class MqttServiceImpl implements MqttService, MqttHandler, MqttClientCall
realDataMonitor = false; realDataMonitor = false;
realDataMonitorSchedulerFuture.cancel(false); realDataMonitorSchedulerFuture.cancel(false);
} }
String cpuLoad = "cpuLoad"; String cpuLoad = "cpuLoad";
String cpuTemp = "cpuTemp";
String memoryOccupyRate = "memoryOccupyRate"; String memoryOccupyRate = "memoryOccupyRate";
String diskFree = "diskFree";
// CPU负载 // CPU负载
double cpuLoadV = Double.parseDouble(decimalFormat.format(sigar.getCpuPerc().getCombined() * 100)); double cpuLoadV = Double.parseDouble(decimalFormat.format(sigar.getCpuPerc().getCombined() * 100));
int[] cpuAndGpuTemp = CoreTempUtil.getCpuAndGpuTemp();
// CPU温度
double cpuTempV = cpuAndGpuTemp[0];
Mem mem = sigar.getMem(); Mem mem = sigar.getMem();
// 内存占用率 // 内存占用率
double memoryOccupyRateV = Double.parseDouble(decimalFormat.format(mem.getUsed() * 1.0 / mem.getTotal() * 100)); double memoryOccupyRateV = Double.parseDouble(decimalFormat.format(mem.getUsed() * 1.0 / mem.getTotal() * 100));
// 磁盘使用容量
String collect = null; Map<String, Object> data = MapUtil.<String, Object>builder()
FileSystem[] diskStores;
Map<String, Object> data = null;
try {
diskStores = sigar.getFileSystemList();
collect = Arrays.stream(diskStores)
.filter(partition -> StrUtil.isNotBlank(partition.getDevName()))
.filter(partition -> 2 == partition.getType())
.map(partition -> {
try {
FileSystemUsage usage = sigar.getFileSystemUsage(partition.getDirName());
return "\"" + StrUtil.removeSuffix(partition.getDevName(), ":\\") + "盘\":\"" +
decimalFormat.format(100d * (usage.getTotal() - usage.getFree()) / usage.getTotal()) + "%\"";
} catch (SigarException e) {
log.error("SigarException: {}", e.getMessage());
}
return "";
})
.collect(Collectors.joining(",", "{", "}"));
} catch (Exception e) {
log.error("硬盘数据获取失败", e);
}
data = MapUtil.<String, Object>builder()
.put(cpuTemp, cpuTempV)
.put(cpuLoad, cpuLoadV) .put(cpuLoad, cpuLoadV)
.put(memoryOccupyRate, memoryOccupyRateV) .put(memoryOccupyRate, memoryOccupyRateV)
.put(diskFree, collect)
.build(); .build();
log.info("采集数据,上报属性: i:{}, mapData:{}", i, data); log.info("采集数据,上报属性: i:{}, mapData:{}", i, data);
List<KvEntry> attrData = getKvEntries(fromString(JSONUtil.toJsonStr(data))); List<KvEntry> attrData = getKvEntries(fromString(JSONUtil.toJsonStr(data)));
......
...@@ -2,15 +2,14 @@ package com.priusis.controller; ...@@ -2,15 +2,14 @@ package com.priusis.controller;
import cn.hutool.core.io.unit.DataSizeUtil; import cn.hutool.core.io.unit.DataSizeUtil;
import cn.hutool.core.map.MapUtil; import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.priusis.lib.R; import com.priusis.lib.R;
import com.priusis.service.common.MacAddrService; import com.priusis.service.common.MacAddrService;
import com.priusis.utils.CoreTempUtil;
import com.priusis.utils.Oshi4NoneSigarUtil; import com.priusis.utils.Oshi4NoneSigarUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.hyperic.sigar.*; import org.hyperic.sigar.CpuInfo;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.OperatingSystem;
import org.hyperic.sigar.Sigar;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -23,10 +22,8 @@ import java.net.SocketException; ...@@ -23,10 +22,8 @@ import java.net.SocketException;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.text.NumberFormat; import java.text.NumberFormat;
import java.util.Arrays;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
/** /**
* @author yangli * @author yangli
...@@ -54,56 +51,11 @@ public class DeviceInfoController { ...@@ -54,56 +51,11 @@ public class DeviceInfoController {
@Scheduled(fixedDelay = 600000) @Scheduled(fixedDelay = 600000)
protected void refresh() throws UnknownHostException { protected void refresh() throws UnknownHostException {
Sigar sigar = new Sigar(); Sigar sigar = new Sigar();
JSONObject diskModel = null;
JSONObject diskCap = null;
JSONObject diskFree = null;
FileSystem[] diskStores;
decimalFormat.applyPattern("#.00"); decimalFormat.applyPattern("#.00");
try {
String diskStoresFromOshiJson = Oshi4NoneSigarUtil.getDiskStoresModelJsonFromOshi();
if (null != diskStoresFromOshiJson) {
diskModel = JSONUtil.parseObj(diskStoresFromOshiJson);
}
diskStores = sigar.getFileSystemList();
diskCap = JSONUtil.parseObj(Arrays.stream(diskStores)
.filter(partition -> StrUtil.isNotBlank(partition.getDevName()))
.filter(partition -> 2 == partition.getType())
.map(partition -> {
try {
FileSystemUsage usage = sigar.getFileSystemUsage(partition.getDirName());
return "\"" + StrUtil.removeSuffix(partition.getDevName(), ":\\") + "盘\":\"" +
DataSizeUtil.format(usage.getTotal() * 1024) + "\"";
} catch (SigarException e) {
log.error("SigarException: {}", e.getMessage());
}
return "";
})
.collect(Collectors.joining(",", "{", "}")));
diskFree = JSONUtil.parseObj(Arrays.stream(diskStores)
.filter(partition -> StrUtil.isNotBlank(partition.getDevName()))
.filter(partition -> 2 == partition.getType())
.map(partition -> {
try {
FileSystemUsage usage = sigar.getFileSystemUsage(partition.getDirName());
return "\"" + StrUtil.removeSuffix(partition.getDevName(), ":\\") + "盘\":\"" +
decimalFormat.format(100d * usage.getFree() / usage.getTotal()) + "%\"";
} catch (SigarException e) {
log.error("SigarException: {}", e.getMessage());
}
return "";
})
.collect(Collectors.joining(",", "{", "}")));
} catch (Exception e) {
log.error("硬盘数据获取失败", e);
}
String memoryCap = ""; String memoryCap = "";
String cpuModel = ""; String cpuModel = "";
// double cpuLoad = 0;
// String memoryAvailable = '';
double cpuTemp = 0; double cpuTemp = 0;
String operatingSystem = ""; String operatingSystem = "";
String baseboard = ""; String baseboard = "";
...@@ -119,15 +71,9 @@ public class DeviceInfoController { ...@@ -119,15 +71,9 @@ public class DeviceInfoController {
Mem mem = sigar.getMem(); Mem mem = sigar.getMem();
memoryCap = DataSizeUtil.format(mem.getTotal()); memoryCap = DataSizeUtil.format(mem.getTotal());
// cpuLoad = Double.parseDouble(new DecimalFormat("#.00").format(sigar.getCpuPerc().getCombined() * 100));
// memoryAvailable = new DecimalFormat("#,##0.###").format(mem.getFree() / Math.pow(1024, 3));
OperatingSystem OS = OperatingSystem.getInstance(); OperatingSystem OS = OperatingSystem.getInstance();
operatingSystem = OS.getVendor() + " " + OS.getName().replace("Win32", "Windows") + " " + OS.getVersion() + "(" + OS.getArch() + ")"; operatingSystem = OS.getVendor() + " " + OS.getName().replace("Win32", "Windows") + " " + OS.getVersion() + "(" + OS.getArch() + ")";
// cpuTemp = Double.parseDouble(new DecimalFormat("#.00").format(OshiUtil.getSensors().getCpuTemperature()));
cpuTemp = CoreTempUtil.getCpuTemp();
} catch (Exception e) { } catch (Exception e) {
log.error("SigarException", e); log.error("SigarException", e);
} }
...@@ -140,12 +86,7 @@ public class DeviceInfoController { ...@@ -140,12 +86,7 @@ public class DeviceInfoController {
.put("ip", ip) .put("ip", ip)
.put("cpuModel", cpuModel) .put("cpuModel", cpuModel)
.put("cpuTemp", cpuTemp) .put("cpuTemp", cpuTemp)
// .put("cpuLoad", cpuLoad)
// .put("memoryAvailable", memoryAvailable)
.put("memoryCap", memoryCap) .put("memoryCap", memoryCap)
.put("diskModel", diskModel)
.put("diskCap", diskCap)
.put("diskFree", diskFree)
.build(); .build();
} }
......
...@@ -5,8 +5,6 @@ import cn.hutool.core.collection.ConcurrentHashSet; ...@@ -5,8 +5,6 @@ import cn.hutool.core.collection.ConcurrentHashSet;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.StreamProgress; import cn.hutool.core.io.StreamProgress;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpResponse;
...@@ -15,18 +13,14 @@ import cn.hutool.json.JSONArray; ...@@ -15,18 +13,14 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.priusis.cache.InstalledProgramCache; import com.priusis.cache.InstalledProgramCache;
import com.priusis.lib.R; import com.priusis.lib.R;
import com.priusis.service.common.MacAddrService; import com.priusis.service.common.MacAddrService;
import com.priusis.utils.ProcessExtensionsApqUtil;
import com.priusis.utils.SysConfigUtil; import com.priusis.utils.SysConfigUtil;
import com.priusis.vo.FacilityProgramVo;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -35,10 +29,8 @@ import javax.servlet.http.HttpServletResponse; ...@@ -35,10 +29,8 @@ import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
...@@ -308,153 +300,4 @@ public class ProgramController { ...@@ -308,153 +300,4 @@ public class ProgramController {
.map(R::success) .map(R::success)
.orElseGet(R::success); .orElseGet(R::success);
} }
//// @Scheduled(fixedDelay = 60000)
public void addProgram2Platform(String bizRequestId) throws IOException {
String mac = macAddrService.getMacAddr();
if (StrUtil.isBlank(mac)) {
log.warn("未获取到MAC地址");
return;
}
// 已安装软件列表
List<FacilityProgramVo> programNames = installedProgramCache.getPrograms()
.stream().map(FacilityProgramVo::toFacilityProgramVoFromCache).sorted().collect(Collectors.toList());
log.info("收到平台扫描软件请求,已安装软件:{}", programNames.size());
// 扫描进程列表
Set<String> processNames = new HashSet<>();
Process process = Runtime.getRuntime().exec("cmd /c tasklist"
+ " -fi " + '"' + "USERNAME ne NT AUTHORITY\\NETWORK SERVICE" + '"'
+ " -fi " + '"' + "USERNAME ne NT AUTHORITY\\LOCAL SERVICE" + '"'
+ " -fi " + '"' + "USERNAME ne Window Manager\\UMFD-0" + '"'
+ " -fi " + '"' + "USERNAME ne Font Driver Host\\UMFD-1" + '"'
+ " -fi " + '"' + "USERNAME ne Font Driver Host\\DWM-1" + '"'
+ " -fi " + '"' + "USERNAME ne 暂缺" + '"'
+ " /fo csv");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"))) {
reader.readLine();
String line;
while ((line = reader.readLine()) != null) {
// 去除注册表的数据
String taskProcess = line.substring(1, line.indexOf("\",\""));
if (!containsOfCache(taskProcess) && !excludePrograms.contains(taskProcess)) {
processNames.add(taskProcess);
}
}
process.destroy();
}
List<FacilityProgramVo> processNameVos = Lists.newArrayList();
for (String processName : processNames) {
processNameVos.add(FacilityProgramVo.toFacilityProgramVoFromProcessName(processName));
}
log.info("收到平台扫描软件请求,扫描进程列表:{}", processNameVos.size());
String postResult = HttpUtil.post(gateway + addProgramUrl,
JSONUtil.createObj()
.set("macAddress", mac)
.set("requestId", bizRequestId)
.set("programList", programNames)
.set("processList", processNameVos)
.toString());
log.info("设备软件扫描,result:{},requestId:{},programList:{},processList:{}", postResult, bizRequestId, programNames.size(), processNameVos.size());
}
private boolean containsOfCache(String taskProcess) {
boolean result = false;
try {
for (Map<String, String> program : installedProgramCache.getPrograms()) {
String startPath = MapUtil.getStr(program, "startPath");
if (!StrUtil.isBlank(startPath) && startPath.contains("." + taskProcess)) {
result = true;
continue;
}
}
} catch (Exception e) {
log.error("系统异常", e);
}
return result;
}
public static void main(String[] args) throws InterruptedException, IOException {
String t = "{\"changeContent\":\"拔出U盘/移动硬盘\",\"changeRemark\":\"USB 大容量存储设备;;Storage Media;兼容 USB 存储设备;class\u003dUSB;\",\"changeType\":2,\"deviceClass\":\"USB_DRIVE\"}";
System.out.println(t);
/*int exitVal = -1;
try {
exitVal = Runtime.getRuntime().exec("cmd /c \"D:\\work\\priusis\\priusis-iot\\apq-iot\\apq-client\\tools\\install-package\boot\\dist\\apq-info-install.exe\"").waitFor();
} catch (Exception e) {
log.error("执行安装文件失败", e);
}
System.out.println(exitVal);
System.out.println("========");*/
// System.out.println("cmd /c tasklist -fi " + '"' + "imagename ne NT AUTHORITY SYSTEM" + '"' + " -fi " + '"' + "imagename ne NT AUTHORITY SYSTEM" + '"' + " /fo csv");
/* int exitVal = -1;
try {
exitVal = Runtime.getRuntime().exec("cmd /c \"D:\\work\\priusis\\priusis-iot\\apq-iot\\apq-client\\tools\\install-package\\boot\\dist\\阿普奇检测客户端_x32.exe\" /sp- /silent /norestart /suppressmsgboxes").waitFor();
} catch (Exception e) {
log.error("执行安装文件失败", e);
}
System.out.println(exitVal);*/
// =================================================================
/*String url = "http://apuqi.oss-cn-zhangjiakou.aliyuncs.com/ossdata/20220420/f65fe478633c43f493a0b60d13717504.exe";
String fileName = url.substring(url.lastIndexOf("/") + 1);
System.out.println(fileName);
Runtime.getRuntime().exec("cmd /c \"C:\\apqdownloads\\f65fe478633c43f493a0b60d13717504.exe\"");
System.out.println(11);*/
}
@Scheduled(fixedDelay = 360000)
protected void autoUpgradeJob() {
try {
log.info("执行自动安装文件 ==============1");
boolean autoUpgrade = Convert.toBool(SysConfigUtil.getProperty("auto.upgrade"), true);
if (!autoUpgrade) return;
String downloadPath = SysConfigUtil.getProperty("download.path",
System.getProperty("user.dir").substring(0, 3) + "apqdownloads");
File dir = new File(downloadPath);
if (!dir.exists()) dir.mkdirs();
log.info("执行自动安装文件 ==============2");
list("upgrade", 1, 10000).getData().getRecords()
.parallelStream()
// upgradeTime
.filter(m -> BooleanUtil.toBoolean(m.get("isUpgrade")) && ObjectUtil.notEqual(m.get("version"), m.get("localVersion")))
.forEach(m -> {
log.info("执行自动安装文件 ==============3");
String url = m.get("url");
String fileName = url.substring(url.lastIndexOf("/") + 1);
File fileE = new File(downloadPath + File.separator + fileName);
if (!fileE.exists()) {
HttpResponse rsp = HttpUtil.createGet(url).execute(true);
fileE = rsp.writeBodyForFile(dir, null);
}
// int exitVal = -1;
try {
String exeCmd = "autoExe.bat \"" + fileE.getPath() + "\"";
ProcessExtensionsApqUtil.apq_CreateProcessAsUser(exeCmd);
log.info("执行安装文件 {} ", exeCmd);
// Runtime.getRuntime().exec("cmd /c \"C:\\apqdownloads\\f65fe478633c43f493a0b60d13717504.exe\" /sp- /silent /norestart /suppressmsgboxes");
installedProgramCache.updateProgramInfoCacheByNameAndVersion(m.get("name"), m.get("version"));
} catch (Exception e) {
log.error("执行安装文件 {} 失败", fileE.getPath(), e);
}
log.info("执行安装文件 ==============");
// if (exitVal == 0) {
// String reqUrl = gateway + StrUtil.format(upgradeStatusUpIssueUrl, macAddrService.getMacAddr(), m.get("id"));
// HttpUtil.post(reqUrl, (String) null);
// }
});
} catch (Exception e) {
log.error("自动升级任务执行异常", e);
}
}
} }
package com.priusis.utils;
import cn.hutool.system.oshi.OshiUtil;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.ptr.IntByReference;
import java.util.Arrays;
/**
* Java通过JNA调用CoreTemp.dll实现温度采集 方式1
* https://github.com/boyang987/BLHWScaner
*/
public class CoreTemp1Util {
static final String coreFromOs = "CoreTemp" + (OshiUtil.getOs().getBitness() == 64 ? "x64" : "");
static final String WR0_DLL_NAME = ParseUrlUtil.parseAbsolutePath("/core/" + coreFromOs + ".dll", System.getProperty("user.dir") + "/apq-pc-common");
static CoreTemp WR0_INSTANCE = Native.loadLibrary(WR0_DLL_NAME, CoreTemp.class);
/**
* 获取cpu温度
*
* @return
*/
public static boolean GetCpuTemp(IntByReference cpuCoreNum, int[] cpuTemp) {
return WR0_INSTANCE.GetCpuTemp(cpuCoreNum, cpuTemp);
}
/**
* 获取gpu温度
*
* @return
*/
public static boolean GetGpuTemp(IntByReference pSensorNum, int[] gpuTemp) {
return WR0_INSTANCE.GetGpuTemp(pSensorNum, gpuTemp);
}
/**
* CPU温度
*/
public static int getCpuTemp() throws Exception {
IntByReference cpuCoreNum = new IntByReference(0);
int[] cpuTemp = new int[64];
CoreTemp1Util.GetCpuTemp(cpuCoreNum, cpuTemp);
return Arrays.stream(cpuTemp).max().getAsInt();
}
/**
* GPU温度
*/
public static int getGpuTemp() throws Exception {
IntByReference pSensorNum = new IntByReference(0);
int[] gpuTemp = new int[64];
CoreTemp1Util.GetGpuTemp(pSensorNum, gpuTemp);
return Arrays.stream(gpuTemp).max().getAsInt();
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// while (true) {
IntByReference cpuCoreNum = new IntByReference(0);
int[] cpuTemp = new int[64];
//WinRing0初始化
CoreTemp1Util.GetCpuTemp(cpuCoreNum, cpuTemp);
// int value = cpuCoreNum.getValue();
// System.out.println(value);
// for (int i = 0; i < value; i++) {
// System.out.println(cpuTemp[i]);
// }
IntByReference pSensorNum = new IntByReference(0);
int[] gpuTemp = new int[64];
CoreTemp1Util.GetGpuTemp(pSensorNum, gpuTemp);
System.out.println("CPU温度:" + Arrays.stream(cpuTemp).max().getAsInt()); // cpu温度
System.out.println("GPU温度:" + Arrays.stream(gpuTemp).max().getAsInt()); // gpu温度
System.out.println("===============================");
// Thread.sleep(1500);
// }
}
private interface CoreTemp extends Library {
// 声明将要调用的DLL中的方法
boolean GetCpuTemp(IntByReference cpuCoreNum, int[] cpuTemp);
boolean GetGpuTemp(IntByReference pSensorNum, int[] gpuTemp);
}
}
package com.priusis.utils;
import com.sun.jna.NativeLibrary;
import com.sun.jna.ptr.IntByReference;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
/**
* Java通过JNA调用CoreTemp.dll实现温度采集
* https://github.com/boyang987/BLHWScaner
*/
@Slf4j
public class CoreTempUtil {
// static final String coreFromOs = "CoreTemp" + (OshiUtil.getOs().getBitness() == 64 ? "x64" : "");
// static final String WR0_DLL_NAME = ParseUrlUtil.parseAbsolutePath("/core/" + coreFromOs + ".dll", System.getProperty("user.dir") + "/apq-pc-common");
static final String WR0_DLL_NAME = ParseUrlUtil.parseAbsolutePath("/core/CoreTemp.dll", System.getProperty("user.dir") + "/apq-pc-common");
/**
* CPU温度
*/
public static int[] getCpuAndGpuTemp() throws Exception {
NativeLibrary instance = null;
int[] cpuAndGpuTemp = new int[2];
try {
instance = NativeLibrary.getInstance(WR0_DLL_NAME);
IntByReference cpuCoreNum = new IntByReference(0);
int[] cpuTemp = new int[64];
int[] gpuTemp = new int[64];
//WinRing0初始化
instance.getFunction("GetCpuTemp").invoke(new Object[]{cpuCoreNum, cpuTemp});
int cpuTempV = Arrays.stream(cpuTemp).max().getAsInt();
instance.getFunction("GetGpuTemp").invoke(new Object[]{cpuCoreNum, gpuTemp});
int gpuTempV = Arrays.stream(gpuTemp).max().getAsInt();
cpuAndGpuTemp[0] = cpuTempV;
cpuAndGpuTemp[1] = gpuTempV;
return cpuAndGpuTemp;
} catch (Throwable e) {
log.error("获取CPU温度异常", e);
cpuAndGpuTemp[0] = 0;
cpuAndGpuTemp[1] = 0;
return cpuAndGpuTemp;
} finally {
if (null != instance) {
WinRing0Util.doDeinitializeOls();
instance.dispose();
instance = null;
}
}
}
/**
* CPU温度
*/
public static int getCpuTemp() throws Exception {
NativeLibrary instance = null;
try {
instance = NativeLibrary.getInstance(WR0_DLL_NAME);
IntByReference cpuCoreNum = new IntByReference(0);
int[] cpuTemp = new int[64];
//WinRing0初始化
instance.getFunction("GetCpuTemp").invoke(new Object[]{cpuCoreNum, cpuTemp});
return Arrays.stream(cpuTemp).max().getAsInt();
} catch (Exception e) {
log.error("获取CPU温度异常", e);
return 0;
} finally {
if (null != instance) {
WinRing0Util.doDeinitializeOls();
instance.dispose();
instance = null;
System.gc();
}
}
}
/**
* GPU温度
*/
public static int getGpuTemp() throws Exception {
NativeLibrary instance = null;
try {
instance = NativeLibrary.getInstance(WR0_DLL_NAME);
IntByReference pSensorNum = new IntByReference(0);
int[] gpuTemp = new int[64];
instance.getFunction("GetGpuTemp").invoke(new Object[]{pSensorNum, gpuTemp});
return Arrays.stream(gpuTemp).max().getAsInt();
} catch (Exception e) {
log.error("GPU温度", e);
return 0;
} finally {
if (null != instance) {
WinRing0Util.doDeinitializeOls();
instance.dispose();
instance = null;
}
}
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
/*while (true) {
NativeLibrary instance = NativeLibrary.getInstance(WR0_DLL_NAME);
IntByReference cpuCoreNum = new IntByReference(0);
int[] cpuTemp = new int[64];
//WinRing0初始化
instance.getFunction("GetCpuTemp").invoke(new Object[]{cpuCoreNum, cpuTemp});
int value = cpuCoreNum.getValue();
System.out.println(value);
for (int i = 0; i < value; i++) {
System.out.println(cpuTemp[i]);
}
IntByReference pSensorNum = new IntByReference(0);
int[] gpuTemp = new int[64];
instance.getFunction("GetGpuTemp").invoke(new Object[]{pSensorNum, gpuTemp});
System.out.println("CPU温度:" + Arrays.stream(cpuTemp).max().getAsInt()); // cpu温度
System.out.println("GPU温度:" + Arrays.stream(gpuTemp).max().getAsInt()); // gpu温度
instance.dispose();
System.out.println("===============================");
Thread.sleep(1500);
}*/
while (true) {
int[] cpuAndGpuTemp = CoreTempUtil.getCpuAndGpuTemp();
System.out.println(cpuAndGpuTemp[0]);
System.out.println(cpuAndGpuTemp[1]);
System.out.println("===============================");
Thread.sleep(1500);
}
}
}
package com.priusis.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import oshi.util.FormatUtil;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.stream.Collectors;
/**
* smartctl
* https://www.smartmontools.org/
*/
@Slf4j
public class DiskSmartUtil {
static final String SMARTCTL_EXE_PATH = ParseUrlUtil.parseAbsolutePath("/core/smartctl.exe", System.getProperty("user.dir") + "/apq-pc-client");
/**
* 获取硬盘温度smart信息
*
* @return
* @throws IOException
*/
public static Map<String, String> getDiskInfoFromSmart() throws IOException {
Map<String, String> result = new HashMap<>();
Process process = null;
String smartScan = "";
try {
process = Runtime.getRuntime().exec(SMARTCTL_EXE_PATH + " --scan -j"); // AHCI ATA NVMe https://blog.csdn.net/u012459957/article/details/51226658
try (InputStream inputStream = process.getInputStream()) {
smartScan = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
}
int index = 0;
JSONArray devices = JSONUtil.parseObj(smartScan).getJSONArray("devices");
List<String> deviceDataEList = new ArrayList<>();
for (int i = 0; i < devices.size(); i++) {
String name = devices.getJSONObject(i).getStr("name");
process = Runtime.getRuntime().exec(SMARTCTL_EXE_PATH + " -A -i " + name + " -j");
String smartctlAinfo = "";
try (InputStream inputStream = process.getInputStream()) {
smartctlAinfo = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
}
JSONObject smartctlInfoJsonObject = JSONUtil.parseObj(smartctlAinfo);
JSONObject temperature = smartctlInfoJsonObject.getJSONObject("temperature");
String diskTemp = "?";
if (null != temperature) {
diskTemp = temperature.getInt("current") + "";
}
String serialNumber = smartctlInfoJsonObject.getStr("serial_number");
String modelName = smartctlInfoJsonObject.getStr("model_name");
if (!deviceDataEList.contains(modelName)) {
StringBuffer sb = new StringBuffer();
String diskType = "";
if (smartctlAinfo.contains("HHD") || smartctlAinfo.contains("Head_Flying_Hours") || smartctlAinfo.contains("Load_Cycle_Count")) {
diskType = "机械硬盘";
} else if (smartctlAinfo.contains("SSD") || smartctlAinfo.contains("Solid State Device")) {
diskType = "固态硬盘";
}
sb.append("{");
sb.append("\"diskTemp\":\"").append(diskTemp).append("\",");
sb.append("\"diskType\":\"").append(diskType).append("\",");
sb.append("\"serialNumber\":\"").append(serialNumber).append("\"");
sb.append("}");
deviceDataEList.add(modelName);
result.put(modelName, sb.toString());
}
}
} catch (Exception e) {
log.error("获取硬盘smart信息异常", e);
}
if (null != process && process.isAlive()) {
process.destroy();
}
return result;
}
public static String getDeviceTemp() {
try {
Map<String, String> diskInfoFromSmartMap = DiskSmartUtil.getDiskInfoFromSmart();
StringBuilder sb = new StringBuilder();
for (String key : diskInfoFromSmartMap.keySet()) {
JSONObject diskInfoFromJson = JSONUtil.parseObj(diskInfoFromSmartMap.get(key));
String diskTemp = diskInfoFromJson.getStr("diskTemp");
if (!StrUtil.equals("?", diskTemp)) {
sb.append(key).append(":").append(diskTemp).append("℃");
sb.append(",");
}
}
return sb.substring(0, sb.length() - 1);
} catch (IOException e) {
log.error("获取硬盘温度smart信息异常", e);
}
return "";
}
public static void main(String[] args) throws IOException {
Map<String, String> diskInfoFromSmartMap = DiskSmartUtil.getDiskInfoFromSmart();
System.out.println(diskInfoFromSmartMap);
StringBuilder sb = new StringBuilder();
for (String key : diskInfoFromSmartMap.keySet()) {
JSONObject diskInfoFromJson = JSONUtil.parseObj(diskInfoFromSmartMap.get(key));
sb.append(key).append(":").append(diskInfoFromJson.getStr("diskTemp")).append("℃");
sb.append(",");
}
System.out.println(sb.substring(0, sb.length() - 1).toString());
}
}
package com.priusis.utils; package com.priusis.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.system.oshi.OshiUtil; import cn.hutool.system.oshi.OshiUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.hyperic.sigar.SigarException;
import oshi.hardware.HWDiskStore;
import oshi.software.os.OperatingSystem; import oshi.software.os.OperatingSystem;
import oshi.util.FormatUtil;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j @Slf4j
public class Oshi4NoneSigarUtil { public class Oshi4NoneSigarUtil {
...@@ -33,63 +25,4 @@ public class Oshi4NoneSigarUtil { ...@@ -33,63 +25,4 @@ public class Oshi4NoneSigarUtil {
return os; return os;
} }
public static String getDiskStoresModelFromOshi() {
try {
HWDiskStore[] diskStoresFromOshi = OshiUtil.getHardware().getDiskStores();
// ADATA_IMSS314-128GM(128GB/固态硬盘)
Map<String, String> diskInfoFromSmartMap = DiskSmartUtil.getDiskInfoFromSmart();
diskStoresModel = Arrays.stream(diskStoresFromOshi)
.map(diskStoreFromOshi -> StrUtil.removeSuffix(StrUtil.removeSuffix(diskStoreFromOshi.getModel(), " (标准磁盘驱动器)"), " (Standard disk drives)")
+ "("
+ FormatUtil.formatBytesDecimal(diskStoreFromOshi.getSize())
+ diskTypeFromSmart(diskInfoFromSmartMap, StrUtil.removeSuffix(StrUtil.removeSuffix(diskStoreFromOshi.getModel(), " (标准磁盘驱动器)"), " (Standard disk drives)"))
+ ")")
.collect(Collectors.joining(","));
} catch (Exception e) {
log.error("硬盘型号数据获取失败", e);
}
return diskStoresModel;
}
public static String getDiskStoresModelJsonFromOshi() {
try {
HWDiskStore[] diskStoresFromOshi = OshiUtil.getHardware().getDiskStores();
// {"PHYSICALDRIVE0":"BIWIN SSD (Standard disk drives)(1904051301056)"}
diskStoresModel = Arrays.stream(diskStoresFromOshi)
.map(diskStoreFromOshi -> "\"" + diskStoreFromOshi.getName().replace("\\\\.\\", "") + "\":\"" +
StrUtil.removeSuffix(diskStoreFromOshi.getModel(), " (标准磁盘驱动器)") + "(" + diskStoreFromOshi.getSerial().trim() + ")\"")
.collect(Collectors.joining(",", "{", "}"));
} catch (Exception e) {
log.error("硬盘型号数据获取失败", e);
}
return diskStoresModel;
}
public static String diskTypeFromSmart(Map<String, String> diskInfoFromSmartMap, String diskModel) {
String diskInfoFromSmart = diskInfoFromSmartMap.get(diskModel);
String diskType = "/固态硬盘";
if (null != diskInfoFromSmart) {
if (diskInfoFromSmart.contains("机械硬盘")) {
diskType = "/机械硬盘";
} else if (diskInfoFromSmart.contains("固态硬盘")) {
diskType = "/固态硬盘";
}
}
return diskType;
}
public static void main(String[] args) throws SigarException {
// System.out.println(Oshi4NoneSigarUtil.getDiskStoresModelFromOshi());
/*Sigar sigar = new Sigar();
FileSystem[] diskStores = sigar.getFileSystemList();
for (FileSystem diskStore : diskStores) {
System.out.println(diskStore.getSysTypeName());
}*/
System.out.println(getDiskStoresModelJsonFromOshi());
}
} }
package com.priusis.utils;
import cn.hutool.system.oshi.OshiUtil;
import com.sun.jna.Library;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import lombok.extern.slf4j.Slf4j;
/**
* CreatProcess
*/
@Slf4j
public class ProcessExtensionsApqUtil {
// static final String CP_DLL_NAME = ParseUrlUtil.parseAbsolutePath("/core/apq_CreatProcess" + (OshiUtil.getOs().getBitness() == 64 ? "x64" : "") + ".dll", System.getProperty("user.dir") + "/apq-pc-common");
static final String CP_DLL_NAME = ParseUrlUtil.parseAbsolutePath("/core/apq_CreatProcess.dll", System.getProperty("user.dir") + "/apq-pc-common");
static ProcessExtensionsApq CP_API_INSTANCE = Native.loadLibrary(CP_DLL_NAME, ProcessExtensionsApq.class);
/**
* 获取gpu温度
*
* @return
*/
public static int apq_CreateProcessAsUser(String pNameStr) {
int i = 0;
try {
log.info("=============================== s {}", pNameStr);
Pointer pName = new Memory(pNameStr.length() + 1); // WARNING: assumes ascii-only string
pName.setString(0, pNameStr);
i = CP_API_INSTANCE.apq_CreateProcessAsUser(pName);
log.info("=============================== e" + i);
} catch (Exception e) {
log.error("apq_CreateProcessAsUser error", e);
}
return i;
}
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String pNameStr = "C:\\windows\\notepad.exe D:\\info.log";
ProcessExtensionsApqUtil.apq_CreateProcessAsUser(pNameStr);
}
private interface ProcessExtensionsApq extends Library {
// 声明将要调用的DLL中的方法
int apq_CreateProcessAsUser(Pointer pName);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论