2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-04 18:27:13 +08:00
Files
panel/resources/views/monitor.blade.php
2022-11-21 23:22:39 +08:00

334 lines
14 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<title>监控</title>
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-form layui-card-header layuiadmin-card-header-auto">
<div class="layui-inline">
<span style="margin-right: 10px;">开启监控</span><input type="checkbox" id="monitor-switch"
lay-filter="monitor" lay-skin="switch"
lay-text="ON|OFF">
<span style="margin-left: 40px; margin-right: 10px;">保存天数</span>
<div class="layui-input-inline"><input type="number" name="monitor-save-days" class="layui-input"
style="height: 30px; margin-top: 5px;" min=0 max=30 disabled>
</div>
<div class="layui-input-inline">
<button id="save_monitor_date" class="layui-btn layui-btn-sm" style="margin-left: 10px;">确定
</button>
</div>
</div>
<div style="float: right;">
<button id="clear_monitor_record" class="layui-btn layui-btn-sm layui-btn-danger">清空监控记录
</button>
</div>
</div>
</div>
<div class="layui-row layui-col-space10">
<div class="layui-col-xs12 layui-col-md6">
<div class="layui-card">
<div class="layui-card-header">
<span>负载</span>
<div style="float: right;">
{{--<button class="layui-btn layui-btn-xs layui-btn-primary">昨天
</button>--}}
<button class="layui-btn layui-btn-xs">今天</button>
{{--<button class="layui-btn layui-btn-xs layui-btn-primary">
最近七天
</button>
<button class="layui-btn layui-btn-xs layui-btn-primary">
最近30天
</button>
<button id="test" class="layui-btn layui-btn-xs layui-btn-primary">自定义时间
</button>--}}
</div>
</div>
<div class="layui-card-body">
<div id="load_monitor" style="width: 100%;height: 400px;"></div>
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md6">
<div class="layui-card">
<div class="layui-card-header">
<span>CPU</span>
<div style="float: right;">
{{--<button class="layui-btn layui-btn-xs layui-btn-primary">昨天
</button>--}}
<button class="layui-btn layui-btn-xs">今天</button>
{{--<button class="layui-btn layui-btn-xs layui-btn-primary">
最近七天
</button>
<button class="layui-btn layui-btn-xs layui-btn-primary">最近30天
</button>
<button class="layui-btn layui-btn-xs layui-btn-primary">自定义时间
</button>--}}
</div>
</div>
<div class="layui-card-body">
<div id="cpu_monitor" style="width: 100%;height: 400px;"></div>
</div>
</div>
</div>
</div>
<div class="layui-row layui-col-space10">
<div class="layui-col-xs12 layui-col-md6">
<div class="layui-card">
<div class="layui-card-header">
<span>内存</span>
<div style="float: right;">
{{--<button class="layui-btn layui-btn-xs layui-btn-primary">昨天
</button>--}}
<button class="layui-btn layui-btn-xs">今天</button>
{{--<button class="layui-btn layui-btn-xs layui-btn-primary">
最近七天
</button>
<button class="layui-btn layui-btn-xs layui-btn-primary">
最近30天
</button>
<button class="layui-btn layui-btn-xs layui-btn-primary">
自定义时间
</button>--}}
</div>
</div>
<div class="layui-card-body">
<div id="memory_monitor" style="width: 100%;height: 400px;"></div>
</div>
</div>
</div>
<div class="layui-col-xs12 layui-col-md6">
<div class="layui-card">
<div class="layui-card-header">
<span>网络</span>
<div style="float: right;">
{{--<button class="layui-btn layui-btn-xs layui-btn-primary">昨天
</button>--}}
<button class="layui-btn layui-btn-xs">今天</button>
{{--<button class="layui-btn layui-btn-xs layui-btn-primary">最近七天
</button>
<button class="layui-btn layui-btn-xs layui-btn-primary">最近30天
</button>
<button class="layui-btn layui-btn-xs layui-btn-primary">自定义时间
</button>--}}
</div>
</div>
<div class="layui-card-body">
<div id="network_monitor" style="width: 100%;height: 400px;"></div>
</div>
</div>
</div>
</div>
</div>
<script>
layui.use(['admin', 'view', 'form', 'echarts', 'element', 'carousel'], function () {
var admin = layui.admin;
var view = layui.view;
var $ = layui.jquery;
var form = layui.form;
// 获取监控开关和保存天数
admin.req({
url: '/api/panel/monitor/getMonitorSwitchAndDays',
type: 'get',
dataType: 'json',
success: function (res) {
if (res.code === 0) {
if (res.data.monitor == 1) {
$('#monitor-switch').attr('checked', true);
} else {
$('#monitor-switch').attr('checked', false);
}
$('input[name="monitor-save-days"]').val(res.data.monitor_days);
// 移除禁用
$('input[name="monitor-save-days"]').removeAttr('disabled');
form.render();
}
}
});
// 监听switch开关是否开启监控
form.on('switch(monitor)', function (data) {
admin.req({
url: '/api/panel/monitor/setMonitorSwitch',
type: 'post',
dataType: 'json',
data: {switch: data.elem.checked},
success: function (res) {
if (res.code === 0) {
layer.msg('修改成功', {icon: 1});
} else {
layer.msg(res.msg, {icon: 2});
}
}
});
});
// 监听保存天数按钮
$('#save_monitor_date').click(function () {
var days = $('input[name="monitor-save-days"]').val();
if (days == '') {
layer.msg('请输入保存天数', {icon: 2});
return false;
}
admin.req({
url: '/api/panel/monitor/setMonitorSaveDays',
type: 'post',
dataType: 'json',
data: {days: days},
success: function (res) {
if (res.code === 0) {
layer.msg('修改成功', {icon: 1});
} else {
layer.msg(res.msg, {icon: 2});
}
}
});
});
// 监听清除监控数据按钮
$('#clear_monitor_record').click(function () {
layer.confirm('确定要清除监控数据吗?', function (index) {
admin.req({
url: '/api/panel/monitor/clearMonitorData',
type: 'post',
dataType: 'json',
success: function (res) {
if (res.code === 0) {
layer.msg('清除成功', {icon: 1});
setTimeout(function () {
admin.render();
}, 1000);
} else {
layer.msg(res.msg, {icon: 2});
}
}
});
layer.close(index);
});
});
// 获取监控数据
admin.req({
url: '/api/panel/monitor/getMonitorData',
type: 'get',
dataType: 'json',
success: function (res) {
if (res.code !== 0) {
layer.msg(res.msg, {icon: 2});
return false;
}
renderEcharts('load_monitor', '负载监控', undefined, res.data.times, [{
name: '负载',
type: 'line',
smooth: true,
itemStyle: {normal: {areaStyle: {type: 'default'}}},
data: res.data.uptime.uptime,
markPoint: {
data: [{type: 'max', name: '最大值'}, {type: 'min', name: '最小值'}]
},
markLine: {
data: [{type: 'average', name: '平均值'}]
}
}]);
renderEcharts('cpu_monitor', 'CPU监控', undefined, res.data.times, [{
name: '使用率',
type: 'line',
smooth: true,
itemStyle: {normal: {areaStyle: {type: 'default'}}},
data: res.data.cpu.use,
markPoint: {
data: [{type: 'max', name: '最大值'}, {type: 'min', name: '最小值'}]
},
markLine: {
data: [{type: 'average', name: '平均值'}]
}
}], '{value} %', '单位 %');
renderEcharts('memory_monitor', '内存', {
x: 'left',
data: ["内存", "Swap"]
}, res.data.times, [{
name: '内存',
type: 'line',
smooth: true,
itemStyle: {normal: {areaStyle: {type: 'default'}}},
data: res.data.memory.mem_use,
markPoint: {
data: [{type: 'max', name: '最大值'}, {type: 'min', name: '最小值'}]
},
markLine: {
data: [{type: 'average', name: '平均值'}]
}
}, {
name: 'Swap',
type: 'line',
smooth: true,
itemStyle: {normal: {areaStyle: {type: 'default'}}},
data: res.data.memory.swap_use,
markPoint: {
data: [{type: 'max', name: '最大值'}, {type: 'min', name: '最小值'}]
},
markLine: {
data: [{type: 'average', name: '平均值'}]
}
}], '{value} M', '单位 MB');
renderEcharts('network_monitor', '网络', {
x: 'left',
data: ["", ""]
}, res.data.times, [{
name: '出',
type: 'line',
smooth: true,
itemStyle: {normal: {areaStyle: {type: 'default'}}},
data: res.data.network.tx_now,
markPoint: {
data: [{type: 'max', name: '最大值'}, {type: 'min', name: '最小值'}]
},
markLine: {
data: [{type: 'average', name: '平均值'}]
}
}, {
name: '入',
type: 'line',
smooth: true,
itemStyle: {normal: {areaStyle: {type: 'default'}}},
data: res.data.network.rx_now,
markPoint: {
data: [{type: 'max', name: '最大值'}, {type: 'min', name: '最小值'}]
},
markLine: {
data: [{type: 'average', name: '平均值'}]
}
}], '{value} Kb', '单位 Kb/s');
}, error: function (xhr, status, error) {
console.log('耗子Linux面板ajax请求出错错误' + error);
}
});
});
// 渲染图表
function renderEcharts(element_id, title, legend = undefined, data_xAxis, series, formatter = '{value}', yName = '') {
var Chart = echarts.init(document.getElementById(element_id), layui.echartsTheme);
var option = {
title: {text: title, x: 'center', textStyle: {fontSize: 20}},
tooltip: {trigger: 'axis'},
legend: legend,
xAxis: [{type: 'category', boundaryGap: false, data: data_xAxis}],
yAxis: [{
name: yName,
type: 'value',
axisLabel: {
formatter: formatter
}
}],
dataZoom: {
show: true,
realtime: true,
start: 0,
end: 100
},
series: series
};
Chart.setOption(option);
window.onresize = Chart.resize;
}
</script>