![在这里插入图片描述](https://img-blog.csdnimg.cn/20200529152710177.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdWZlaWZlaWh1YXdlaQ==,size_16,color_FFFFFF,t_70)
<%/* Copyright (c) 2013-Now http://jeesite.com All rights reserved. */ %>
<% layout('/layouts/default.html', {title: '服务器监控', libs: ['layout','dataGrid']}){ %>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<div class="content pb0">
<div class="row">
<div class="col-sm-6 col-xs-12">
<div class="box box-widget">
<div class="box-header">
<i class="fa icon-speedometer"></i>
<h3 class="box-title">CPU</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i>
</button>
</div>
</div>
<div class="box-body no-padding">
<table class="table table-striped table-hover text-center">
<tr>
<th width="50%">${text("属性")}</th>
<th width="50%">${text("值")}</th>
</tr>
<tr>
<td>${text("核心数")}</td>
<td class="rtInfo" data-key="cpu.cpuNum">${server.cpu.cpuNum}</td>
</tr>
<tr>
<td>${text("用户使用率")}</td>
<td class="rtInfo" data-key="cpu.used">${server.cpu.used + '%'}</td>
</tr>
<tr>
<td>${text("系统使用率")}</td>
<td class="rtInfo" data-key="cpu.sys">${server.cpu.sys + '%'}</td>
</tr>
<tr>
<td>${text("当前空闲率")}</td>
<td class="rtInfo" data-key="cpu.free">${server.cpu.free + '%'}</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-sm-6 col-xs-12">
<div class="box box-widget">
<div class="box-header">
<i class="fa icon-fire"></i>
<h3 class="box-title">${text("内存")}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i>
</button>
</div>
</div>
<div class="box-body no-padding">
<table class="table table-striped table-hover text-center">
<tr>
<th width="33%">${text("属性")}</th>
<th width="33%">${text("内存")}</th>
<th width="33%">JVM</th>
</tr>
<tr>
<td>${text("总内存")}</td>
<td class="rtInfo" data-key="mem.total">${server.mem.total + 'G'}</td>
<td class="rtInfo" data-key="jvm.total">${server.jvm.total + 'M'}</td>
</tr>
<tr>
<td>${text("已用内存")}</td>
<td class="rtInfo" data-key="mem.used">${server.mem.used + 'G'}</td>
<td class="rtInfo" data-key="jvm.used">${server.jvm.used + 'M'}</td>
</tr>
<tr>
<td>${text("剩余内存")}</td>
<td class="rtInfo" data-key="mem.free">${server.mem.free + 'G'}</td>
<td class="rtInfo" data-key="jvm.free">${server.jvm.free + 'M'}</td>
</tr>
<tr>
<td>${text("使用率")}</td>
<td class="${server.mem.usage > 80 ? 'label-danger' : ''}">${server.mem.usage}%</td>
<td class="${server.jvm.usage > 80 ? 'label-danger' : ''}">${server.jvm.usage}%</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="box box-widget">
<div class="box-header">
<i class="fa icon-screen-tablet"></i>
<h3 class="box-title">${text("服务器信息")}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i>
</button>
</div>
</div>
<div class="box-body no-padding table-responsive">
<table class="table table-striped table-hover">
<tr>
<td width="15%">${text("服务器名称")}</td>
<td width="30%">${server.sys.computerName}</td>
<td width="15%">${text("操作系统")}</td>
<td>${server.sys.osName}, ${text("版本")} ${server.jvm.version}</td>
</tr>
<tr>
<td>${text("服务器IP")}</td>
<td>${server.sys.computerIp}</td>
<td>${text("系统架构")}</td>
<td>${server.sys.osArch}</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-xs-12">
<div class="box box-widget">
<div class="box-header">
<i class="fa icon-cup"></i>
<h3 class="box-title">${text("Java虚拟机信息")}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i>
</button>
</div>
</div>
<div class="box-body no-padding table-responsive">
<table class="table table-striped table-hover">
<tr>
<td width="15%">${text("Java名称")}</td>
<td width="30%">${server.jvm.name}</td>
<td width="15%">${text("Java版本")}</td>
<td>${server.jvm.version}, ${text("供应商")} 0000000</td>
</tr>
<tr>
<td>${text("启动时间")}</td>
<td>${server.jvm.startTime}</td>
<td>${text("运行时长")}</td>
<td>${server.jvm.runTime}</td>
</tr>
<tr>
<td>${text("安装路径")}</td>
<td colspan="3">${server.jvm.home}</td>
</tr>
<tr>
<td colspan="1">项目路径</td>
<td colspan="3">${server.sys.userDir}</td>
</tr>
</table>
</div>
<div class="col-xs-12">
<div class="box box-widget">
<div class="box-header">
<i class="fa icon-drawer"></i>
<h3 class="box-title">${text("磁盘状态")}</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse">
<i class="fa fa-minus"></i>
</button>
</div>
</div>
<div class="box-body no-padding table-responsive">
<table class="table table-striped table-hover text-center">
<tr>
<th>${text("盘符路径")}</th>
<th>${text("文件系统")}</th>
<th>${text("盘符类型")}</th>
<th>${text("总大小")}</th>
<th>${text("可用大小")}</th>
<th>${text("已用大小")}</th>
<th>${text("已用百分比")}</th>
</tr>
<%
for(sysFile in server.sysFiles){
%>
<tr>
<td>${sysFile.dirName}</td>
<td>${sysFile.sysTypeName}</td>
<td>${sysFile.typeName}</td>
<td>${sysFile.total}</td>
<td>${sysFile.free}</td>
<td>${sysFile.used}</td>
<td class="${sysFile.usage > 80 ? 'label-danger' : ''}">${sysFile.usage}%</td>
</tr>
<%}%>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<% } %>
<script>
var rtInfoRefresh = function(){
$.get('${ctx}/state/server/rtInfo?__notUpdateSession=true&__t='
+new Date().getTime(), function(data){
$('.rtInfo').each(function(){
var key = $(this).data('key');
var val = js.val(data, key);
if (js.endWith(val, '%')){
var i = parseInt(val.replace('%', ''));
if (i <= 80){
val = '<font color="green">' + val + '</font>';
}else{
val = '<font color="red">' + val + '</font>';
}
}
$(this).html(val);
});
});
}
rtInfoRefresh();
setInterval(rtInfoRefresh, 3*1000);
// 执行垃圾回收
$('#btnGC').click(function(){
js.ajaxSubmit("${ctx}/state/server/gc", function(data){
js.showMessage(data.message);
});
});
</script>
@Controller
@RequestMapping("/monitor/server")
public class ServerController extends BaseController
{
private String prefix = "monitor/server";
@RequiresPermissions("monitor:server:view")
@GetMapping()
public String server(ModelMap mmap) throws Exception{
Server server = new Server();
server.copyTo();
mmap.put("server", server);
return prefix + "/server.html";
}
}