Java-SpringBoot-使用Sigar采集设备信息
文章目录
- Java-SpringBoot-使用Sigar采集设备信息
- 一、Sigar依赖
- 二、项目讲解
- 1. 项目结构图
- 2. 数据传递实体类
- 3. Sigar采集类
- 4. Controller控制类
- 三、采集失败原因以及解决方法
Java-SpringBoot-使用Sigar采集设备信息
项目要求:
采集设备信息,如CPU、内存、网络等信息,实现对设备的监控。
项目开源地址:
Gitee: https://gitee.com/xuhy34324/boot_sigar_acquisition
使用 Sigar 前的操作:
在使用 sigar 采集 window 或者 linux 系统信息时,需要在系统中添加 sigar 的指定文件,否则采集报错。(采集OS的没去研究)
具体操作在末尾。
一、Sigar依赖
<!-- https://mvnrepository.com/artifact/org.fusesource/sigar --><dependency><groupId>org.fusesource</groupId><artifactId>sigar</artifactId><version>1.6.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
二、项目讲解
项目环境:Window10
编译工具:IDEA
使用依赖:Sigar1.6.4、lombok
1. 项目结构图
2. 数据传递实体类
CpuVO.java
@Data
public class CpuVO {private Double user; // 用户CPU使用率private Double sys; // 系统CPU使用率private Double wait; // 等待率private Double nice; // 错误率private Double idle; // 空闲率private Double combined; // 使用率
}
MemoryVO.java
@Data
public class MemoryVO {private Long memTotal; // 内存总容量 /kprivate Long memUsed; // 当前内存使用量 /kprivate Long memFree; // 当前内存剩余量 /kprivate Long swapTotal; // 交换区总容量 /kprivate Long swapUsed; // 当前交换区使用量 /kprivate Long swapFree; // 当前交换区剩余量 /k
}
3. Sigar采集类
SigarLocalDeviceDataAcquisition.java
package com.example.acquisition;import com.example.vo.CpuVO;
import com.example.vo.MemoryVO;
import org.hyperic.sigar.*;import java.util.ArrayList;
import java.util.List;/*** @Author X_HuiYang* @Date 2022/7/21 18:17* @Description*/public class SigarLocalDeviceDataAcquisition {public static Sigar sigar;static {sigar = new Sigar();}/*** 采集本地设备内存数据*/public static MemoryVO getMemory() throws SigarException {// 获取内存数据Mem mem = sigar.getMem();// 内存总容量long memTotal = mem.getTotal();// 内存使用量long memUsed = mem.getUsed();// 内存空闲量long memFree = mem.getFree();// 获取内存交换区数据Swap swap = sigar.getSwap();// 交换区总容量long swapTotal = swap.getTotal();// 交换区使用量long swapUsed = swap.getUsed();// 交换区剩余量long swapFree = swap.getFree();MemoryVO memoryVO = new MemoryVO();// 除以1024,将原始数据单位变成 /kmemoryVO.setMemTotal(memTotal / 1024L);memoryVO.setMemUsed(memUsed / 1024L);memoryVO.setMemFree(memFree / 1024L);memoryVO.setSwapTotal(swapTotal / 1024L);memoryVO.setSwapUsed(swapUsed / 1024L);memoryVO.setSwapFree(swapFree / 1024L);return memoryVO;}/*** 采集本地设备CPU数据*/public static CpuVO getCpu() throws SigarException {// 获取设备总CPU数据CpuPerc cpuPerc = sigar.getCpuPerc();return cpuFormat(cpuPerc);}/*** 采集本地设备所有CPU数据*/public static List<CpuVO> getCpuList() throws SigarException {List<CpuVO> cpuVOS = new ArrayList<>();// 获取设备所有CPU数据CpuPerc[] cpuPercList = sigar.getCpuPercList();for (CpuPerc cpuPerc : cpuPercList) {cpuVOS.add(cpuFormat(cpuPerc));}return cpuVOS;}/*** 采集本地设备所有网络数据*/public static void getNetwork() throws SigarException {// 获取所有网络设备名称String[] netInterfaceList = sigar.getNetInterfaceList();for (String netInterface : netInterfaceList) {// 按照名称查询所属数据NetInterfaceConfig netInterfaceConfig = sigar.getNetInterfaceConfig(netInterface);// IP地址String address = netInterfaceConfig.getAddress();// 子网掩码String netmask = netInterfaceConfig.getNetmask();NetInterfaceStat netInterfaceStat = sigar.getNetInterfaceStat(netInterface);// 接收的总包数量long rxPackets = netInterfaceStat.getRxPackets();// 发送的总包数量long txPackets = netInterfaceStat.getTxPackets();// 接收的总字节数量long rxBytes = netInterfaceStat.getRxBytes();// 发送的总字节数量long txBytes = netInterfaceStat.getTxBytes();// 接收的错误包数量long rxErrors = netInterfaceStat.getRxErrors();// 发送的错误包数量long txErrors = netInterfaceStat.getTxErrors();// 接收时丢包数量long rxDropped = netInterfaceStat.getRxDropped();// 发送时丢包数量long txDropped = netInterfaceStat.getTxDropped();}}/*** CPU数据返回值格式化* */private static CpuVO cpuFormat(CpuPerc cpuPerc) {// 用户使用率String cpuUser = CpuPerc.format(cpuPerc.getUser()); // CpuPerc.format() 此方法是将采集到的原始数据 计算成带 % 的使用率// 系统使用率String cpuSys = CpuPerc.format(cpuPerc.getSys());// 当前等待率String cpuWait = CpuPerc.format(cpuPerc.getWait());// 当前错误率String cpuNice = CpuPerc.format(cpuPerc.getNice());// 当前空闲率String cpuIdle = CpuPerc.format(cpuPerc.getIdle());// 当前使用率String cpuCombined = CpuPerc.format(cpuPerc.getCombined());CpuVO cpuVO = new CpuVO();// 将String类型的数据 转换为Double类型的数据。(个人项目需求 <非必要>)cpuVO.setUser(Double.parseDouble(cpuUser.replace("%","")));cpuVO.setSys(Double.parseDouble(cpuSys.replace("%","")));cpuVO.setWait(Double.parseDouble(cpuWait.replace("%","")));cpuVO.setNice(Double.parseDouble(cpuNice.replace("%","")));cpuVO.setIdle(Double.parseDouble(cpuIdle.replace("%","")));cpuVO.setCombined(Double.parseDouble(cpuCombined.replace("%","")));return cpuVO;}
}
4. Controller控制类
SigarController.java
package com.example.controller;import com.example.acquisition.SigarLocalDeviceDataAcquisition;
import com.example.vo.CpuVO;
import com.example.vo.MemoryVO;
import lombok.extern.slf4j.Slf4j;
import org.hyperic.sigar.SigarException;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Author X_HuiYang* @Date 2022/7/21 18:16* @Description*/@Slf4j
@RestController
public class SigarController {@PostMapping("/cpu")public CpuVO getCpuData() {try {return SigarLocalDeviceDataAcquisition.getCpu();} catch (SigarException e) {e.printStackTrace();return null;}}@PostMapping("/memory")public MemoryVO getMemory() {try {return SigarLocalDeviceDataAcquisition.getMemory();} catch (SigarException e) {e.printStackTrace();return null;}}
}
三、采集失败原因以及解决方法
当你第一次在 Window 或 Linux 上运行 Sigar 采集数据时, 大概率会出现如下错误:
Java-SpringBoot-使用Sigar采集设备信息相关推荐
- java读取BACnet协议的设备信息-demo
序 鉴于目前网上对于BACnet协议的相关文章比较少,所以写出这段时间对于java对接该协议的一个demo程序,供参考. 一.代码简介 本代码 gitee地址:https://gitee.com/Si ...
- 基于JAVA+SpringBoot+Mybatis+MYSQL的仓库信息管理系统
1.项目需求 实现材料仓库的管理:提供材料出入库管理等实用功能. 材料入库管理:材料检验入库.入库查询.入库类别按月统计: 材料出库管理:材料库存查询.材料出库.出库查询.出库类别按月统计: 辅助管理 ...
- 基于JAVA+SpringBoot+Mybatis+MYSQL的医院信息管理系统
项目功能: 系统分为门诊管理.住院管理.系统管理.统计管理.数据中心.排班管理.仓库管理.药房管理,本系统重点是门诊和住院管理,填写患者的详细信息,如姓名,年龄.手机号.性别.身份证号.选择科室挂号类 ...
- 基于java springboot mysql百度地图的信息标注系统--桌面端的设计与实现
博主介绍:✌在职Java研发工程师.专注于程序设计.源码分享.技术交流和毕业设计✌ 公众号:[程序代做 源码分享] 免费源码获取.精品资源.面试题库等都给你
- 基于JAVA+SpringBoot+Mybatis+MYSQL的旅游信息管理系统
项目功能: 项目分前后台 前台 地址:http://localhost/index 账号:user 密码:123456 后台 地址:http://localhost/login 账号:root 密码: ...
- springboot 获取访问者的ip地址、访问设备信息、城市地址信息
1.获取访问者的ip地址: 不多说直接上代码,详解见注释 package com.xr.util;import lombok.extern.slf4j.Slf4j;import javax.servl ...
- springboot查看请求ip、ip归属地、设备信息、本地MAC地址、操作系统信息
springboot查看请求ip.ip归属地.设备信息.操作系统信息 1.在pom添加依赖 <dependency><groupId>eu.bitwalker</grou ...
- 基于java+springboot+mybatis+vue+mysql的校园台球厅人员与设备管理系统
项目介绍 校园台球厅人员与设备管理系统采用java技术,基于springboot框架,前端使用vue技术,mysql数据库进行开发,实现了以下功能: 本系统主要包括管理员和用户两个角色组成,主要包括以 ...
- 计算机毕业设计之java+springboot基于vue的校园台球厅人员与设备管理系统
项目介绍 校园台球厅人员与设备管理系统采用java技术,基于springboot框架,mysql数据库进行开发,实现了首页.个人中心.用户管理.会员账号管理.会员充值管理.球桌信息管理.会员预约管理. ...
最新文章
- java timezone 107_java - Java使用TimeZone - 堆栈内存溢出
- 雷卷 java,阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性...
- 通过ping命令测试主机与虚拟机之间是否连通
- MATLAB-矩阵基本语法知识
- 连接池超时配置_HttpClient连接池的一些思考
- vs传值接收页面怎么直接打开_VS2003传值
- 有赞九周年,打造技术生态,与开发者一起投身新零售浪潮
- C++游戏入门书籍推荐
- 【英语学习】【WOTD】glitch 释义/词源/示例
- .net如何获取文件夹中的文件_access递归列出文件夹中的文件
- [译]GLUT教程 - 笔划字体
- ajax教程 异步刷新验证,Ajax实现异步刷新验证用户名是否已存在的具体方法
- Redis异常JedisConnectionException:Read timed out解决笔记
- 限流, 熔断,降级笔记
- android开发案例1---拦截电话,拯救史迪仔,有序广播
- 跨境电商无货源自发货铺货ERP店群管理软件
- 点云应用——三维空间边界点排序+机器人轨迹引导(1)
- 百度文库,道客巴巴等文库免积分下载
- Oracle 18c安装操作指导手册
- Javac源码简单分析之解析和填充符号表
热门文章
- 33学习笔记——描述统计分析3--数据的描述统计量
- 视频教程-爱上Axure之软件基础视频教程-Axure
- delete、truncate 、Drop删除表的区别
- 【Pygame基本使用】
- Presto RBO之broadcast join与partitioned join类型的选择优化
- 【N32G457 】基于RT-Thread和N32G457 数码管时钟
- 1024凑数篇之程序员职业生涯问答
- 认识V模型,W模型,H模型三类模型
- 定时循环发送TCP消息(例如:控制设备的开关机等场景)—— 定时执行专家
- 解决 FileNotFoundError: [WinError 2] 系统找不到指定的文件