这个页面本质上就是用写好的API直接调用自己本地的一些资源数据来显示在这个页面上,说白了跟资源管理器差不多吧,主要是oshi的应用。

前端:


<script>
import { getServer } from "@/api/monitor/server";export default {name: "Server",data() {return {// 服务器信息server: []};},created() {this.getList();this.openLoading();},methods: {/** 查询服务器信息 */getList() {getServer().then(response => {this.server = response.data;this.$modal.closeLoading();});},// 打开加载层openLoading() {this.$modal.loading("正在加载服务监控数据,请稍候!");}}
};
</script>
import request from '@/utils/request'// 获取服务信息
export function getServer() {return request({url: '/monitor/server',method: 'get'})
}

后端:

使用了<exclusion></exclusion>排除了c3p0数据源,因为我们在druid中配置了阿里巴巴的数据源

        <!-- 定时任务 --><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><exclusions><exclusion><groupId>com.mchange</groupId><artifactId>c3p0</artifactId></exclusion></exclusions></dependency>
package com.ruoyi.web.controller.monitor;import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.framework.web.domain.Server;/*** 服务器监控* * @author ruoyi*/
@RestController
@RequestMapping("/monitor/server")
public class ServerController
{@PreAuthorize("@ss.hasPermi('monitor:server:list')")@GetMapping()public AjaxResult getInfo() throws Exception{Server server = new Server();server.copyTo();return AjaxResult.success(server);}
}
   public void copyTo() throws Exception{SystemInfo si = new SystemInfo();HardwareAbstractionLayer hal = si.getHardware();setCpuInfo(hal.getProcessor());setMemInfo(hal.getMemory());setSysInfo();setJvmInfo();setSysFiles(si.getOperatingSystem());}/*** 设置CPU信息*/private void setCpuInfo(CentralProcessor processor){// CPU信息long[] prevTicks = processor.getSystemCpuLoadTicks();Util.sleep(OSHI_WAIT_SECOND);long[] ticks = processor.getSystemCpuLoadTicks();long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()];long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()];long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()];long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()];long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()];long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()];long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()];long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()];long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal;cpu.setCpuNum(processor.getLogicalProcessorCount());cpu.setTotal(totalCpu);cpu.setSys(cSys);cpu.setUsed(user);cpu.setWait(iowait);cpu.setFree(idle);}/*** 设置内存信息*/private void setMemInfo(GlobalMemory memory){mem.setTotal(memory.getTotal());mem.setUsed(memory.getTotal() - memory.getAvailable());mem.setFree(memory.getAvailable());}/*** 设置服务器信息*/private void setSysInfo(){Properties props = System.getProperties();sys.setComputerName(IpUtils.getHostName());sys.setComputerIp(IpUtils.getHostIp());sys.setOsName(props.getProperty("os.name"));sys.setOsArch(props.getProperty("os.arch"));sys.setUserDir(props.getProperty("user.dir"));}/*** 设置Java虚拟机*/private void setJvmInfo() throws UnknownHostException{Properties props = System.getProperties();jvm.setTotal(Runtime.getRuntime().totalMemory());jvm.setMax(Runtime.getRuntime().maxMemory());jvm.setFree(Runtime.getRuntime().freeMemory());jvm.setVersion(props.getProperty("java.version"));jvm.setHome(props.getProperty("java.home"));}/*** 设置磁盘信息*/private void setSysFiles(OperatingSystem os){FileSystem fileSystem = os.getFileSystem();List<OSFileStore> fsArray = fileSystem.getFileStores();for (OSFileStore fs : fsArray){long free = fs.getUsableSpace();long total = fs.getTotalSpace();long used = total - free;SysFile sysFile = new SysFile();sysFile.setDirName(fs.getMount());sysFile.setSysTypeName(fs.getType());sysFile.setTypeName(fs.getName());sysFile.setTotal(convertFileSize(total));sysFile.setFree(convertFileSize(free));sysFile.setUsed(convertFileSize(used));sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100));sysFiles.add(sysFile);}}/*** 字节转换* * @param size 字节大小* @return 转换后值*/public String convertFileSize(long size){long kb = 1024;long mb = kb * 1024;long gb = mb * 1024;if (size >= gb){return String.format("%.1f GB", (float) size / gb);}else if (size >= mb){float f = (float) size / mb;return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f);}else if (size >= kb){float f = (float) size / kb;return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f);}else{return String.format("%d B", size);}}
}

Ruoyi框架学习--服务监控相关推荐

  1. Ruoyi框架学习总结--总览篇

    Ruoyi--vue版框架在线文档:介绍 | RuoYi 1.springboot 2.0 后端框架 2.spring security  权限管理 3.JWT(JSON Web Token)  To ...

  2. 【RuoYi框架】RuoYi框架学习超简单案例 - 新闻管理系统(附源码)

    文章目录 前言 一.需求 二.数据库设计 1.新闻菜单表(树表) 1.新闻内容表 三.运行RuoYi项目 1.创建数据库,运行sql文件 2.启动运行RuoYi项目 四.生成代码 1.添加字典(菜单显 ...

  3. Ruoyi框架学习--定时任务

    什么是定时任务? 在实际项目开发中Web应用有一类不可缺少的,那就是定时任务. 定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电影券: 比如在保证 ...

  4. Ruoyi框架学习--Vue前端配置文件详解

    CSDN话题挑战赛第2期 参赛话题:学习笔记 1.package.json配置中的重点介绍: 1.许可证:license:各种License介绍(BSD,MIT,MPL,Apache License, ...

  5. Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析)

    Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析_2020.06.25) 前言: Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一 ...

  6. ruoyi(若依)框架学习

    ruoyi(若依)官网:https://www.ruoyi.vip学习开发文档. RuoYi是一个后台管理系统,基于经典技术组合(Spring Boot.Apache Shiro.MyBatis.Th ...

  7. Spring clud 微服务框架学习

    Spring clud 微服务框架学习 什么是微服务? 微服务是一种架构风格:服务组件化.业务分离让每个模块独立.服务跟服务之间接口调用,服务之间不会相互影响.轻量级通信机制:接口调用很快. 微服务的 ...

  8. 基于ruoyi框架的模拟风电场监控项目(java+websocket)

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 基于ruoyi框架的模拟风电场监控项目(ruoyi框架+websocket). 二.实现功能 全场监控(全场地图.风机矩阵.风机列表) 数据统计(运 ...

  9. kratos mysql_kratos微服务框架学习笔记一(kratos-demo)

    本文将为您描述kratos微服务框架学习笔记一(kratos-demo),教程操作步骤: 目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服 ...

最新文章

  1. Dockerfile基本结构
  2. 如何用babel将ES6转换
  3. 学计算机的考研还是工作室,毕业后,考研和工作哪个更有出路,你后悔了吗?...
  4. 使用 GDB 调试 Android 应用
  5. Flex布局新旧混合写法详解
  6. MySQL怎么查游戏内邮件附件_怎么查询游戏mysql账号密码
  7. jQuery动态加载select下拉列表
  8. 详解Oracle数据货场中三种优化:分区、维度和物化视图
  9. 苹果Mac如何在全屏幕模式下使用 App?
  10. java类似keyvaluepair_BM25 算法的java实现,有详细的说明文档和代码 Develop 238万源代码下载- www.pudn.com...
  11. centos创建本地yum仓库
  12. 四川2021年5月计算机二级报名时间,四川2021年3月计算机等级考试什么时候报名...
  13. [Vue]开发环境搭建
  14. 为什么说交换机可以隔离冲突域?
  15. PotPlayer播放DST音频的mkv电影解码错误
  16. python第五次笔记
  17. Unity3D暂停,继续游戏,重新开始,退出,以及 UnityEditor.EditorApplication打包后不会执行
  18. 不让粘贴的数字在excel中以科学计数法形式显示
  19. arm-linux东东之nand之一:nand 初始化
  20. NFT 游戏含义:游戏中的 NFT 是什么?

热门文章

  1. 无线系统(EEEN3006J-Wireless Systems)复习笔记 (4)
  2. C++ RS232串口通信
  3. 四旋翼无人机调试时,电机滴滴滴响问题及解决办法汇总
  4. 人们最常用的计算机密码,总结2019年200个最常用密码 烂大街的密码别再用了
  5. TP4333移动电源芯片
  6. vue-cli 运行vue项目,设置 “ vue-cli-service serve --open ” 自动打开浏览器,无法启动的解决办法
  7. js在当前时间后或前添加或减少几个月
  8. mac os x 下五款播放器评测
  9. 手机芯片测试的软件,小米手机硬件检测软件
  10. 错误0x8007018b,已拒绝访问云文件