提交 6c622901 authored 作者: wangqiang's avatar wangqiang

install service

上级 73d2dcb6
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.10</version> <version>2.4.10</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.priusis</groupId> <groupId>com.priusis</groupId>
<artifactId>apq-pc-client</artifactId> <artifactId>apq-pc-client</artifactId>
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
<name>apq-pc-client</name> <name>apq-pc-client</name>
<description>apq-pc-client</description> <description>apq-pc-client</description>
<properties> <properties>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<!-- 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> <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>
<spring.version>4.3.4.RELEASE</spring.version> <spring.version>4.3.4.RELEASE</spring.version>
<spring-boot.version>2.4.10</spring-boot.version> <spring-boot.version>2.4.10</spring-boot.version>
<slf4j.version>1.7.7</slf4j.version> <slf4j.version>1.7.7</slf4j.version>
<winsw.version>2.0.1</winsw.version> <winsw.version>2.0.1</winsw.version>
<pkg.name>apq-pc-client</pkg.name> <pkg.name>apq-pc-client</pkg.name>
<pkg.user>priusis-iot</pkg.user> <pkg.user>priusis-iot</pkg.user>
<pkg.unixLogFolder>/var/log/${pkg.name}</pkg.unixLogFolder> <pkg.unixLogFolder>/var/log/${pkg.name}</pkg.unixLogFolder>
<pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder> <pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
<pkg.win.dist>${project.build.directory}/windows</pkg.win.dist> <pkg.win.dist>${project.build.directory}/windows</pkg.win.dist>
<priusis-iot.version>1.0.0-SNAPSHOT</priusis-iot.version> <priusis-iot.version>1.0.0-SNAPSHOT</priusis-iot.version>
</properties> </properties>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.hibernate.validator</groupId> <groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId> <artifactId>hibernate-validator</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>mysql</groupId> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.priusis</groupId> <groupId>com.priusis</groupId>
<artifactId>netty-mqtt</artifactId> <artifactId>netty-mqtt</artifactId>
<version>${priusis-iot.version}</version> <version>${priusis-iot.version}</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<groupId>io.netty</groupId> <groupId>io.netty</groupId>
<artifactId>netty-all</artifactId> <artifactId>netty-all</artifactId>
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.eclipse.paho</groupId> <groupId>org.eclipse.paho</groupId>
<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> <dependency>
<groupId>com.sun.winsw</groupId> <groupId>com.sun.winsw</groupId>
<artifactId>winsw</artifactId> <artifactId>winsw</artifactId>
<version>${winsw.version}</version> <version>${winsw.version}</version>
<classifier>bin</classifier> <classifier>bin</classifier>
<type>exe</type> <type>exe</type>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version> <version>${commons-lang3.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.netty</groupId> <groupId>io.netty</groupId>
<artifactId>netty-common</artifactId> <artifactId>netty-common</artifactId>
<version>${netty.version}</version> <version>${netty.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.netty</groupId> <groupId>io.netty</groupId>
<artifactId>netty-transport</artifactId> <artifactId>netty-transport</artifactId>
<version>${netty.version}</version> <version>${netty.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version> <version>${slf4j.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version> <version>${jackson.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.moquette</groupId> <groupId>io.moquette</groupId>
<artifactId>moquette-broker</artifactId> <artifactId>moquette-broker</artifactId>
<version>${moquette.version}</version> <version>${moquette.version}</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.2</version> <version>3.4.3.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>cn.hutool</groupId> <groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId> <artifactId>hutool-all</artifactId>
<version>5.7.11</version> <version>5.7.11</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.github.oshi</groupId> <groupId>com.github.oshi</groupId>
<artifactId>oshi-core</artifactId> <artifactId>oshi-core</artifactId>
<version>3.5.0</version> <version>3.5.0</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.ini4j</groupId> <groupId>org.ini4j</groupId>
<artifactId>ini4j</artifactId> <artifactId>ini4j</artifactId>
<version>0.5.2</version> <version>0.5.2</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>${pkg.name}-${project.version}</finalName> <finalName>${pkg.name}-${project.version}</finalName>
<resources> <resources>
<resource> <resource>
<directory>${project.basedir}/src/main/resources</directory> <directory>${project.basedir}/src/main/resources</directory>
</resource> </resource>
</resources> </resources>
<pluginManagement> <pluginManagement>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version> <version>2.5.1</version>
<configuration> <configuration>
<source>${java.version}</source> <source>${java.version}</source>
<target>${java.version}</target> <target>${java.version}</target>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId> <artifactId>maven-resources-plugin</artifactId>
<version>2.7</version> <version>2.7</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId> <artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version> <version>2.2.1</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId> <artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version> <version>3.0.2</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId> <artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version> <version>3.0.0</version>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version> <version>${spring-boot.version}</version>
<configuration> <configuration>
<excludes> <excludes>
<exclude> <exclude>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
</exclude> </exclude>
</excludes> </excludes>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
</pluginManagement> </pluginManagement>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId> <artifactId>maven-dependency-plugin</artifactId>
<executions> <executions>
<execution> <execution>
<id>copy</id> <id>copy</id>
<phase>package</phase> <phase>package</phase>
<goals> <goals>
<goal>copy</goal> <goal>copy</goal>
</goals> </goals>
<configuration> <configuration>
<artifactItems> <artifactItems>
<artifactItem> <artifactItem>
<groupId>com.sun.winsw</groupId> <groupId>com.sun.winsw</groupId>
<artifactId>winsw</artifactId> <artifactId>winsw</artifactId>
<classifier>bin</classifier> <classifier>bin</classifier>
<type>exe</type> <type>exe</type>
<destFileName>service.exe</destFileName> <destFileName>service.exe</destFileName>
</artifactItem> </artifactItem>
</artifactItems> </artifactItems>
<outputDirectory>${pkg.win.dist}</outputDirectory> <outputDirectory>${pkg.win.dist}</outputDirectory>
</configuration> </configuration>
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId> <artifactId>maven-resources-plugin</artifactId>
<executions> <executions>
<execution> <execution>
<id>copy-service-conf</id> <id>copy-service-conf</id>
<phase>process-resources</phase> <phase>process-resources</phase>
<goals> <goals>
<goal>copy-resources</goal> <goal>copy-resources</goal>
</goals> </goals>
<configuration> <configuration>
<outputDirectory>${project.build.directory}/conf</outputDirectory> <outputDirectory>${project.build.directory}/conf</outputDirectory>
<resources> <resources>
<resource> <resource>
<directory>src/main/resources</directory> <directory>src/main/resources</directory>
<excludes> <excludes>
<exclude>logback.xml</exclude> <exclude>logback.xml</exclude>
</excludes> </excludes>
<filtering>false</filtering> <filtering>false</filtering>
</resource> </resource>
<resource> <resource>
<directory>src/main/conf</directory> <directory>src/main/conf</directory>
<filtering>true</filtering> <filtering>true</filtering>
</resource> </resource>
</resources> </resources>
<filters> <filters>
<filter>src/main/filters/unix.properties</filter> <filter>src/main/filters/unix.properties</filter>
</filters> </filters>
</configuration> </configuration>
</execution> </execution>
<execution> <execution>
<id>copy-win-conf</id> <id>copy-win-conf</id>
<phase>process-resources</phase> <phase>process-resources</phase>
<goals> <goals>
<goal>copy-resources</goal> <goal>copy-resources</goal>
</goals> </goals>
<configuration> <configuration>
<outputDirectory>${pkg.win.dist}/conf</outputDirectory> <outputDirectory>${pkg.win.dist}/conf</outputDirectory>
<resources> <resources>
<resource> <resource>
<directory>src/main/resources</directory> <directory>src/main/resources</directory>
<excludes> <excludes>
<exclude>logback.xml</exclude> <exclude>logback.xml</exclude>
</excludes> </excludes>
<filtering>false</filtering> <filtering>false</filtering>
</resource> </resource>
<resource> <resource>
<directory>src/main/conf</directory> <directory>src/main/conf</directory>
<excludes> <excludes>
<exclude>pi-gateway.conf</exclude> <exclude>pi-gateway.conf</exclude>
</excludes> </excludes>
<filtering>true</filtering> <filtering>true</filtering>
</resource> </resource>
</resources> </resources>
<filters> <filters>
<filter>src/main/filters/windows.properties</filter> <filter>src/main/filters/windows.properties</filter>
</filters> </filters>
</configuration> </configuration>
</execution> </execution>
<execution> <execution>
<id>copy-control</id> <id>copy-control</id>
<phase>process-resources</phase> <phase>process-resources</phase>
<goals> <goals>
<goal>copy-resources</goal> <goal>copy-resources</goal>
</goals> </goals>
<configuration> <configuration>
<outputDirectory>${project.build.directory}/control</outputDirectory> <outputDirectory>${project.build.directory}/control</outputDirectory>
<resources> <resources>
<resource> <resource>
<directory>src/main/scripts/control</directory> <directory>src/main/scripts/control</directory>
<filtering>true</filtering> <filtering>true</filtering>
</resource> </resource>
</resources> </resources>
<filters> <filters>
<filter>src/main/filters/unix.properties</filter> <filter>src/main/filters/unix.properties</filter>
</filters> </filters>
</configuration> </configuration>
</execution> </execution>
<execution> <execution>
<id>copy-windows-control</id> <id>copy-windows-control</id>
<phase>process-resources</phase> <phase>process-resources</phase>
<goals> <goals>
<goal>copy-resources</goal> <goal>copy-resources</goal>
</goals> </goals>
<configuration> <configuration>
<outputDirectory>${pkg.win.dist}</outputDirectory> <outputDirectory>${pkg.win.dist}</outputDirectory>
<resources> <resources>
<resource> <resource>
<directory>src/main/scripts/windows</directory> <directory>src/main/scripts/windows</directory>
<filtering>true</filtering> <filtering>true</filtering>
</resource> </resource>
</resources> </resources>
<filters> <filters>
<filter>src/main/filters/windows.properties</filter> <filter>src/main/filters/windows.properties</filter>
</filters> </filters>
</configuration> </configuration>
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId> <artifactId>maven-jar-plugin</artifactId>
<configuration> <configuration>
<archive> <archive>
<manifestEntries> <manifestEntries>
<Implementation-Title>apq-pc-client</Implementation-Title> <Implementation-Title>apq-pc-client</Implementation-Title>
<Implementation-Version>${project.version}</Implementation-Version> <Implementation-Version>${project.version}</Implementation-Version>
</manifestEntries> </manifestEntries>
</archive> </archive>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <configuration>
<classifier>boot</classifier> <classifier>boot</classifier>
<layout>ZIP</layout> <layout>ZIP</layout>
<executable>true</executable> <executable>true</executable>
<excludeDevtools>true</excludeDevtools> <excludeDevtools>true</excludeDevtools>
<embeddedLaunchScriptProperties> <embeddedLaunchScriptProperties>
<confFolder>${pkg.installFolder}/conf</confFolder> <confFolder>${pkg.installFolder}/conf</confFolder>
<logFolder>${pkg.unixLogFolder}</logFolder> <logFolder>${pkg.unixLogFolder}</logFolder>
<logFilename>${pkg.name}.out</logFilename> <logFilename>${pkg.name}.out</logFilename>
<initInfoProvides>${pkg.name}</initInfoProvides> <initInfoProvides>${pkg.name}</initInfoProvides>
</embeddedLaunchScriptProperties> </embeddedLaunchScriptProperties>
</configuration> </configuration>
<executions> <executions>
<execution> <execution>
<goals> <goals>
<goal>repackage</goal> <goal>repackage</goal>
</goals> </goals>
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId> <artifactId>maven-assembly-plugin</artifactId>
<configuration> <configuration>
<finalName>${pkg.name}</finalName> <finalName>${pkg.name}</finalName>
<descriptors> <descriptors>
<descriptor>src/main/assembly/windows.xml</descriptor> <descriptor>src/main/assembly/windows.xml</descriptor>
</descriptors> </descriptors>
</configuration> </configuration>
<executions> <executions>
<execution> <execution>
<id>assembly</id> <id>assembly</id>
<phase>package</phase> <phase>package</phase>
<goals> <goals>
<goal>single</goal> <goal>single</goal>
</goals> </goals>
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
</project> </project>
package com.priusis; package com.priusis;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
@EnableScheduling @EnableScheduling
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class}) @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class})
public class ApqClientApplication { public class ApqClientApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(ApqClientApplication.class, args); SpringApplication.run(ApqClientApplication.class, args);
} }
} }
package com.priusis.controller; 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.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import cn.hutool.system.oshi.OshiUtil; import cn.hutool.system.oshi.OshiUtil;
import com.priusis.lib.R; import com.priusis.lib.R;
import com.priusis.util.MacAddrUtil; import com.priusis.util.MacAddrUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
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;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import oshi.hardware.HWDiskStore; import oshi.hardware.HWDiskStore;
import oshi.hardware.HWPartition; import oshi.hardware.HWPartition;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.io.File; import java.io.File;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.SocketException; import java.net.SocketException;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.Arrays; import java.util.Arrays;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
* @author yangli * @author yangli
* @since 2021/09/06 * @since 2021/09/06
*/ */
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping(value = "device_info") @RequestMapping(value = "device_info")
public class DeviceInfoController { public class DeviceInfoController {
private Map<String, Object> info; private Map<String, Object> info;
@GetMapping(value = "get") @GetMapping(value = "get")
public R<Map<String, Object>> get() throws UnknownHostException, SocketException { public R<Map<String, Object>> get() throws UnknownHostException, SocketException {
if (info == null) refresh(); if (info == null) refresh();
return R.success(info); return R.success(info);
} }
@Scheduled(fixedDelay = 5000) @Scheduled(fixedDelay = 5000)
protected void refresh() throws UnknownHostException { protected void refresh() throws UnknownHostException {
JSONObject diskModel = null; JSONObject diskModel = null;
JSONObject diskCap = null; JSONObject diskCap = null;
JSONObject diskFree = null; JSONObject diskFree = null;
try { HWDiskStore[] diskStores = null;
diskModel = JSONUtil.parseObj(Arrays.stream(OshiUtil.getHardware().getDiskStores()) try {
.map(store -> Arrays.stream(store.getPartitions()) diskStores = OshiUtil.getHardware().getDiskStores();
.map(HWPartition::getMountPoint) diskModel = JSONUtil.parseObj(Arrays.stream(diskStores)
.filter(StrUtil::isNotBlank) .map(store -> Arrays.stream(store.getPartitions())
.map(s -> "\"" + StrUtil.removeSuffix(s, ":\\") + "盘\":\"" + .map(HWPartition::getMountPoint)
StrUtil.removeSuffix(store.getModel(), " (标准磁盘驱动器)") + "\"") .filter(StrUtil::isNotBlank)
.collect(Collectors.joining(","))) .map(s -> "\"" + StrUtil.removeSuffix(s, ":\\") + "盘\":\"" +
.filter(StrUtil::isNotBlank) StrUtil.removeSuffix(store.getModel(), " (标准磁盘驱动器)") + "\"")
.collect(Collectors.joining(",", "{", "}"))); .collect(Collectors.joining(",")))
diskCap = JSONUtil.parseObj(Arrays.stream(OshiUtil.getHardware().getDiskStores()) .filter(StrUtil::isNotBlank)
.map(HWDiskStore::getPartitions) .collect(Collectors.joining(",", "{", "}")));
.flatMap(Arrays::stream) diskCap = JSONUtil.parseObj(Arrays.stream(diskStores)
.filter(partition -> StrUtil.isNotBlank(partition.getMountPoint())) .map(HWDiskStore::getPartitions)
.map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" + .flatMap(Arrays::stream)
DataSizeUtil.format(partition.getSize()) + "\"") .filter(partition -> StrUtil.isNotBlank(partition.getMountPoint()))
.collect(Collectors.joining(",", "{", "}"))); .map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" +
diskFree = JSONUtil.parseObj(Arrays.stream(OshiUtil.getHardware().getDiskStores()) DataSizeUtil.format(partition.getSize()) + "\"")
.map(HWDiskStore::getPartitions) .collect(Collectors.joining(",", "{", "}")));
.flatMap(Arrays::stream) diskFree = JSONUtil.parseObj(Arrays.stream(diskStores)
.filter(partition -> StrUtil.isNotBlank(partition.getMountPoint())) .map(HWDiskStore::getPartitions)
.map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" + .flatMap(Arrays::stream)
new DecimalFormat("#.00").format(100d * new File(partition.getMountPoint()).getFreeSpace() / partition.getSize()) + "%\"") .filter(partition -> StrUtil.isNotBlank(partition.getMountPoint()))
.collect(Collectors.joining(",", "{", "}"))); .map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" +
} catch (Exception e) { new DecimalFormat("#.00").format(100d * new File(partition.getMountPoint()).getFreeSpace() / partition.getSize()) + "%\"")
log.error("硬盘数据获取失败", e); .collect(Collectors.joining(",", "{", "}")));
} } catch (Exception e) {
info = MapUtil.<String, Object>builder() log.error("硬盘数据获取失败", e);
.put("operatingSystem", OshiUtil.getOs().toString()) if (null != diskStores) {
.put("mac", MacAddrUtil.get()) for (HWDiskStore diskStore : diskStores) {
.put("baseboard", OshiUtil.getSystem().getBaseboard().getManufacturer() + " " + OshiUtil.getSystem().getBaseboard().getVersion()) HWPartition[] partitions = diskStore.getPartitions();
.put("ip", InetAddress.getLocalHost().getHostAddress()) if (null != partitions) {
.put("cpuModel", OshiUtil.getCpuInfo(0).getCpuModel()) for (HWPartition partition : partitions) {
.put("cpuTemp", Double.parseDouble(new DecimalFormat("#.00").format(OshiUtil.getSensors().getCpuTemperature()))) log.error("硬盘数据获取失败: {}", partition.getMountPoint());
.put("memoryCap", DataSizeUtil.format(OshiUtil.getMemory().getTotal())) }
.put("diskModel", diskModel) }
.put("diskCap", diskCap) }
.put("diskFree", diskFree) }
.build(); }
} info = MapUtil.<String, Object>builder()
.put("operatingSystem", OshiUtil.getOs().toString())
@PostConstruct .put("mac", MacAddrUtil.get())
public void init() { .put("baseboard", OshiUtil.getSystem().getBaseboard().getManufacturer() + " " + OshiUtil.getSystem().getBaseboard().getVersion())
try { .put("ip", InetAddress.getLocalHost().getHostAddress())
refresh(); .put("cpuModel", OshiUtil.getCpuInfo(0).getCpuModel())
} catch (Exception e) { .put("cpuTemp", Double.parseDouble(new DecimalFormat("#.00").format(OshiUtil.getSensors().getCpuTemperature())))
log.error("初始化失败", e); .put("memoryCap", DataSizeUtil.format(OshiUtil.getMemory().getTotal()))
} .put("diskModel", diskModel)
} .put("diskCap", diskCap)
.put("diskFree", diskFree)
public static void main(String[] args) throws UnknownHostException { .build();
System.out.println("操作系统"); }
System.out.println(OshiUtil.getOs().toString());
System.out.println("MAC地址"); @PostConstruct
System.out.println(MacAddrUtil.get()); public void init() {
System.out.println("主板"); try {
System.out.println(OshiUtil.getSystem().getBaseboard().getManufacturer() + " " + OshiUtil.getSystem().getBaseboard().getVersion()); refresh();
System.out.println("IP"); } catch (Exception e) {
System.out.println(InetAddress.getLocalHost().getHostAddress()); log.error("初始化失败", e);
System.out.println("CPU型号"); }
System.out.println(OshiUtil.getCpuInfo(0).getCpuModel()); }
System.out.println("CPU温度");
System.out.println(Double.parseDouble(new DecimalFormat("#.00").format(OshiUtil.getSensors().getCpuTemperature()))); public static void main(String[] args) throws UnknownHostException {
System.out.println("内存容量"); System.out.println("操作系统");
System.out.println(DataSizeUtil.format(OshiUtil.getMemory().getTotal())); System.out.println(OshiUtil.getOs().toString());
System.out.println("硬盘型号"); System.out.println("MAC地址");
System.out.println(Arrays.stream(OshiUtil.getHardware().getDiskStores()) System.out.println(MacAddrUtil.get());
.map(store -> Arrays.stream(store.getPartitions()) System.out.println("主板");
.map(HWPartition::getMountPoint) System.out.println(OshiUtil.getSystem().getBaseboard().getManufacturer() + " " + OshiUtil.getSystem().getBaseboard().getVersion());
.filter(StrUtil::isNotBlank) System.out.println("IP");
.map(s -> "\"" + StrUtil.removeSuffix(s, ":\\") + "盘\":\"" + System.out.println(InetAddress.getLocalHost().getHostAddress());
StrUtil.removeSuffix(store.getModel(), " (标准磁盘驱动器)") + "\"") System.out.println("CPU型号");
.collect(Collectors.joining(","))) System.out.println(OshiUtil.getCpuInfo(0).getCpuModel());
.filter(StrUtil::isNotBlank) System.out.println("CPU温度");
.collect(Collectors.joining(",", "{", "}"))); System.out.println(Double.parseDouble(new DecimalFormat("#.00").format(OshiUtil.getSensors().getCpuTemperature())));
System.out.println("硬盘容量"); System.out.println("内存容量");
System.out.println(Arrays.stream(OshiUtil.getHardware().getDiskStores()) System.out.println(DataSizeUtil.format(OshiUtil.getMemory().getTotal()));
.map(HWDiskStore::getPartitions) System.out.println("硬盘型号");
.flatMap(Arrays::stream) System.out.println(Arrays.stream(OshiUtil.getHardware().getDiskStores())
.filter(partition -> StrUtil.isNotBlank(partition.getMountPoint())) .map(store -> Arrays.stream(store.getPartitions())
.map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" + .map(HWPartition::getMountPoint)
DataSizeUtil.format(partition.getSize()) + "\"") .filter(StrUtil::isNotBlank)
.collect(Collectors.joining(",", "{", "}"))); .map(s -> "\"" + StrUtil.removeSuffix(s, ":\\") + "盘\":\"" +
System.out.println("硬盘剩余"); StrUtil.removeSuffix(store.getModel(), " (标准磁盘驱动器)") + "\"")
DecimalFormat formatter = new DecimalFormat("#.00"); .collect(Collectors.joining(",")))
System.out.println(Arrays.stream(OshiUtil.getHardware().getDiskStores()) .filter(StrUtil::isNotBlank)
.map(HWDiskStore::getPartitions) .collect(Collectors.joining(",", "{", "}")));
.flatMap(Arrays::stream) System.out.println("硬盘容量");
.filter(partition -> StrUtil.isNotBlank(partition.getMountPoint())) System.out.println(Arrays.stream(OshiUtil.getHardware().getDiskStores())
.map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" + .map(HWDiskStore::getPartitions)
formatter.format(100d * new File(partition.getMountPoint()).getFreeSpace() / partition.getSize()) + "%\"") .flatMap(Arrays::stream)
.collect(Collectors.joining(",", "{", "}"))); .filter(partition -> StrUtil.isNotBlank(partition.getMountPoint()))
.map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" +
} DataSizeUtil.format(partition.getSize()) + "\"")
} .collect(Collectors.joining(",", "{", "}")));
System.out.println("硬盘剩余");
DecimalFormat formatter = new DecimalFormat("#.00");
System.out.println(Arrays.stream(OshiUtil.getHardware().getDiskStores())
.map(HWDiskStore::getPartitions)
.flatMap(Arrays::stream)
.filter(partition -> StrUtil.isNotBlank(partition.getMountPoint()))
.map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" +
formatter.format(100d * new File(partition.getMountPoint()).getFreeSpace() / partition.getSize()) + "%\"")
.collect(Collectors.joining(",", "{", "}")));
}
}
package com.priusis.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class ApqInfoDataVo implements Serializable {
private String code;
private String name;
private int frequency;
}
package com.priusis.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class MqttRpcDataMessage implements Serializable {
private static final long serialVersionUID = -3133461476074777891L;
private int requestId;
private String method;
private String params;
@Override
public String toString() {
return "{requestId=" + requestId +
", method=" + method +
", params=" + params +
'}';
}
}
@ECHO OFF @ECHO OFF
setlocal ENABLEEXTENSIONS setlocal ENABLEEXTENSIONS
@ECHO Detecting Java version installed. @ECHO Detecting Java version installed.
:CHECK_JAVA_64 :CHECK_JAVA_64
@ECHO Detecting if it is 64 bit machine @ECHO Detecting if it is 64 bit machine
set KEY_NAME="HKEY_LOCAL_MACHINE\Software\Wow6432Node\JavaSoft\Java Runtime Environment" set KEY_NAME="HKEY_LOCAL_MACHINE\Software\Wow6432Node\JavaSoft\Java Runtime Environment"
set VALUE_NAME=CurrentVersion set VALUE_NAME=CurrentVersion
FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName=%%A set ValueName=%%A
set ValueType=%%B set ValueType=%%B
set ValueValue=%%C set ValueValue=%%C
) )
@ECHO CurrentVersion %ValueValue% @ECHO CurrentVersion %ValueValue%
SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%" SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%"
SET VALUE_NAME=JavaHome SET VALUE_NAME=JavaHome
if defined ValueName ( if defined ValueName (
FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName2=%%A set ValueName2=%%A
set ValueType2=%%B set ValueType2=%%B
set JRE_PATH2=%%C set JRE_PATH2=%%C
if defined ValueName2 ( if defined ValueName2 (
set ValueName = %ValueName2% set ValueName = %ValueName2%
set ValueType = %ValueType2% set ValueType = %ValueType2%
set ValueValue = %JRE_PATH2% set ValueValue = %JRE_PATH2%
) )
) )
) )
IF NOT "%JRE_PATH2%" == "" GOTO JAVA_INSTALLED IF NOT "%JRE_PATH2%" == "" GOTO JAVA_INSTALLED
:CHECK_JAVA_32 :CHECK_JAVA_32
@ECHO Detecting if it is 32 bit machine @ECHO Detecting if it is 32 bit machine
set KEY_NAME="HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment" set KEY_NAME="HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment"
set VALUE_NAME=CurrentVersion set VALUE_NAME=CurrentVersion
FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName=%%A set ValueName=%%A
set ValueType=%%B set ValueType=%%B
set ValueValue=%%C set ValueValue=%%C
) )
@ECHO CurrentVersion %ValueValue% @ECHO CurrentVersion %ValueValue%
SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%" SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%"
SET VALUE_NAME=JavaHome SET VALUE_NAME=JavaHome
if defined ValueName ( if defined ValueName (
FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName2=%%A set ValueName2=%%A
set ValueType2=%%B set ValueType2=%%B
set JRE_PATH2=%%C set JRE_PATH2=%%C
if defined ValueName2 ( if defined ValueName2 (
set ValueName = %ValueName2% set ValueName = %ValueName2%
set ValueType = %ValueType2% set ValueType = %ValueType2%
set ValueValue = %JRE_PATH2% set ValueValue = %JRE_PATH2%
) )
) )
) )
IF "%JRE_PATH2%" == "" GOTO JAVA_NOT_INSTALLED IF "%JRE_PATH2%" == "" GOTO JAVA_NOT_INSTALLED
:JAVA_INSTALLED :JAVA_INSTALLED
@ECHO Java 1.8 found! @ECHO Java 1.8 found!
@ECHO Installing apq-pc-client ... @ECHO Installing apq-pc-client ...
%~dp0apq-pc-client.exe install %~dp0apq-pc-client.exe install
@ECHO runing apq-pc-client ... @ECHO running apq-pc-client ...
%~dp0apq-pc-client.exe start %~dp0apq-pc-client.exe start
@ECHO DONE. @ECHO DONE.
GOTO END GOTO END
:JAVA_NOT_INSTALLED :JAVA_NOT_INSTALLED
@ECHO Java 1.8 or above is not installed @ECHO Java 1.8 or above is not installed
@ECHO Please go to https://java.com/ and install Java. Then retry installation. @ECHO Please go to https://java.com/ and install Java. Then retry installation.
PAUSE PAUSE
GOTO END GOTO END
:END :END
@ECHO OFF @ECHO OFF
setlocal ENABLEEXTENSIONS setlocal ENABLEEXTENSIONS
@ECHO Detecting Java version installed. @ECHO Detecting Java version installed.
:CHECK_JAVA_64 :CHECK_JAVA_64
@ECHO Detecting if it is 64 bit machine @ECHO Detecting if it is 64 bit machine
set KEY_NAME="HKEY_LOCAL_MACHINE\Software\Wow6432Node\JavaSoft\Java Runtime Environment" set KEY_NAME="HKEY_LOCAL_MACHINE\Software\Wow6432Node\JavaSoft\Java Runtime Environment"
set VALUE_NAME=CurrentVersion set VALUE_NAME=CurrentVersion
FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName=%%A set ValueName=%%A
set ValueType=%%B set ValueType=%%B
set ValueValue=%%C set ValueValue=%%C
) )
@ECHO CurrentVersion %ValueValue% @ECHO CurrentVersion %ValueValue%
SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%" SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%"
SET VALUE_NAME=JavaHome SET VALUE_NAME=JavaHome
if defined ValueName ( if defined ValueName (
FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName2=%%A set ValueName2=%%A
set ValueType2=%%B set ValueType2=%%B
set JRE_PATH2=%%C set JRE_PATH2=%%C
if defined ValueName2 ( if defined ValueName2 (
set ValueName = %ValueName2% set ValueName = %ValueName2%
set ValueType = %ValueType2% set ValueType = %ValueType2%
set ValueValue = %JRE_PATH2% set ValueValue = %JRE_PATH2%
) )
) )
) )
IF NOT "%JRE_PATH2%" == "" GOTO JAVA_INSTALLED IF NOT "%JRE_PATH2%" == "" GOTO JAVA_INSTALLED
:CHECK_JAVA_32 :CHECK_JAVA_32
@ECHO Detecting if it is 32 bit machine @ECHO Detecting if it is 32 bit machine
set KEY_NAME="HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment" set KEY_NAME="HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment"
set VALUE_NAME=CurrentVersion set VALUE_NAME=CurrentVersion
FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName=%%A set ValueName=%%A
set ValueType=%%B set ValueType=%%B
set ValueValue=%%C set ValueValue=%%C
) )
@ECHO CurrentVersion %ValueValue% @ECHO CurrentVersion %ValueValue%
SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%" SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%"
SET VALUE_NAME=JavaHome SET VALUE_NAME=JavaHome
if defined ValueName ( if defined ValueName (
FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
set ValueName2=%%A set ValueName2=%%A
set ValueType2=%%B set ValueType2=%%B
set JRE_PATH2=%%C set JRE_PATH2=%%C
if defined ValueName2 ( if defined ValueName2 (
set ValueName = %ValueName2% set ValueName = %ValueName2%
set ValueType = %ValueType2% set ValueType = %ValueType2%
set ValueValue = %JRE_PATH2% set ValueValue = %JRE_PATH2%
) )
) )
) )
IF "%JRE_PATH2%" == "" GOTO JAVA_NOT_INSTALLED IF "%JRE_PATH2%" == "" GOTO JAVA_NOT_INSTALLED
:JAVA_INSTALLED :JAVA_INSTALLED
@ECHO Java 1.8 found! @ECHO Java 1.8 found!
@ECHO Installing apq-pc-client ... @ECHO Installing apq-pc-client ...
%~dp0apq-pc-client.exe install %~dp0apq-pc-client.exe install
@ECHO runing apq-pc-client ... @ECHO running apq-pc-client ...
%~dp0apq-pc-client.exe start %~dp0apq-pc-client.exe start
@ECHO DONE. @ECHO DONE.
GOTO END GOTO END
:JAVA_NOT_INSTALLED :JAVA_NOT_INSTALLED
@ECHO Java 1.8 or above is not installed @ECHO Java 1.8 or above is not installed
@ECHO Please go to https://java.com/ and install Java. Then retry installation. @ECHO Please go to https://java.com/ and install Java. Then retry installation.
PAUSE PAUSE
GOTO END GOTO END
:END :END
package com.priusis; package com.priusis;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.priusis.dto.HwPortControllerDto; import com.priusis.dto.HwPortControllerDto;
import com.priusis.utils.IHwPortController; import com.priusis.utils.IHwPortController;
import com.priusis.vo.MqttRpcDataMessage; import com.priusis.vo.MqttRpcDataMessage;
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.boot.SpringApplication;
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.http.ResponseEntity;
import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.client.RestTemplate;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate; import java.util.HashMap;
import java.util.List;
import java.util.HashMap; import java.util.Map;
import java.util.List; import java.util.Objects;
import java.util.Map;
import java.util.Objects; @Slf4j
@EnableScheduling
@Slf4j @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class})
@EnableScheduling public class ApqControlApplication {
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class})
public class ApqControlApplication { // 一分钟一次上报
private final Long FIXED_DELAY = 60000L;
// 一分钟一次上报
private final Long FIXED_DELAY = 60000L; @Autowired
private RestTemplate restTemplate;
@Autowired
private RestTemplate restTemplate; public static void main(String[] args) {
SpringApplication.run(ApqControlApplication.class, args);
public static void main(String[] args) { }
SpringApplication.run(ApqControlApplication.class, args);
} @Scheduled(fixedDelay = 60000L)
protected void controlProgramTask() {
@Scheduled(fixedDelay = 60000L) log.info("硬件监控上报=================");
protected void controlProgramTask() {
log.info("硬件监控上报================="); // todo
// 获取硬件监控配置 params == data //testUsb();
ResponseEntity<MqttRpcDataMessage> forEntity = null;
try { // 获取硬件监控配置 params == data
forEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/controll", MqttRpcDataMessage.class); ResponseEntity<MqttRpcDataMessage> forEntity = null;
} catch (Exception e) { try {
log.error("硬件监控上报异常", e.getMessage()); forEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/controll", MqttRpcDataMessage.class);
} } catch (Exception e) {
if (null != forEntity) { log.error("硬件监控上报异常", e.getMessage());
MqttRpcDataMessage body = forEntity.getBody(); }
String params = body.getParams(); if (null != forEntity) {
MqttRpcDataMessage body = forEntity.getBody();
if (StrUtil.isNotBlank(params)) { String params = body.getParams();
Long sendTime = body.getSendTime();
long current = System.currentTimeMillis(); if (StrUtil.isNotBlank(params)) {
List<HwPortControllerDto> hwPortControllerDtos = JSONUtil.toList(params, HwPortControllerDto.class); Long sendTime = body.getSendTime();
// 初始化硬件接口管理模块 long current = System.currentTimeMillis();
int result = IHwPortController.instanceDll.APQ_HWPORT_Initialize(); List<HwPortControllerDto> hwPortControllerDtos = JSONUtil.toList(params, HwPortControllerDto.class);
log.info("APQ_HWPORT_Initialize ret:{}", result); // 初始化硬件接口管理模块
int result = IHwPortController.instanceDll.APQ_HWPORT_Initialize();
if (current - sendTime <= FIXED_DELAY && CollUtil.isNotEmpty(hwPortControllerDtos)) { log.info("APQ_HWPORT_Initialize ret:{}", result);
// 收到硬件策略下发请求
log.info("收到硬件策略下发请求, sendTime:{}, params:{}", sendTime, params); if (current - sendTime <= FIXED_DELAY && CollUtil.isNotEmpty(hwPortControllerDtos)) {
// 收到硬件策略下发请求
for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) { log.info("收到硬件策略下发请求, sendTime:{}, params:{}", sendTime, params);
HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
int doType = hwPortControllerDto.getDoType(); for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) {
int limitType = hwPortControllerDto.getLimitType(); HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
int value = hwPortControllerDto.getValue(); int doType = hwPortControllerDto.getDoType();
int limitType = hwPortControllerDto.getLimitType();
List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds(); int value = hwPortControllerDto.getValue();
String hwDeviceName = deviceHardwareEnum.getName();
// 设置普通设备权限 List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds();
if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) { String hwDeviceName = deviceHardwareEnum.getName();
// 1F/2T // 设置普通设备权限
for (Integer hwDeviceId : hwDeviceIds) { if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) {
int perm = (doType == 1 ? 2 : 1); // 1F/2T
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_normal_device_permit(hwDeviceId, perm, null); for (Integer hwDeviceId : hwDeviceIds) {
log.info("APQ_HWPORT_set_normal_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}", int perm = (doType == 1 ? 2 : 1);
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32); int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_normal_device_permit(hwDeviceId, perm, null);
} log.info("APQ_HWPORT_set_normal_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限 doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
// 1F/2T/3T-ALL/4T-R/5T-CI/6T-CO 拷出目前无用!! Storage移动硬盘,TYPEC 无效 !! }
for (Integer hwDeviceId : hwDeviceIds) { } else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限
int perm = (doType == 1 ? 2 : 1); // 1F/2T/3T-ALL/4T-R/5T-CI/6T-CO 拷出目前无用!! Storage移动硬盘,TYPEC 无效 !!
if (perm == 2) { for (Integer hwDeviceId : hwDeviceIds) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速 int perm = (doType == 1 ? 2 : 1);
perm = (limitType == 1 ? 3 : limitType == 2 ? 4 : limitType == 3 ? 5 : limitType == 4 ? 6 : 3); if (perm == 2) {
} // limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_storage_device_permit(hwDeviceId, perm, null); perm = (limitType == 1 ? 3 : limitType == 2 ? 4 : limitType == 3 ? 5 : limitType == 4 ? 6 : 3);
log.info("APQ_HWPORT_set_storage_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}", }
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32); int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_storage_device_permit(hwDeviceId, perm, null);
} log.info("APQ_HWPORT_set_storage_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限 doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
// 1F/2T/3T-NS/4T-S-200 网口,4G/5G模块,无线WIFI区分不了 !! }
for (Integer hwDeviceId : hwDeviceIds) { } else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限
int perm = (doType == 1 ? 2 : 1); // 1F/2T/3T-NS/4T-S-200 网口,4G/5G模块,无线WIFI区分不了 !!
if (perm == 2) { for (Integer hwDeviceId : hwDeviceIds) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速 int perm = (doType == 1 ? 2 : 1);
perm = (limitType == 5 ? 3 : limitType == 6 ? 4 : 2); if (perm == 2) {
} // limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_net_device_permit(hwDeviceId, perm, value, null); perm = (limitType == 5 ? 3 : limitType == 6 ? 4 : 2);
log.info("APQ_HWPORT_set_net_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}", }
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32); int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_net_device_permit(hwDeviceId, perm, value, null);
} log.info("APQ_HWPORT_set_net_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
} doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
}
// 应用硬件接口管理模块的配置内容 }
int result5 = IHwPortController.instanceDll.APQ_HWPORT_Apply();
log.info("APQ_HWPORT_Apply ret:{}", result5); // 应用硬件接口管理模块的配置内容
} int result5 = IHwPortController.instanceDll.APQ_HWPORT_Apply();
log.info("APQ_HWPORT_Apply ret:{}", result5);
} else { }
log.info("执行硬件监控, sendTime:{}, params:{}", sendTime, params);
} else {
// 上报硬件监控数据 log.info("执行硬件监控, sendTime:{}, params:{}", sendTime, params);
Map mapRequest = new HashMap();
// 上报硬件监控数据
for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) { Map mapRequest = new HashMap();
HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
int doType = hwPortControllerDto.getDoType(); for (HwPortControllerDto hwPortControllerDto : hwPortControllerDtos) {
int limitType = hwPortControllerDto.getLimitType(); HwPortControllerDto.DeviceHardwareEnum deviceHardwareEnum = hwPortControllerDto.getKey();
int value = hwPortControllerDto.getValue(); int doType = hwPortControllerDto.getDoType();
int limitType = hwPortControllerDto.getLimitType();
List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds(); int value = hwPortControllerDto.getValue();
String hwDeviceName = deviceHardwareEnum.getName();
// 设置普通设备权限 List<Integer> hwDeviceIds = deviceHardwareEnum.getHwDeviceIds();
if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) { String hwDeviceName = deviceHardwareEnum.getName();
// 1F/2T // 设置普通设备权限
for (Integer hwDeviceId : hwDeviceIds) { if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Normal")) {
int perm = (doType == 1 ? 2 : 1); // 1F/2T
if (perm == 1) { for (Integer hwDeviceId : hwDeviceIds) {
// 获取普通设备权限 int perm = (doType == 1 ? 2 : 1);
int result31 = IHwPortController.instanceDll.APQ_HWPORT_get_normal_device_permit(hwDeviceId); if (perm == 1) {
log.debug("APQ_HWPORT_get_normal_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}", // 获取普通设备权限
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result31); int result31 = IHwPortController.instanceDll.APQ_HWPORT_get_normal_device_permit(hwDeviceId);
if (result31 == 2) { log.debug("APQ_HWPORT_get_normal_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
mapRequest.put(deviceHardwareEnum.name(), perm); doType, limitType, value, hwDeviceId, hwDeviceName, perm, result31);
} if (result31 == 2) {
} mapRequest.put(deviceHardwareEnum.name(), perm);
} }
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限 }
// 1F/2T/3T-ALL/4T-R/5T-CI/6T-CO 拷出目前无用!! Storage移动硬盘,TYPEC 无效 !! }
for (Integer hwDeviceId : hwDeviceIds) { } else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "Storage")) { // 设置存储设备权限
int perm = (doType == 1 ? 2 : 1); // 1F/2T/3T-ALL/4T-R/5T-CI/6T-CO 拷出目前无用!! Storage移动硬盘,TYPEC 无效 !!
if (perm == 2) { for (Integer hwDeviceId : hwDeviceIds) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速 int perm = (doType == 1 ? 2 : 1);
perm = (limitType == 1 ? 3 : limitType == 2 ? 4 : limitType == 3 ? 5 : limitType == 4 ? 6 : 3); if (perm == 2) {
} // limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
perm = (limitType == 1 ? 3 : limitType == 2 ? 4 : limitType == 3 ? 5 : limitType == 4 ? 6 : 3);
int result32 = IHwPortController.instanceDll.APQ_HWPORT_get_storage_device_permit(hwDeviceId); }
log.info("APQ_HWPORT_get_storage_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32); int result32 = IHwPortController.instanceDll.APQ_HWPORT_get_storage_device_permit(hwDeviceId);
if (perm != result32) { log.info("APQ_HWPORT_get_storage_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
mapRequest.put(deviceHardwareEnum.name(), perm); doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
} if (perm != result32) {
} mapRequest.put(deviceHardwareEnum.name(), perm);
} else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限 }
// 1F/2T/3T-NS/4T-S-200 网口,4G/5G模块,无线WIFI区分不了 !! }
for (Integer hwDeviceId : hwDeviceIds) { } else if (Objects.equals(deviceHardwareEnum.getHwGroup(), "NET")) { // 设置网络设备权限
int perm = (doType == 1 ? 2 : 1); // 1F/2T/3T-NS/4T-S-200 网口,4G/5G模块,无线WIFI区分不了 !!
if (perm == 2) { for (Integer hwDeviceId : hwDeviceIds) {
// limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速 int perm = (doType == 1 ? 2 : 1);
perm = (limitType == 5 ? 3 : limitType == 6 ? 4 : 2); if (perm == 2) {
} // limitType 1读写 2只读 3拷入 4拷出 5不限速 6限速
int result32 = IHwPortController.instanceDll.APQ_HWPORT_get_net_device_permit(hwDeviceId, 0); perm = (limitType == 5 ? 3 : limitType == 6 ? 4 : 2);
log.info("APQ_HWPORT_get_net_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}", }
doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32); int result32 = IHwPortController.instanceDll.APQ_HWPORT_get_net_device_permit(hwDeviceId, 0);
if (perm != result32) { log.info("APQ_HWPORT_get_net_device_permit doType:{}, limitType;{},value:{}, hwDeviceId:{}, name;{}, perm:{}, ret:{}",
mapRequest.put(deviceHardwareEnum.name(), perm); doType, limitType, value, hwDeviceId, hwDeviceName, perm, result32);
} if (perm != result32) {
} mapRequest.put(deviceHardwareEnum.name(), perm);
} }
} }
}
if (mapRequest.size() > 0) { }
Map eventMapRequest = new HashMap();
eventMapRequest.put("methodName", "control_warning"); if (mapRequest.size() > 0) {
eventMapRequest.put("params", mapRequest); Map eventMapRequest = new HashMap();
Map map = restTemplate.postForObject("http://localhost:8765/uplink_event/oc-client", eventMapRequest, Map.class); eventMapRequest.put("methodName", "control_warning");
log.info("存在硬件接口扫码告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map); eventMapRequest.put("params", mapRequest);
} Map map = restTemplate.postForObject("http://localhost:8765/uplink_event/oc-client", eventMapRequest, Map.class);
} log.info("存在硬件接口扫码告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map);
}
// 清理硬件接口管理模块 }
int result2 = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize();
log.info("APQ_HWPORT_Uninitialize ret:{}", result2); // 清理硬件接口管理模块
} else { int result2 = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize();
log.info("未获取到获取硬件监控配置"); log.info("APQ_HWPORT_Uninitialize ret:{}", result2);
} } else {
} else { log.info("未获取到获取硬件监控配置");
log.info("未获取到获取硬件监控配置"); }
//int result = IHwPortController.instanceDll.APQ_HWPORT_Initialize(); } else {
//log.info("APQ_HWPORT_Initialize ret:{}", result); log.info("未获取到获取硬件监控配置");
//int result2 = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize(); //int result = IHwPortController.instanceDll.APQ_HWPORT_Initialize();
//log.info("APQ_HWPORT_Uninitialize ret:{}", result2); //log.info("APQ_HWPORT_Initialize ret:{}", result);
} //int result2 = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize();
} //log.info("APQ_HWPORT_Uninitialize ret:{}", result2);
} }
}
public void testUsb() {
// 初始化硬件接口管理模块
int result = IHwPortController.instanceDll.APQ_HWPORT_Initialize();
log.info("APQ_HWPORT_Initialize ret:{}", result);
// APQ_HWPORT_STORAGE_PERM_ALLOW APQ_HWPORT_STORAGE_PERM_DENY
int result32 = IHwPortController.instanceDll.APQ_HWPORT_set_storage_device_permit(IHwPortController.HwportStorageDevidEnum.APQ_HWPORT_STORAGE_DEVID_UDISK.getCode(), IHwPortController.HwportStoragePermEnum.APQ_HWPORT_STORAGE_PERM_ALLOW.getCode(), null);
log.info("APQ_HWPORT_set_storage_device_permit ret:{}", result32);
//应用硬件接口管理模块的配置内容
int result5 = IHwPortController.instanceDll.APQ_HWPORT_Apply();
log.info("APQ_HWPORT_Apply ret:{}", result5);
int result2 = IHwPortController.instanceDll.APQ_HWPORT_Uninitialize();
log.info("APQ_HWPORT_Uninitialize ret:{}", result2);
}
}
spring: spring:
application: application:
name: apq-pc-control name: apq-pc-control
server: server:
# Server bind address # Server bind address
address: "0.0.0.0" address: "0.0.0.0"
port: ${random.int[10000,19999]} # port: ${random.int[10000,19999]}
port: 8762
\ No newline at end of file
package com.priusis.controller;
import cn.hutool.core.io.unit.DataSizeUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import cn.hutool.system.oshi.CpuInfo;
import cn.hutool.system.oshi.OshiUtil;
import com.priusis.lib.R;
import com.priusis.util.MacAddrUtil;
import com.priusis.vo.ApqInfoDataVo;
import com.priusis.vo.MqttRpcDataMessage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import oshi.hardware.HWDiskStore;
import oshi.hardware.HWPartition;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author yangli
* @since 2021/09/10
*/
@Slf4j
@Validated
@RestController
@RequestMapping(value = "info")
public class InfoController {
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "read_post")
public R<Map<String, Object>> getDownloadPath() throws IOException {
boolean isNoneEven = false;
// 获取采集配置,数据上报频率 params == data
ResponseEntity<MqttRpcDataMessage> forEntity = null;
Map<String, Integer> mapParams = null;
try {
forEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/info", MqttRpcDataMessage.class);
if (null != forEntity) {
MqttRpcDataMessage body = forEntity.getBody();
String params = body.getParams();
if (StrUtil.isNotBlank(params)) {
List<ApqInfoDataVo> apqInfoDataVos = JSONUtil.toList(params, ApqInfoDataVo.class);
mapParams = new HashMap<>();
for (ApqInfoDataVo apqInfoDataVo : apqInfoDataVos) {
mapParams.put(apqInfoDataVo.getCode(), apqInfoDataVo.getFrequency());
}
}
}
} catch (Exception e) {
log.error("采集数据异常", e);
}
String operatingSystem = "operatingSystem";
String mac = "mac";
String baseboard = "baseboard";
String ip = "ip";
String cpuModel = "cpuModel";
String cpuLoad = "cpuLoad";
String cpuTemp = "cpuTemp";
String memoryCap = "memoryCap";
String memoryAvailable = "memoryAvailable";
String diskModel = "diskModel";
String diskCap = "diskCap";
String diskFree = "diskFree";
Map<String, Object> data = null;
try {
// 上报PC实时信息
String collect = null;
String collect1 = null;
String collect2 = null;
try {
collect = Arrays.stream(OshiUtil.getHardware().getDiskStores())
.map(HWDiskStore::getPartitions)
.flatMap(Arrays::stream)
.filter(partition -> StrUtil.isNotBlank(partition.getMountPoint()))
.map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" +
DataSizeUtil.format(partition.getSize()) + "\"")
.collect(Collectors.joining(",", "{", "}"));
collect1 = Arrays.stream(OshiUtil.getHardware().getDiskStores())
.map(store -> Arrays.stream(store.getPartitions())
.map(HWPartition::getMountPoint)
.filter(StrUtil::isNotBlank)
.map(s -> "\"" + StrUtil.removeSuffix(s, ":\\") + "盘\":\"" +
StrUtil.removeSuffix(store.getModel(), " (标准磁盘驱动器)") + "\"")
.collect(Collectors.joining(",")))
.filter(StrUtil::isNotBlank)
.collect(Collectors.joining(",", "{", "}"));
collect2 = Arrays.stream(OshiUtil.getHardware().getDiskStores())
.map(HWDiskStore::getPartitions)
.flatMap(Arrays::stream)
.filter(partition -> StrUtil.isNotBlank(partition.getMountPoint()))
.map(partition -> "\"" + StrUtil.removeSuffix(partition.getMountPoint(), ":\\") + "盘\":\"" +
new DecimalFormat("#.00").format(100d * new File(partition.getMountPoint()).getFreeSpace() / partition.getSize()) + "%\"")
.collect(Collectors.joining(",", "{", "}"));
} catch (Exception e) {
log.error("硬盘数据获取失败", e);
}
data = MapUtil.<String, Object>builder()
.put(isNeedCollection(isNoneEven, operatingSystem, mapParams), operatingSystem, OshiUtil.getOs().toString())
.put(isNeedCollection(isNoneEven, mac, mapParams), mac, MacAddrUtil.get())
.put(isNeedCollection(isNoneEven, baseboard, mapParams), baseboard, OshiUtil.getSystem().getBaseboard().getManufacturer() + " " + OshiUtil.getSystem().getBaseboard().getVersion())
.put(isNeedCollection(isNoneEven, ip, mapParams), ip, InetAddress.getLocalHost().getHostAddress())
.put(isNeedCollection(isNoneEven, cpuModel, mapParams), cpuModel, OshiUtil.getCpuInfo(0).getCpuModel())
.put(isNeedCollection(isNoneEven, cpuTemp, mapParams), cpuTemp, Double.parseDouble(new DecimalFormat("#.00").format(OshiUtil.getSensors().getCpuTemperature())))
.put(isNeedCollection(isNoneEven, cpuLoad, mapParams), cpuLoad, getCpuUsed())
.put(isNeedCollection(isNoneEven, memoryCap, mapParams), memoryCap, DataSizeUtil.format(OshiUtil.getMemory().getTotal()))
.put(isNeedCollection(isNoneEven, memoryAvailable, mapParams), memoryAvailable, DataSizeUtil.format(OshiUtil.getMemory().getAvailable()))
.put(isNeedCollection(isNoneEven, diskModel, mapParams), diskModel, collect1)
.put(isNeedCollection(isNoneEven, diskCap, mapParams), diskCap, collect)
.put(isNeedCollection(isNoneEven, diskFree, mapParams), diskFree, collect2)
.build();
log.info("采集数据,上报属性: mapData:{}", data);
Map mapR = restTemplate.postForObject("http://localhost:8765/uplink/oc-client", data, Map.class);
log.info("采集数据,上报属性: ret:{}", mapR);
} catch (Exception e) {
log.error("采集数据异常", e);
data = MapUtil.<String, Object>builder().put("ERROR", e.getMessage()).build();
}
return R.success(data);
}
private boolean isNeedCollection(boolean isNoneEven, String key, Map<String, Integer> mapParams) {
if (null != mapParams && mapParams.containsKey(key)) {
return (!isNoneEven || mapParams.get(key) != 30);
} else {
return isNoneEven;
}
}
public static double getCpuUsed() {
CpuInfo cpuInfo = OshiUtil.getCpuInfo(100);
double used = Double.parseDouble(new DecimalFormat("#.00").format(100 - cpuInfo.getFree()));
return Math.min(Math.max(used, 0), 100);
}
}
package com.priusis.lib;
import lombok.Getter;
@Getter
public class R<T> {
private final int code;
private final String msg;
private final T data;
private R(int code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public static <T> R<T> success(T data) {
return new R<>(0, "SUCCESS", data);
}
public static <T> R<T> success() {
return success(null);
}
public static <T> R<T> error(int code, String msg, T data) {
return new R<>(code, msg, data);
}
public static <T> R<T> error(int code, String msg) {
return error(code, msg, null);
}
public static <T> R<T> error(String msg) {
return error(500, msg);
}
public static <T> R<T> error() {
return error("系统异常");
}
}
spring: spring:
application: application:
name: apq-pc-info name: apq-pc-info
server: server:
# Server bind address # Server bind address
address: "0.0.0.0" address: "0.0.0.0"
port: ${random.int[10000,19999]} # port: ${random.int[10000,19999]}
port: 8764
package com.priusis; package com.priusis;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.priusis.dto.RegisterParamDto; import com.priusis.dto.RegisterParamDto;
import com.priusis.util.WinExecuteUtils; import com.priusis.util.WinExecuteUtils;
import com.priusis.vo.MqttRpcDataMessage; import com.priusis.vo.MqttRpcDataMessage;
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.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
@EnableScheduling @EnableScheduling
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class}) @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, SecurityAutoConfiguration.class})
public class ApqRegisterApplication { public class ApqRegisterApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(ApqRegisterApplication.class, args); SpringApplication.run(ApqRegisterApplication.class, args);
} }
// "params": // "params":
// { // {
// "type":1 // "type":1
// "programs": [ // "programs": [
// { // {
// "name":"qq" // "name":"qq"
// } // }
// ] // ]
// } // }
@Autowired @Autowired
private RestTemplate restTemplate; private RestTemplate restTemplate;
@Scheduled(fixedDelay = 30000L) @Scheduled(fixedDelay = 30000L)
protected void registerProgramTask() { protected void registerProgramTask() {
log.info("软件检测上报================="); log.info("软件检测上报=================");
/*
log.info("==================="); /* try {
try { WinExecuteUtils.killProc("TIM.exe");
WinExecuteUtils.killProc("Postman.exe"); } catch (IOException e) {
} catch (Exception e) { log.error("杀进程异常", e);
log.error("杀进程异常", e); }*/
}*/
// 获取软件检测监控配置 params == data
// 获取软件检测监控配置 params == data ResponseEntity<MqttRpcDataMessage> forEntity = null;
ResponseEntity<MqttRpcDataMessage> forEntity = null; try {
try { forEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/register", MqttRpcDataMessage.class);
forEntity = restTemplate.getForEntity("http://localhost:8765/rpc_cmd/register", MqttRpcDataMessage.class); } catch (RestClientException e) {
} catch (RestClientException e) { log.error("软件检测上报异常", e.getMessage());
log.error("软件检测上报异常", e.getMessage()); }
} if (null != forEntity) {
if (null != forEntity) { MqttRpcDataMessage body = forEntity.getBody();
MqttRpcDataMessage body = forEntity.getBody(); String params = body.getParams();
String params = body.getParams();
if (StrUtil.isNotBlank(params)) {
if (StrUtil.isNotBlank(params)) { Long sendTime = body.getSendTime();
Long sendTime = body.getSendTime(); //long current = System.currentTimeMillis();
//long current = System.currentTimeMillis(); RegisterParamDto registerParamDto = JSONUtil.toBean(params, RegisterParamDto.class);
RegisterParamDto registerParamDto = JSONUtil.toBean(params, RegisterParamDto.class);
// 收到软件检测下发请求
// 收到软件检测下发请求 log.info("收到软件检测下发请求, sendTime:{}, params:{}", sendTime, params);
log.info("收到软件检测下发请求, sendTime:{}, params:{}", sendTime, params);
int type = registerParamDto.getType();
int type = registerParamDto.getType(); if (type == 1) {
if (type == 1) {
List<RegisterParamDto.RegisterDetailParamDto> programs = registerParamDto.getPrograms();
List<RegisterParamDto.RegisterDetailParamDto> programs = registerParamDto.getPrograms(); // 上报软件检测监控数据
// 上报软件检测监控数据 Map mapRequest = new HashMap();
Map mapRequest = new HashMap(); for (RegisterParamDto.RegisterDetailParamDto program : programs) {
for (RegisterParamDto.RegisterDetailParamDto program : programs) { String name = program.getName().trim();
String name = program.getName().trim();
log.info("软件检测软件: {}", name);
log.info("软件检测软件: {}", name); boolean isE = WinExecuteUtils.findProcess(name);
boolean isE = WinExecuteUtils.findProcess(name); if (isE) {
if (isE) { // 杀进程
// 杀进程 log.info("存在黑名单软件, 进行进程查杀: {}", name);
log.info("存在黑名单软件, 进行进程查杀: {}", name); try {
try { WinExecuteUtils.killProc(name);
WinExecuteUtils.killProc(name); } catch (Exception e) {
} catch (Exception e) { log.error("杀进程异常", e);
log.error("杀进程异常", e); }
}
// 上报黑名单异常
// 上报黑名单异常 mapRequest.put(name, "1");
mapRequest.put(name, "1"); }
} }
} // 上报黑名单异常
// 上报黑名单异常 if (mapRequest.size() > 0) {
if (mapRequest.size() > 0) { Map eventMapRequest = new HashMap();
Map eventMapRequest = new HashMap(); eventMapRequest.put("requestId", 1);
eventMapRequest.put("requestId", 1); eventMapRequest.put("methodName", "BlackList");
eventMapRequest.put("methodName", "BlackList"); eventMapRequest.put("params", mapRequest);
eventMapRequest.put("params", mapRequest); Map map = restTemplate.postForObject("http://localhost:8765/uplink_event/oc-client", eventMapRequest, Map.class);
Map map = restTemplate.postForObject("http://localhost:8765/uplink_event/oc-client", eventMapRequest, Map.class); log.info("存在软件检测接口扫码告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map);
log.info("存在软件检测接口扫码告警,上报告警事件: mapData:{}, ret:{}", mapRequest, map); }
}
// 上报黑名单属性 todo
// 上报黑名单属性 todo }
} } else {
} else { log.info("未获取到获取软件检测监控配置");
log.info("未获取到获取软件检测监控配置"); }
} } else {
} else { log.info("未获取到获取软件检测监控配置");
log.info("未获取到获取软件检测监控配置"); }
}
}
}
}
}
spring: spring:
application: application:
name: apq-pc-register name: apq-pc-register
server: server:
# Server bind address # Server bind address
address: "0.0.0.0" address: "0.0.0.0"
port: ${random.int[30000,39999]} # port: ${random.int[30000,39999]}
port: 8763
\ No newline at end of file
; Script generated by the Inno Setup Script Wizard. ; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "阿普奇检测客户端" #define MyAppName "阿普奇检测客户端"
#define MyAppVersion "V1.0" #define MyAppVersion "V1.0"
#define MyAppPublisher "阿普奇" #define MyAppPublisher "阿普奇"
#define MyAppURL "https://www.apq.com/" #define MyAppURL "https://www.apq.com/"
#define MyAppDirName "apq-client" #define MyAppDirName "apq-client"
#define MyAppEnName "apq-client" #define MyAppEnName "apq-client"
#define MyAppExeName "apq-client.exe" #define MyAppExeName "apq-client.exe"
#define MyAppReBootName "service\启动服务R.bat" #define MyAppReBootName "service\启动服务R.bat"
[Setup] [Setup]
; 注: AppId的值为单独标识该应用程序。 ; 注: AppId的值为单独标识该应用程序。
; 不要为其他安装程序使用相同的AppId值。 ; 不要为其他安装程序使用相同的AppId值。
; (生成新的GUID,点击 工具|在IDE中生成GUID。) ; (生成新的GUID,点击 工具|在IDE中生成GUID。)
; Tell Windows Explorer to reload the environment ; Tell Windows Explorer to reload the environment
ChangesEnvironment=yes ChangesEnvironment=yes
DisableDirPage=no DisableDirPage=no
AlwaysRestart=yes ; AlwaysRestart=yes
AppId={{1394783A-5D3C-48CD-0000-E2DFBB844E42} AppId={{1394783A-5D3C-48CD-0000-E2DFBB844E42}
AppName={#MyAppName} AppName={#MyAppName}
AppVersion={#MyAppVersion} AppVersion={#MyAppVersion}
AppVerName={#MyAppName} AppVerName={#MyAppName}
AppPublisher={#MyAppPublisher} AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL} AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL} AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL} AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppDirName} DefaultDirName={pf}\{#MyAppDirName}
DefaultGroupName={#MyAppName} DefaultGroupName={#MyAppName}
SetupIconFile=logo.ico SetupIconFile=logo.ico
;安装包文件输出目录 ;安装包文件输出目录
OutputDir=..\dist\ OutputDir=..\dist\
;安装包文件名 ;安装包文件名
OutputBaseFilename={#MyAppName} OutputBaseFilename={#MyAppName}
;压缩文件 ;压缩文件
Compression=lzma Compression=lzma
SolidCompression=yes SolidCompression=yes
;以管理员权限运行 ;以管理员权限运行
PrivilegesRequired=admin PrivilegesRequired=admin
UninstallDisplayIcon={app}/{#MyAppExeName} UninstallDisplayIcon={app}/{#MyAppExeName}
//CreateUninstallRegKey=no //CreateUninstallRegKey=no
//UpdateUninstallLogAppName=no //UpdateUninstallLogAppName=no
VersionInfoVersion=1.0.0.1 VersionInfoVersion=1.0.0.1
[Languages] [Languages]
Name: "chinese"; MessagesFile: "compiler:Languages/Chinese.isl" Name: "chinese"; MessagesFile: "compiler:Languages/Chinese.isl"
[Files] [Files]
Source: "../apq-client/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Source: "../apq-client/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: "../../java/jre/jre/*"; DestDir: "{app}/jre"; Flags: ignoreversion recursesubdirs createallsubdirs; Source: "../../java/jre/jre/*"; DestDir: "{app}/jre"; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: "../../client/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Source: "../../client/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
; NOTE: Don't use "Flags: ignoreversion" on any shared system files ; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons] [Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\client-soft\apq.exe"; Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\client-soft\apq.exe";
[Run] [Run]
Filename: "{app}\Set_Env.bat"; Flags: runhidden; Filename: "{app}\Set_Env.bat"; Flags: runhidden;
Filename: "{app}\service\启动服务.bat"; Flags: runhidden runascurrentuser waituntilterminated; Filename: "{app}\service\启动服务.bat"; Flags: runhidden runascurrentuser waituntilterminated;
;卸载后执行的操作(停止、删除各种服务) ;卸载后执行的操作(停止、删除各种服务)
[UninstallRun] [UninstallRun]
Filename: "{app}\service\删除服务.bat"; Flags: runhidden; Filename: "{app}\service\删除服务.bat"; Flags: runhidden;
;卸载后删除目录所有文件,删除空目录 ;卸载后删除目录所有文件,删除空目录
[UninstallDelete] [UninstallDelete]
Type: filesandordirs; Name: "{app}\*" Type: filesandordirs; Name: "{app}\*"
Type: dirifempty; Name: "{app}" Type: dirifempty; Name: "{app}"
;操作注册表 ;操作注册表
[Registry] [Registry]
Root: HKLM; Subkey: "Software\{#MyAppEnName}"; Flags: uninsdeletekey; Root: HKLM; Subkey: "Software\{#MyAppEnName}"; Flags: uninsdeletekey;
Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "{#MyAppEnName}"; ValueData: "{app}\{#MyAppReBootName}"; Flags: uninsdeletevalue; Root: HKCU; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "{#MyAppEnName}"; ValueData: "{app}\{#MyAppReBootName}"; Flags: uninsdeletevalue;
; set JAVA_HOME ; set JAVA_HOME
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType:string; ValueName:"JAVA_HOME"; ValueData:"{app}\jre"; Flags: preservestringtype Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType:string; ValueName:"JAVA_HOME"; ValueData:"{app}\jre"; Flags: preservestringtype
; set PATH ; set PATH
Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType:string; ValueName:"PATH"; ValueData:"{olddata};{app}\jre\bin"; Flags: preservestringtype Root: HKLM; Subkey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"; ValueType:string; ValueName:"PATH"; ValueData:"{olddata};{app}\jre\bin"; Flags: preservestringtype
[Code] [Code]
function CheckProcessRunning( aProcName, function CheckProcessRunning( aProcName,
aProcDesc: string ): boolean; aProcDesc: string ): boolean;
var var
ShellResult: boolean; ShellResult: boolean;
ResultCode: integer; ResultCode: integer;
cmd: string; cmd: string;
sl: TStringList; sl: TStringList;
f: string; f: string;
d: string; d: string;
cmd2: string; cmd2: string;
f2: string; f2: string;
sl2: TStringList; sl2: TStringList;
begin begin
cmd := 'for /f "delims=," %%i ' + cmd := 'for /f "delims=," %%i ' +
'in (''tasklist /FI "IMAGENAME eq ' + aProcName + '" /FO CSV'') ' + 'in (''tasklist /FI "IMAGENAME eq ' + aProcName + '" /FO CSV'') ' +
'do if "%%~i"=="' + aProcName + '" exit 1'; 'do if "%%~i"=="' + aProcName + '" exit 1';
f := 'CheckProc.cmd'; f := 'CheckProc.cmd';
cmd2 := 'taskkill -f -t -im ' + aProcName; cmd2 := 'taskkill -f -t -im ' + aProcName;
f2 := 'KillProc.cmd'; f2 := 'KillProc.cmd';
d := AddBackSlash( ExpandConstant( '{tmp}' )); d := AddBackSlash( ExpandConstant( '{tmp}' ));
sl := TStringList.Create; sl := TStringList.Create;
sl.Add( cmd ); sl.Add( cmd );
sl.Add( 'exit /0' ); sl.Add( 'exit /0' );
sl.SaveToFile( d + f ); sl.SaveToFile( d + f );
sl.Free; sl.Free;
sl2 := TStringList.Create; sl2 := TStringList.Create;
sl2.Add( cmd2 ); sl2.Add( cmd2 );
sl2.Add( 'exit /0' ); sl2.Add( 'exit /0' );
sl2.SaveToFile( d + f2 ); sl2.SaveToFile( d + f2 );
sl2.Free; sl2.Free;
Result := true; Result := true;
while ( Result ) do while ( Result ) do
begin begin
ResultCode := 1; ResultCode := 1;
ShellResult := Exec( f, ShellResult := Exec( f,
'', '',
d, d,
SW_HIDE, SW_HIDE,
ewWaitUntilTerminated, ewWaitUntilTerminated,
ResultCode ); ResultCode );
Result := ResultCode > 0; Result := ResultCode > 0;
if Result then if Result then
begin begin
// Msgbox('已关闭正在运行' + aProcDesc + '客户端!', mbInformation, MB_OK); // Msgbox('已关闭正在运行' + aProcDesc + '客户端!', mbInformation, MB_OK);
ShellResult := Exec( f2, ShellResult := Exec( f2,
'', '',
d, d,
SW_HIDE, SW_HIDE,
ewWaitUntilTerminated, ewWaitUntilTerminated,
ResultCode ); ResultCode );
end; end;
end; end;
DeleteFile( d + f ); DeleteFile( d + f );
DeleteFile( d + f2 ); DeleteFile( d + f2 );
end; end;
// Perform some initializations. Return False to abort setup // Perform some initializations. Return False to abort setup
function InitializeSetup: Boolean; function InitializeSetup: Boolean;
begin begin
// Do not use any user defined vars in here such as {app} // Do not use any user defined vars in here such as {app}
// Result := not ( CheckProcessRunning( 'apq-client-service.exe', 'apq-client-service' )); // Result := not ( CheckProcessRunning( 'apq-client-service.exe', 'apq-client-service' ));
CheckProcessRunning( 'apq-control.exe', 'apq客户端插件' ) CheckProcessRunning( 'apq-control.exe', 'apq客户端插件' )
CheckProcessRunning( 'apq-info.exe', 'apq客户端插件' ) CheckProcessRunning( 'apq-info.exe', 'apq客户端插件' )
CheckProcessRunning( 'apq-register.exe', 'apq客户端插件' ) CheckProcessRunning( 'apq-register.exe', 'apq客户端插件' )
CheckProcessRunning( 'apq.exe', 'apq客户端桌面' ) CheckProcessRunning( 'apq.exe', 'apq客户端桌面' )
Result := not ( CheckProcessRunning( 'apq-client.exe', 'apq-client客户端' )); Result := not ( CheckProcessRunning( 'apq-client.exe', 'apq-client客户端' ));
end; end;
\ No newline at end of file
@ECHO OFF @ECHO OFF
setlocal ENABLEEXTENSIONS setlocal ENABLEEXTENSIONS
@ECHO Installing apq-client ... @ECHO Installing apq-client ...
"%~dp0apq-client-service.exe" install "%~dp0apq-client-service.exe" install
@ECHO runing apq-client ... @ECHO running apq-client ...
"%~dp0apq-client-service.exe" start "%~dp0apq-client-service.exe" start
@ECHO DONE. @ECHO DONE.
:END :END
\ No newline at end of file
No preview for this file type
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论