新增加服务器监控功能

This commit is contained in:
不做码农 2022-04-17 10:35:13 +08:00
parent a7a90a96ac
commit 6da756c685
2 changed files with 329 additions and 1 deletions

View File

@ -0,0 +1,326 @@
<template>
<div class="app-container">
<el-row>
<el-col :lg="24" class="card-box">
<el-card class="box-card">
<template #header>
<div class="card-header clearfix">
<span style="font-weight: bold;color: #666;font-size: 15px">状态</span>
</div>
</template>
<div>
<el-col :xs="24" :sm="24" :md="6" :lg="6" :xl="6" style="margin-bottom: 10px">
<div class="title">CPU使用率</div>
<el-tooltip placement="top-end">
<div class="content" v-if="server.cpu">
<el-progress type="dashboard" :percentage="parseFloat(server.cpu.cpuRate)" />
</div>
</el-tooltip>
<div class="footer" v-if="server.sys">{{ server.sys.cpuNum }} 核心</div>
</el-col>
<el-col :xs="24" :sm="24" :md="6" :lg="6" :xl="6" style="margin-bottom: 10px" v-if="server.cpu">
<div class="title">内存使用率</div>
<el-tooltip placement="top-end">
<template #content>
<div style="font-size: 12px;">
<div style="padding: 3px;">
总量{{ server.cpu.totalRAM }}
</div>
<div style="padding: 3px">
已使用{{ server.cpu.usedRam }}
</div>
<div style="padding: 3px">
空闲{{ server.cpu.freeRam }}
</div>
</div>
</template>
<div class="content">
<el-progress type="dashboard" :percentage="parseFloat( server.cpu.ramRate)" />
</div>
</el-tooltip>
<div class="footer"> {{server.cpu.usedRam}} / {{ server.cpu.totalRAM }}</div>
</el-col>
<!--
<el-col :xs="24" :sm="24" :md="6" :lg="6" :xl="6" style="margin-bottom: 10px">
<div class="title">磁盘使用率</div>
<div class="content">
<el-tooltip placement="top-end">
<div slot="content" style="font-size: 12px;">
<div style="padding: 3px">
总量{{ 1 }}
</div>
<div style="padding: 3px">
空闲{{ 1 }}
</div>
</div>
<div class="content">
<el-progress type="dashboard" :percentage="parseFloat(3)" />
</div>
</el-tooltip>
</div>
<div class="footer">{{ 1 }} / {{ 100 }}</div>
</el-col> -->
</div>
</el-card>
</el-col>
<el-col :lg="24" class="card-box">
<el-card>
<template #header>
<div class="card-header">
<span>服务器信息</span>
</div>
</template>
<div class="el-table el-table--enable-row-hover el-table--medium">
<table cellspacing="0" style="width: 100%;" v-if="server.sys">
<tbody>
<tr>
<td>
<div class="cell">服务器名称</div>
</td>
<td>
<div class="cell">{{ server.sys.computerName }}</div>
</td>
<td>
<div class="cell">操作系统</div>
</td>
<td>
<div class="cell">{{ server.sys.osName }}</div>
</td>
</tr>
<tr>
<td>
<div class="cell">服务器IP</div>
</td>
<td>
<div class="cell">{{ server.sys.serverIP }}</div>
</td>
<td>
<div class="cell">系统架构</div>
</td>
<td>
<div class="cell">{{ server.sys.osArch }}</div>
</td>
</tr>
<tr>
<td>
<div class="cell">系统运行时长</div>
</td>
<td>
<div class="cell">{{ server.sys.runTime }}</div>
</td>
<td>
<div class="cell"></div>
</td>
<td>
<div class="cell"></div>
</td>
</tr>
</tbody>
</table>
</div>
</el-card>
</el-col>
<el-col :span="24" class="card-box">
<el-card>
<template #header>
<div class="card-header">
<span>磁盘状态</span>
</div>
</template>
<el-col :xs="24" :sm="24" :md="6" :lg="6" :xl="6" v-for="sysFile in server.disk" :key="sysFile.diskName" style="margin-bottom: 10px">
<div class="title">{{sysFile.diskName }}盘使用率</div>
<div class="content">
<el-tooltip placement="top-end">
<template #content>
<div style="font-size: 12px;">
<div style="padding: 3px">
总量{{ sysFile.totalSize }}GB
</div>
<div style="padding: 3px">
空闲{{ sysFile.availableFreeSpace }}GB
</div>
<div style="padding: 3px">
已用{{ sysFile.used }}GB
</div>
</div>
</template>
<div class="content">
<el-progress type="dashboard" :percentage="parseFloat(sysFile.availablePercent)" />
</div>
</el-tooltip>
</div>
<div class="footer">{{ sysFile.availableFreeSpace }}GB可用{{ sysFile.totalSize }}GB</div>
</el-col>
</el-card>
</el-col>
<el-col :lg="24" class="card-box">
<el-card>
<template #header>
<div>
<span>.NET Core信息</span>
</div>
</template>
<div class="el-table el-table--enable-row-hover el-table--medium">
<table cellspacing="0" style="width: 100%;">
<tbody>
<tr>
<td>
<div class="cell">环境变量</div>
</td>
<td>
<div class="cell" v-if="server.app">{{ server.app.name }}</div>
</td>
<td>
<div class="cell">.Net版本</div>
</td>
<td>
<div class="cell" v-if="server.app">{{ server.app.version }}</div>
</td>
</tr>
<tr>
<td>
<div class="cell">启动时间</div>
</td>
<td>
<div class="cell" v-if="server.app">{{ server.app.startTime }}</div>
</td>
<td>
<div class="cell">运行时长</div>
</td>
<td>
<div class="cell" v-if="server.app">{{ server.app.runTime }}</div>
</td>
</tr>
<tr>
<td>
<div class="cell">占用内存</div>
</td>
<td>
<div class="cell" v-if="server.app">{{ server.app.appRAM }}</div>
</td>
<td>
<div class="cell">启动地址</div>
</td>
<td>
<div class="cell" v-if="server.app">{{server.app.host}}</div>
</td>
</tr>
<tr>
<td>
<div class="cell">ContentRootPath</div>
</td>
<td>
<div class="cell" v-if="server.app">{{ server.app.rootPath }}</div>
</td>
<td>
<div class="cell">webPath</div>
</td>
<td>
<div class="cell" v-if="server.app">{{ server.app.webRootPath }}</div>
</td>
</tr>
</tbody>
</table>
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import { getServer } from '@/api/monitor/server'
export default {
name: 'Server',
data() {
return {
//
loading: [],
//
server: [],
intervalId: null,
}
},
created() {
this.getList()
this.openLoading()
this.dataRefreh()
},
methods: {
/** 查询服务器信息 */
getList() {
getServer()
.then((response) => {
this.server = response.data
this.loading.close()
})
.catch((err) => {
this.loading.close()
})
},
//
openLoading() {
this.loading = this.$loading({
lock: true,
text: '拼命读取中',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
})
},
dataRefreh() {
if (this.intervalId != null) {
return
}
this.intervalId = setInterval(() => {
this.getList()
}, 10000)
},
/**
* 停止定时器
*/
clear() {
clearInterval(this.intervalId)
this.intervalId = null
},
},
destroyed() {
this.clear()
},
}
</script>
<style scoped>
table tr {
height: 30px;
}
.is-leaf {
text-align: center;
padding: 0 10px;
}
.title {
text-align: center;
font-size: 15px;
font-weight: 500;
color: #999;
margin-bottom: 16px;
}
.footer {
text-align: center;
font-size: 15px;
font-weight: 500;
color: #999;
margin-top: -5px;
margin-bottom: 10px;
}
.content {
text-align: center;
margin-top: 5px;
margin-bottom: 5px;
}
</style>

View File

@ -119,7 +119,9 @@
<template #label>
<span>
<el-tooltip content="选择是外链则路由地址需要以`http(s)://`开头" placement="top">
<i class="question"></i>
<el-icon :size="15">
<questionFilled />
</el-icon>
</el-tooltip>是否外链
</span>
</template>