monit_frontend/src/view/Monit.vue

209 lines
3.8 KiB
Vue
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.

<template>
<a-row justify="space-between" :gutter="{ xs: 8, sm: 16, md: 24, lg: 32 }">
<a-col :span="6">
<a-card title="系统信息" :bordered="false" class="sys">
<p>在线用户{{ sysparams.name }}</p>
<p>用户数量{{ sysparams.count }}</p>
<p>系统当前时间{{ sysparams.current_time }}</p>
<p>系统开机时间{{ sysparams.start_time }}</p>
</a-card>
</a-col>
<a-col :span="6">
<a-card title="cpu使用率" :bordered="false" class="cpu">
<echarts class="chart" :option="option"/>
</a-card>
</a-col>
<a-col :span="6">
<a-card title="内存使用率" :bordered="false" class="memory">
<echarts class="chart" :option="memory"/>
</a-card>
</a-col>
<a-col :span="6">
<a-card title="磁盘分区" :bordered="false" class="disk">
<a-table :columns="columns" :data-source="disk.data" size="middle" :pagination="false"/>
</a-card>
</a-col>
</a-row>
</template>
<script setup>
import {onMounted, reactive,watch} from "vue";
let sysparams = reactive({
count: 0,
name: "",
current_time: "",
start_time: "",
cpu_percent: 0,
})
const option = reactive({
tooltip: {
formatter: '{a} <br/>{b} : {c}%'
},
series: [
{
name: 'cpu',
type: 'gauge',
detail: {
formatter: '{value}'
},
data: [
{
value: 60,
name: 'cpu'
}
]
}
]
})
const memory = reactive({
tooltip: {
formatter: '{a} <br/>{b} : {c}%'
},
series: [
{
name: 'memory',
type: 'gauge',
progress: {
show: true
},
detail: {
valueAnimation: true,
formatter: '{value}'
},
data: [
{
value: 60,
name: 'memory'
}
]
}
]
})
const columns = [{
title: '分区名称',
dataIndex: 'device',
}, {
title: '容量(G)',
dataIndex: 'total',
}, {
title: '已使用(G)',
dataIndex: 'used',
}, {
title: "剩余(G)",
dataIndex: "free",
}
];
onMounted(() => {
GetSytem()
})
const disk = reactive({
data:[]
})
function GetSytem(){
console.log("开始连接websocket......")
const ws = new WebSocket("ws://127.0.0.1:8000/api/ws")
ws.onopen = function () { ws.send("")};
ws.onmessage = function (msg){
console.log("开始接受数据.............")
const data = JSON.parse(msg.data)
console.log(data)
let {cpu_percent} = data.cpu_info
let {percent} = data.memory_info
// 渲染cpu数据
option.series[0].data[0].value = cpu_percent
//渲染内存信息数据
memory.series[0].data[0].value = percent
//渲染系统信息数据
let {count, name, current_time, start_time} = data.sys_info
sysparams.count = count
sysparams.name = name
sysparams.current_time = current_time
let data_array = reactive([])
sysparams.start_time = start_time
//渲染disk磁盘信息
data.disk_info.map((par, index) => {
let params = {
key: String(index),
device: par.device,
total: par.total,
used: par.used,
free: par.free,
}
if (index < 5) {
data_array.push(params)
}
})
disk.data=data_array
}
}
</script>
<style scoped>
.chart {
height: 300px;
width: 300px;
}
.echarts {
width: 270px;
}
.charts {
display: flex;
justify-content: space-around;
justify-items: center;
height: 85%;
width: 100%;
background-color: #42EBFF;
overflow-x: scroll;
}
p {
display: flex;
justify-content: flex-start;
font-size: 16px;
font-weight: bold;
}
#components-table-demo-size h4 {
margin-bottom: 16px;
}
.disk {
border: 1px solid #f5f5f5;
height: 100%
}
.memory {
border: 1px solid #f5f5f5;
height: 100%;
}
.sys {
border: 1px solid #f5f5f5;
height: 100%
}
.cpu {
border: 1px solid #f5f5f5;
height: 100%;
}
</style>