Ruoyi框架学习--服务监控
这个页面本质上就是用写好的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框架学习--服务监控相关推荐
- Ruoyi框架学习总结--总览篇
Ruoyi--vue版框架在线文档:介绍 | RuoYi 1.springboot 2.0 后端框架 2.spring security 权限管理 3.JWT(JSON Web Token) To ...
- 【RuoYi框架】RuoYi框架学习超简单案例 - 新闻管理系统(附源码)
文章目录 前言 一.需求 二.数据库设计 1.新闻菜单表(树表) 1.新闻内容表 三.运行RuoYi项目 1.创建数据库,运行sql文件 2.启动运行RuoYi项目 四.生成代码 1.添加字典(菜单显 ...
- Ruoyi框架学习--定时任务
什么是定时任务? 在实际项目开发中Web应用有一类不可缺少的,那就是定时任务. 定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电影券: 比如在保证 ...
- Ruoyi框架学习--Vue前端配置文件详解
CSDN话题挑战赛第2期 参赛话题:学习笔记 1.package.json配置中的重点介绍: 1.许可证:license:各种License介绍(BSD,MIT,MPL,Apache License, ...
- Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析)
Netty网络框架学习笔记-16(心跳(heartbeat)服务源码分析_2020.06.25) 前言: Netty 作为一个网络框架,提供了诸多功能,比如编码解码等,Netty 还提供了非常重要的一 ...
- ruoyi(若依)框架学习
ruoyi(若依)官网:https://www.ruoyi.vip学习开发文档. RuoYi是一个后台管理系统,基于经典技术组合(Spring Boot.Apache Shiro.MyBatis.Th ...
- Spring clud 微服务框架学习
Spring clud 微服务框架学习 什么是微服务? 微服务是一种架构风格:服务组件化.业务分离让每个模块独立.服务跟服务之间接口调用,服务之间不会相互影响.轻量级通信机制:接口调用很快. 微服务的 ...
- 基于ruoyi框架的模拟风电场监控项目(java+websocket)
真正的大师,永远都怀着一颗学徒的心! 一.项目简介 基于ruoyi框架的模拟风电场监控项目(ruoyi框架+websocket). 二.实现功能 全场监控(全场地图.风机矩阵.风机列表) 数据统计(运 ...
- kratos mysql_kratos微服务框架学习笔记一(kratos-demo)
本文将为您描述kratos微服务框架学习笔记一(kratos-demo),教程操作步骤: 目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服 ...
最新文章
- Dockerfile基本结构
- 如何用babel将ES6转换
- 学计算机的考研还是工作室,毕业后,考研和工作哪个更有出路,你后悔了吗?...
- 使用 GDB 调试 Android 应用
- Flex布局新旧混合写法详解
- MySQL怎么查游戏内邮件附件_怎么查询游戏mysql账号密码
- jQuery动态加载select下拉列表
- 详解Oracle数据货场中三种优化:分区、维度和物化视图
- 苹果Mac如何在全屏幕模式下使用 App?
- java类似keyvaluepair_BM25 算法的java实现,有详细的说明文档和代码 Develop 238万源代码下载- www.pudn.com...
- centos创建本地yum仓库
- 四川2021年5月计算机二级报名时间,四川2021年3月计算机等级考试什么时候报名...
- [Vue]开发环境搭建
- 为什么说交换机可以隔离冲突域?
- PotPlayer播放DST音频的mkv电影解码错误
- python第五次笔记
- Unity3D暂停,继续游戏,重新开始,退出,以及 UnityEditor.EditorApplication打包后不会执行
- 不让粘贴的数字在excel中以科学计数法形式显示
- arm-linux东东之nand之一:nand 初始化
- NFT 游戏含义:游戏中的 NFT 是什么?
热门文章
- 无线系统(EEEN3006J-Wireless Systems)复习笔记 (4)
- C++ RS232串口通信
- 四旋翼无人机调试时,电机滴滴滴响问题及解决办法汇总
- 人们最常用的计算机密码,总结2019年200个最常用密码 烂大街的密码别再用了
- TP4333移动电源芯片
- vue-cli 运行vue项目,设置 “ vue-cli-service serve --open ” 自动打开浏览器,无法启动的解决办法
- js在当前时间后或前添加或减少几个月
- mac os x 下五款播放器评测
- 手机芯片测试的软件,小米手机硬件检测软件
- 错误0x8007018b,已拒绝访问云文件