增加获取客户端资源监控页面
This commit is contained in:
parent
93ea27aea5
commit
5136a2db37
2
pom.xml
2
pom.xml
|
@ -27,7 +27,7 @@
|
|||
<thymeleaf.extras.shiro.version>2.0.0</thymeleaf.extras.shiro.version>
|
||||
<mybatis.spring.boot.starter.version>1.3.2</mybatis.spring.boot.starter.version>
|
||||
<pagehelper.spring.boot.starter.version>1.2.5</pagehelper.spring.boot.starter.version>
|
||||
<fastjson.version>1.2.47</fastjson.version>
|
||||
<fastjson.version>1.2.58</fastjson.version>
|
||||
<druid.version>1.1.10</druid.version>
|
||||
<commons.io.version>2.5</commons.io.version>
|
||||
<commons.fileupload.version>1.3.3</commons.fileupload.version>
|
||||
|
|
|
@ -77,7 +77,6 @@ public class RunAutomationTestTask
|
|||
log.error("测试任务执行,远程链接客户端出现异常...");
|
||||
taskExecute.setTaskStatus(4);
|
||||
taskExecuteService.updateTaskExecute(taskExecute);
|
||||
throw new ConnectException();
|
||||
} catch (KeyManagementException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
package com.luckyframe.project.monitor.server.domain.set;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* CPU相关信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class SetCpu
|
||||
{
|
||||
/**
|
||||
* 核心数
|
||||
*/
|
||||
private int cpuNum;
|
||||
|
||||
/**
|
||||
* CPU总的使用率
|
||||
*/
|
||||
private BigDecimal total;
|
||||
|
||||
/**
|
||||
* CPU系统使用率
|
||||
*/
|
||||
private BigDecimal sys;
|
||||
|
||||
/**
|
||||
* CPU用户使用率
|
||||
*/
|
||||
private BigDecimal used;
|
||||
|
||||
/**
|
||||
* CPU当前等待率
|
||||
*/
|
||||
private BigDecimal wait;
|
||||
|
||||
/**
|
||||
* CPU当前空闲率
|
||||
*/
|
||||
private BigDecimal free;
|
||||
|
||||
public int getCpuNum()
|
||||
{
|
||||
return cpuNum;
|
||||
}
|
||||
|
||||
public void setCpuNum(int cpuNum)
|
||||
{
|
||||
this.cpuNum = cpuNum;
|
||||
}
|
||||
|
||||
public BigDecimal getTotal()
|
||||
{
|
||||
return total;
|
||||
}
|
||||
|
||||
public void setTotal(BigDecimal total)
|
||||
{
|
||||
this.total = total;
|
||||
}
|
||||
|
||||
public BigDecimal getSys()
|
||||
{
|
||||
return sys;
|
||||
}
|
||||
|
||||
public void setSys(BigDecimal sys)
|
||||
{
|
||||
this.sys = sys;
|
||||
}
|
||||
|
||||
public BigDecimal getUsed()
|
||||
{
|
||||
return used;
|
||||
}
|
||||
|
||||
public void setUsed(BigDecimal used)
|
||||
{
|
||||
this.used = used;
|
||||
}
|
||||
|
||||
public BigDecimal getWait()
|
||||
{
|
||||
return wait;
|
||||
}
|
||||
|
||||
public void setWait(BigDecimal wait)
|
||||
{
|
||||
this.wait = wait;
|
||||
}
|
||||
|
||||
public BigDecimal getFree()
|
||||
{
|
||||
return free;
|
||||
}
|
||||
|
||||
public void setFree(BigDecimal free)
|
||||
{
|
||||
this.free = free;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,133 @@
|
|||
package com.luckyframe.project.monitor.server.domain.set;
|
||||
|
||||
import java.lang.management.ManagementFactory;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.luckyframe.common.utils.DateUtils;
|
||||
|
||||
/**
|
||||
* JVM相关信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class SetJvm
|
||||
{
|
||||
/**
|
||||
* 当前JVM占用的内存总数(M)
|
||||
*/
|
||||
private BigDecimal total;
|
||||
|
||||
/**
|
||||
* JVM最大可用内存总数(M)
|
||||
*/
|
||||
private BigDecimal max;
|
||||
|
||||
/**
|
||||
* JVM空闲内存(M)
|
||||
*/
|
||||
private BigDecimal free;
|
||||
|
||||
/**
|
||||
* JDK版本
|
||||
*/
|
||||
private String version;
|
||||
|
||||
/**
|
||||
* JDK路径
|
||||
*/
|
||||
private String home;
|
||||
|
||||
private BigDecimal used;
|
||||
|
||||
private BigDecimal usage;
|
||||
|
||||
public BigDecimal getTotal()
|
||||
{
|
||||
return total;
|
||||
}
|
||||
|
||||
public void setTotal(BigDecimal total)
|
||||
{
|
||||
this.total = total;
|
||||
}
|
||||
|
||||
public BigDecimal getMax()
|
||||
{
|
||||
return max;
|
||||
}
|
||||
|
||||
public void setMax(BigDecimal max)
|
||||
{
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
public BigDecimal getFree()
|
||||
{
|
||||
return free;
|
||||
}
|
||||
|
||||
public void setFree(BigDecimal free)
|
||||
{
|
||||
this.free = free;
|
||||
}
|
||||
|
||||
public BigDecimal getUsed() {
|
||||
return used;
|
||||
}
|
||||
|
||||
public void setUsed(BigDecimal used) {
|
||||
this.used = used;
|
||||
}
|
||||
|
||||
public BigDecimal getUsage() {
|
||||
return usage;
|
||||
}
|
||||
|
||||
public void setUsage(BigDecimal usage) {
|
||||
this.usage = usage;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取JDK名称
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
return ManagementFactory.getRuntimeMXBean().getVmName();
|
||||
}
|
||||
|
||||
public String getVersion()
|
||||
{
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(String version)
|
||||
{
|
||||
this.version = version;
|
||||
}
|
||||
|
||||
public String getHome()
|
||||
{
|
||||
return home;
|
||||
}
|
||||
|
||||
public void setHome(String home)
|
||||
{
|
||||
this.home = home;
|
||||
}
|
||||
|
||||
/**
|
||||
* JDK启动时间
|
||||
*/
|
||||
public String getStartTime()
|
||||
{
|
||||
return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getServerStartDate());
|
||||
}
|
||||
|
||||
/**
|
||||
* JDK运行时间
|
||||
*/
|
||||
public String getRunTime()
|
||||
{
|
||||
return DateUtils.getDatePoor(DateUtils.getNowDate(), DateUtils.getServerStartDate());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,67 @@
|
|||
package com.luckyframe.project.monitor.server.domain.set;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 內存相关信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class SetMem
|
||||
{
|
||||
/**
|
||||
* 内存总量
|
||||
*/
|
||||
private BigDecimal total;
|
||||
|
||||
/**
|
||||
* 已用内存
|
||||
*/
|
||||
private BigDecimal used;
|
||||
|
||||
/**
|
||||
* 剩余内存
|
||||
*/
|
||||
private BigDecimal free;
|
||||
|
||||
private BigDecimal usage;
|
||||
|
||||
public BigDecimal getTotal()
|
||||
{
|
||||
return total;
|
||||
}
|
||||
|
||||
public void setTotal(BigDecimal total)
|
||||
{
|
||||
this.total = total;
|
||||
}
|
||||
|
||||
public BigDecimal getUsed()
|
||||
{
|
||||
return used;
|
||||
}
|
||||
|
||||
public void setUsed(BigDecimal used)
|
||||
{
|
||||
this.used = used;
|
||||
}
|
||||
|
||||
public BigDecimal getFree()
|
||||
{
|
||||
return free;
|
||||
}
|
||||
|
||||
public void setFree(BigDecimal free)
|
||||
{
|
||||
this.free = free;
|
||||
}
|
||||
|
||||
public BigDecimal getUsage() {
|
||||
return usage;
|
||||
}
|
||||
|
||||
public void setUsage(BigDecimal usage) {
|
||||
this.usage = usage;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,88 @@
|
|||
package com.luckyframe.project.monitor.server.domain.set;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 服务器相关信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class SetServer
|
||||
{
|
||||
/**
|
||||
* CPU相关信息
|
||||
*/
|
||||
private SetCpu cpu = new SetCpu();
|
||||
|
||||
/**
|
||||
* 內存相关信息
|
||||
*/
|
||||
private SetMem mem = new SetMem();
|
||||
|
||||
/**
|
||||
* JVM相关信息
|
||||
*/
|
||||
private SetJvm jvm = new SetJvm();
|
||||
|
||||
/**
|
||||
* 服务器相关信息
|
||||
*/
|
||||
private SetSys sys = new SetSys();
|
||||
|
||||
/**
|
||||
* 磁盘相关信息
|
||||
*/
|
||||
private List<SetSysFile> sysFiles = new LinkedList<SetSysFile>();
|
||||
|
||||
public SetCpu getCpu()
|
||||
{
|
||||
return cpu;
|
||||
}
|
||||
|
||||
public void setCpu(SetCpu cpu)
|
||||
{
|
||||
this.cpu = cpu;
|
||||
}
|
||||
|
||||
public SetMem getMem()
|
||||
{
|
||||
return mem;
|
||||
}
|
||||
|
||||
public void setMem(SetMem mem)
|
||||
{
|
||||
this.mem = mem;
|
||||
}
|
||||
|
||||
public SetJvm getJvm()
|
||||
{
|
||||
return jvm;
|
||||
}
|
||||
|
||||
public void setJvm(SetJvm jvm)
|
||||
{
|
||||
this.jvm = jvm;
|
||||
}
|
||||
|
||||
public SetSys getSys()
|
||||
{
|
||||
return sys;
|
||||
}
|
||||
|
||||
public void setSys(SetSys sys)
|
||||
{
|
||||
this.sys = sys;
|
||||
}
|
||||
|
||||
public List<SetSysFile> getSysFiles()
|
||||
{
|
||||
return sysFiles;
|
||||
}
|
||||
|
||||
public void setSysFiles(List<SetSysFile> sysFiles)
|
||||
{
|
||||
this.sysFiles = sysFiles;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,84 @@
|
|||
package com.luckyframe.project.monitor.server.domain.set;
|
||||
|
||||
/**
|
||||
* 系统相关信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class SetSys
|
||||
{
|
||||
/**
|
||||
* 服务器名称
|
||||
*/
|
||||
private String computerName;
|
||||
|
||||
/**
|
||||
* 服务器Ip
|
||||
*/
|
||||
private String computerIp;
|
||||
|
||||
/**
|
||||
* 项目路径
|
||||
*/
|
||||
private String userDir;
|
||||
|
||||
/**
|
||||
* 操作系统
|
||||
*/
|
||||
private String osName;
|
||||
|
||||
/**
|
||||
* 系统架构
|
||||
*/
|
||||
private String osArch;
|
||||
|
||||
public String getComputerName()
|
||||
{
|
||||
return computerName;
|
||||
}
|
||||
|
||||
public void setComputerName(String computerName)
|
||||
{
|
||||
this.computerName = computerName;
|
||||
}
|
||||
|
||||
public String getComputerIp()
|
||||
{
|
||||
return computerIp;
|
||||
}
|
||||
|
||||
public void setComputerIp(String computerIp)
|
||||
{
|
||||
this.computerIp = computerIp;
|
||||
}
|
||||
|
||||
public String getUserDir()
|
||||
{
|
||||
return userDir;
|
||||
}
|
||||
|
||||
public void setUserDir(String userDir)
|
||||
{
|
||||
this.userDir = userDir;
|
||||
}
|
||||
|
||||
public String getOsName()
|
||||
{
|
||||
return osName;
|
||||
}
|
||||
|
||||
public void setOsName(String osName)
|
||||
{
|
||||
this.osName = osName;
|
||||
}
|
||||
|
||||
public String getOsArch()
|
||||
{
|
||||
return osArch;
|
||||
}
|
||||
|
||||
public void setOsArch(String osArch)
|
||||
{
|
||||
this.osArch = osArch;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,116 @@
|
|||
package com.luckyframe.project.monitor.server.domain.set;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 系统文件相关信息
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class SetSysFile
|
||||
{
|
||||
/**
|
||||
* 盘符路径
|
||||
*/
|
||||
private String dirName;
|
||||
|
||||
/**
|
||||
* 盘符类型
|
||||
*/
|
||||
private String sysTypeName;
|
||||
|
||||
/**
|
||||
* 文件类型
|
||||
*/
|
||||
private String typeName;
|
||||
|
||||
/**
|
||||
* 总大小
|
||||
*/
|
||||
private String total;
|
||||
|
||||
/**
|
||||
* 剩余大小
|
||||
*/
|
||||
private String free;
|
||||
|
||||
/**
|
||||
* 已经使用量
|
||||
*/
|
||||
private String used;
|
||||
|
||||
/**
|
||||
* 资源的使用率
|
||||
*/
|
||||
private BigDecimal usage;
|
||||
|
||||
public String getDirName()
|
||||
{
|
||||
return dirName;
|
||||
}
|
||||
|
||||
public void setDirName(String dirName)
|
||||
{
|
||||
this.dirName = dirName;
|
||||
}
|
||||
|
||||
public String getSysTypeName()
|
||||
{
|
||||
return sysTypeName;
|
||||
}
|
||||
|
||||
public void setSysTypeName(String sysTypeName)
|
||||
{
|
||||
this.sysTypeName = sysTypeName;
|
||||
}
|
||||
|
||||
public String getTypeName()
|
||||
{
|
||||
return typeName;
|
||||
}
|
||||
|
||||
public void setTypeName(String typeName)
|
||||
{
|
||||
this.typeName = typeName;
|
||||
}
|
||||
|
||||
public String getTotal()
|
||||
{
|
||||
return total;
|
||||
}
|
||||
|
||||
public void setTotal(String total)
|
||||
{
|
||||
this.total = total;
|
||||
}
|
||||
|
||||
public String getFree()
|
||||
{
|
||||
return free;
|
||||
}
|
||||
|
||||
public void setFree(String free)
|
||||
{
|
||||
this.free = free;
|
||||
}
|
||||
|
||||
public String getUsed()
|
||||
{
|
||||
return used;
|
||||
}
|
||||
|
||||
public void setUsed(String used)
|
||||
{
|
||||
this.used = used;
|
||||
}
|
||||
|
||||
public BigDecimal getUsage()
|
||||
{
|
||||
return usage;
|
||||
}
|
||||
|
||||
public void setUsage(BigDecimal usage)
|
||||
{
|
||||
this.usage = usage;
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package com.luckyframe.project.system.client.controller;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
|
@ -15,9 +16,12 @@ import org.springframework.web.bind.annotation.ResponseBody;
|
|||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.luckyframe.common.constant.ClientConstants;
|
||||
import com.luckyframe.common.constant.JobConstants;
|
||||
import com.luckyframe.common.constant.ScheduleConstants;
|
||||
import com.luckyframe.common.exception.BusinessException;
|
||||
import com.luckyframe.common.utils.client.HttpRequest;
|
||||
import com.luckyframe.common.utils.poi.ExcelUtil;
|
||||
import com.luckyframe.common.utils.security.PermissionUtils;
|
||||
import com.luckyframe.framework.aspectj.lang.annotation.Log;
|
||||
|
@ -27,6 +31,7 @@ import com.luckyframe.framework.web.domain.AjaxResult;
|
|||
import com.luckyframe.framework.web.page.TableDataInfo;
|
||||
import com.luckyframe.project.monitor.job.domain.Job;
|
||||
import com.luckyframe.project.monitor.job.service.IJobService;
|
||||
import com.luckyframe.project.monitor.server.domain.set.SetServer;
|
||||
import com.luckyframe.project.system.client.domain.Client;
|
||||
import com.luckyframe.project.system.client.service.IClientService;
|
||||
import com.luckyframe.project.system.project.service.IProjectService;
|
||||
|
@ -72,6 +77,23 @@ public class ClientController extends BaseController
|
|||
return getDataTable(list);
|
||||
}
|
||||
|
||||
@RequiresPermissions("system:client:view")
|
||||
@GetMapping("/showMonitor/{clientId}")
|
||||
public String showMonitor(@PathVariable("clientId") Integer clientId, ModelMap mmap) throws Exception
|
||||
{
|
||||
Client client = clientService.selectClientById(clientId);
|
||||
String result = HttpRequest.httpClientGet(
|
||||
"http://" + client.getClientIp() + ":" + ClientConstants.CLIENT_MONITOR_PORT + "/getClientMonitorData",
|
||||
new HashMap<String, Object>(0));
|
||||
System.out.println(result);
|
||||
JSONObject jSONObject = JSONObject.parseObject(result);
|
||||
System.out.println(jSONObject.toJSONString());
|
||||
|
||||
SetServer server = JSONObject.parseObject(jSONObject.toJSONString(),SetServer.class);
|
||||
System.out.println(JSONObject.toJSONString(server));
|
||||
mmap.put("server", server);
|
||||
return prefix + "/showMonitor";
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出客户端管理列表
|
||||
|
|
|
@ -18,7 +18,7 @@ $(document).ready(function(){
|
|||
},"请填写正确的座机号码");
|
||||
// IP地址验证
|
||||
jQuery.validator.addMethod("isIp", function(value, element) {
|
||||
return this.optional(element) || /^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.)(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.){2}([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))$/.test(value);
|
||||
return this.optional(element) || /^(([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.)(([0-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))\.){2}([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5])))$/.test(value);
|
||||
}, "请填写正确的IP地址。");
|
||||
//姓名校验
|
||||
jQuery.validator.addMethod("isName",function(value,element){
|
||||
|
|
|
@ -140,7 +140,7 @@
|
|||
<div class="col-sm-4">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>扫一扫加入QQ交流群</h5>
|
||||
<h5>扫一扫加入QQ群</h5>
|
||||
</div>
|
||||
<div class="ibox-content no-padding">
|
||||
<div class="panel-body" style="text-align:center;">
|
||||
|
|
|
@ -38,6 +38,9 @@
|
|||
<a class="btn btn-primary btn-edit disabled" onclick="$.operate.edit()" shiro:hasPermission="system:client:edit">
|
||||
<i class="fa fa-edit"></i> 修改
|
||||
</a>
|
||||
<a class="btn btn-info btn-edit disabled" onclick="showMonitor()" shiro:hasPermission="system:client:view">
|
||||
<i class="fa fa-edit"></i> 监控资源
|
||||
</a>
|
||||
<a class="btn btn-danger btn-del btn-del disabled" onclick="$.operate.removeAll()" shiro:hasPermission="system:client:remove">
|
||||
<i class="fa fa-remove"></i> 删除
|
||||
</a>
|
||||
|
@ -60,6 +63,7 @@
|
|||
updateUrl: prefix + "/edit/{id}",
|
||||
removeUrl: prefix + "/remove",
|
||||
exportUrl: prefix + "/export",
|
||||
customUrl: prefix + "/showMonitor/{id}",
|
||||
modalName: "客户端",
|
||||
search: false,
|
||||
showExport: true,
|
||||
|
@ -81,7 +85,7 @@
|
|||
},
|
||||
{
|
||||
field : 'status',
|
||||
title : '客户端超时',
|
||||
title : '客户端状态',
|
||||
formatter : function(value,
|
||||
row, index) {
|
||||
if(value==0){
|
||||
|
@ -122,6 +126,23 @@
|
|||
};
|
||||
$.table.init(options);
|
||||
});
|
||||
|
||||
function showMonitor() {
|
||||
var row= $.map($('#bootstrap-table').bootstrapTable('getSelections'), function (row) {
|
||||
return row;
|
||||
});
|
||||
|
||||
if(0!=row[0].status){
|
||||
$.modal.msgWarning("客户端非正常状态,不能查询");
|
||||
return true;
|
||||
}
|
||||
|
||||
var url = "/404.html";
|
||||
if ($.common.isNotEmpty(row)) {
|
||||
url = $.table._option.customUrl.replace("{id}", row[0].clientId);
|
||||
}
|
||||
$.modal.openViewFull("客户端资源监控 "+row[0].clientName+" ["+row[0].clientIp+"]", url, null, null);
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,254 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="zh" xmlns:th="http://www.thymeleaf.org"
|
||||
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
|
||||
<meta charset="utf-8">
|
||||
<head th:include="include :: header"></head>
|
||||
<body class="gray-bg" id="test">
|
||||
<div class="wrapper wrapper-content">
|
||||
<div class="col-sm-12">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>CPU</h5>
|
||||
<div class="ibox-tools">
|
||||
<a class="collapse-link"><i class="fa fa-chevron-up"></i>
|
||||
</a>
|
||||
<a class="close-link"><i class="fa fa-times"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
<table class="table table-hover no-margins">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>属性</th>
|
||||
<th>值</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>核心数</td>
|
||||
<td th:text="${server.cpu.cpuNum}">0个</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>用户使用率</td>
|
||||
<td th:text="${server.cpu.used + '%'}">0%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>系统使用率</td>
|
||||
<td th:text="${server.cpu.sys + '%'}">0%</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>当前空闲率</td>
|
||||
<td th:text="${server.cpu.free + '%'}">0%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-sm-6">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>内存</h5>
|
||||
<div class="ibox-tools">
|
||||
<a class="collapse-link"><i class="fa fa-chevron-up"></i></a>
|
||||
<a class="close-link"><i class="fa fa-times"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
<table class="table table-hover no-margins">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>属性</th>
|
||||
<th>内存</th>
|
||||
<th>JVM</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>总内存</td>
|
||||
<td th:text="${server.mem.total + 'G'}">0GB</td>
|
||||
<td th:text="${server.jvm.total + 'M'}">0MB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>已用内存</td>
|
||||
<td th:text="${server.mem.used + 'G'}">0GB</td>
|
||||
<td th:text="${server.jvm.used + 'M'}">0MB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>剩余内存</td>
|
||||
<td th:text="${server.mem.free + 'G'}">0GB</td>
|
||||
<td th:text="${server.jvm.free + 'M'}">0MB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>使用率</td>
|
||||
<td th:class="${server.mem.usage gt 80} ? 'text-danger'">[[${server.mem.usage}]]%</td>
|
||||
<td th:class="${server.jvm.usage gt 80} ? 'text-danger'">[[${server.jvm.usage}]]%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>服务器信息</h5>
|
||||
<div class="ibox-tools">
|
||||
<a class="collapse-link">
|
||||
<i class="fa fa-chevron-up"></i>
|
||||
</a>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<table class="table table-hover margin bottom">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>服务器名称</td>
|
||||
<td th:text="${server.sys.computerName}">RuoYi</td>
|
||||
<td>操作系统</td>
|
||||
<td th:text="${server.sys.osName}">Linux</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>服务器IP</td>
|
||||
<td th:text="${server.sys.computerIp}">127.0.0.1</td>
|
||||
<td>系统架构</td>
|
||||
<td th:text="${server.sys.osArch}">amd64</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>Java虚拟机信息</h5>
|
||||
<div class="ibox-tools">
|
||||
<a class="collapse-link">
|
||||
<i class="fa fa-chevron-up"></i>
|
||||
</a>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<table class="table table-hover margin bottom">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Java名称</td>
|
||||
<td th:text="${server.jvm.name}">Java</td>
|
||||
<td>Java版本</td>
|
||||
<td th:text="${server.jvm.version}">1.8.0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>启动时间</td>
|
||||
<td th:text="${server.jvm.startTime}">2018-12-31 00:00:00</td>
|
||||
<td>运行时长</td>
|
||||
<td th:text="${server.jvm.runTime}">0天0时0分0秒</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="1">安装路径</td>
|
||||
<td colspan="3" th:text="${server.jvm.home}"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="1">项目路径</td>
|
||||
<td colspan="3" th:text="${server.sys.userDir}"></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<div class="ibox float-e-margins">
|
||||
<div class="ibox-title">
|
||||
<h5>磁盘状态</h5>
|
||||
<div class="ibox-tools">
|
||||
<a class="collapse-link">
|
||||
<i class="fa fa-chevron-up"></i>
|
||||
</a>
|
||||
<a class="close-link">
|
||||
<i class="fa fa-times"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ibox-content">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<table class="table table-hover margin bottom">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>盘符路径</th>
|
||||
<th>文件系统</th>
|
||||
<th>盘符类型</th>
|
||||
<th>总大小</th>
|
||||
<th>可用大小</th>
|
||||
<th>已用大小</th>
|
||||
<th>已用百分比</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="sysFile : ${server.sysFiles}">
|
||||
<td th:text="${sysFile.dirName}">C:\</td>
|
||||
<td th:text="${sysFile.sysTypeName}">NTFS</td>
|
||||
<td th:text="${sysFile.typeName}">local</td>
|
||||
<td th:text="${sysFile.total}">0GB</td>
|
||||
<td th:text="${sysFile.free}">0GB</td>
|
||||
<td th:text="${sysFile.used}">0GB</td>
|
||||
<td th:class="${sysFile.usage gt 80} ? 'text-danger'">[[${sysFile.usage}]]%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<div th:include="include :: footer"></div>
|
||||
<script>
|
||||
$(".modal").appendTo("body"), $("[data-toggle=popover]").popover(), $(".collapse-link").click(function() {
|
||||
var div_ibox = $(this).closest("div.ibox"),
|
||||
e = $(this).find("i"),
|
||||
i = div_ibox.find("div.ibox-content");
|
||||
i.slideToggle(200),
|
||||
e.toggleClass("fa-chevron-up").toggleClass("fa-chevron-down"),
|
||||
div_ibox.toggleClass("").toggleClass("border-bottom"),
|
||||
setTimeout(function() {
|
||||
div_ibox.resize();
|
||||
}, 50);
|
||||
}), $(".close-link").click(function () {
|
||||
var div_ibox = $(this).closest("div.ibox");
|
||||
div_ibox.remove()
|
||||
});
|
||||
</script>
|
||||
</html>
|
Loading…
Reference in New Issue