| ¶Ô±ÈÐÂÎļþ | 
|  |  |  | 
|---|
|  |  |  | <template> | 
|---|
|  |  |  | <Profile :permissions="['system:monitor:query']"> | 
|---|
|  |  |  | <div class="monitor"> | 
|---|
|  |  |  | <div class="toolbar"> | 
|---|
|  |  |  | <el-switch v-model="autoRefresh" @change="changeAutoRefresh"/><label>{{autoRefresh | autoRefreshText}}</label> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | <ul> | 
|---|
|  |  |  | <li class="wrap"> | 
|---|
|  |  |  | <h2>CPU<Light v-if="data != null" :warn="data.cpu.useRatio > 60" :danger="data.cpu.useRatio > 80"/></h2> | 
|---|
|  |  |  | <div> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>ç©çæ ¸æ°</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="cpu.physicalCount"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>é»è¾æ ¸æ°</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="cpu.logicalCount"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl class="important"> | 
|---|
|  |  |  | <dt>å½å使ç¨ç</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="cpu.useRatio" :handler="keep2decimals" suffix="%"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>å½å空é²ç</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="cpu.freeRatio" :handler="keep2decimals" suffix="%"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </li> | 
|---|
|  |  |  | <li class="wrap"> | 
|---|
|  |  |  | <h2>å
å<Light v-if="data != null" :warn="data.memory.useRatio > 60" :danger="data.memory.useRatio > 80"/></h2> | 
|---|
|  |  |  | <div> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>æ»ç©ºé´</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="memory.size" suffix="G" :handler="toG"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>空é²ç©ºé´</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="memory.freeSpace" suffix="G" :handler="toG"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl class="important"> | 
|---|
|  |  |  | <dt>å·²ç¨ç©ºé´</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="memory.usedSpace" suffix="G" :handler="toG"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl class="important"> | 
|---|
|  |  |  | <dt>使ç¨ç</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="memory.useRatio" suffix="%" :handler="keep2decimals"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </li> | 
|---|
|  |  |  | <li class="wrap"> | 
|---|
|  |  |  | <h2>JVM<Light v-if="data != null" :warn="data.jvm.memory.useRatio > 60" :danger="data.jvm.memory.useRatio > 80"/></h2> | 
|---|
|  |  |  | <div> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>å®è£
è·¯å¾</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="jvm.home"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>çæ¬</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="jvm.version"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>å¯å¨æ¶é´</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="jvm.bootTime"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>è¿è¡æ¶é¿</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="jvm.runtime"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>æ»ç©ºé´</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="jvm.memory.size" suffix="M" :handler="keep2decimals"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>空é²ç©ºé´</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="jvm.memory.freeSpace" suffix="M" :handler="keep2decimals"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl class="important"> | 
|---|
|  |  |  | <dt>å·²ç¨ç©ºé´</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="jvm.memory.usedSpace" suffix="M" :handler="keep2decimals"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl class="important"> | 
|---|
|  |  |  | <dt>使ç¨ç</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="jvm.memory.useRatio" suffix="%" :handler="keep2decimals"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </li> | 
|---|
|  |  |  | <li class="wrap"> | 
|---|
|  |  |  | <h2>æå¡å¨</h2> | 
|---|
|  |  |  | <div> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>æä½ç³»ç»</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="osName"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>ç³»ç»çæ¬</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="osVersion"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>ç³»ç»æ¶æ</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="osArch"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl class="important"> | 
|---|
|  |  |  | <dt>IPå°å</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="ip"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>MACå°å</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="mac"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | <dl> | 
|---|
|  |  |  | <dt>æå¡å¨æ¶é´</dt> | 
|---|
|  |  |  | <dd><Value :data="data" prop="currentTime"/></dd> | 
|---|
|  |  |  | </dl> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </li> | 
|---|
|  |  |  | </ul> | 
|---|
|  |  |  | <div class="wrap"> | 
|---|
|  |  |  | <h2>ç£çä¿¡æ¯</h2> | 
|---|
|  |  |  | <el-table :data="data ? data.disks : []" v-loading="loading"> | 
|---|
|  |  |  | <el-table-column prop="name" label="ç£çåç§°"/> | 
|---|
|  |  |  | <el-table-column prop="dir" label="ç£çè·¯å¾"/> | 
|---|
|  |  |  | <el-table-column prop="fsType" label="æä»¶ç³»ç»"/> | 
|---|
|  |  |  | <el-table-column prop="size" label="æ»ç©ºé´"> | 
|---|
|  |  |  | <template slot-scope="{row}"> | 
|---|
|  |  |  | {{toG(row.size)}}G | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column prop="freeSpace" label="å¯ç¨ç©ºé´"> | 
|---|
|  |  |  | <template slot-scope="{row}"> | 
|---|
|  |  |  | {{toG(row.freeSpace)}}G | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column prop="usedSpace" label="å·²ç¨ç©ºé´"> | 
|---|
|  |  |  | <template slot-scope="{row}"> | 
|---|
|  |  |  | <label class="important">{{toG(row.usedSpace)}}G</label> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column prop="useRatio" label="å·²ç¨å æ¯"> | 
|---|
|  |  |  | <template slot-scope="{row}"> | 
|---|
|  |  |  | <label class="important">{{keep2decimals(row.useRatio)}}%</label> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column> | 
|---|
|  |  |  | <template slot-scope="{row}"> | 
|---|
|  |  |  | <Light :warn="row.useRatio > 60" :danger="row.useRatio > 80" :mini="true"/> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | </el-table> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  | </Profile> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <script> | 
|---|
|  |  |  | import { getSystemInfo } from '@/api/system/monitor' | 
|---|
|  |  |  | import Value from '@/components/common/Value' | 
|---|
|  |  |  | import Light from '@/components/common/Light' | 
|---|
|  |  |  | import Profile from '../../components/common/Profile' | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export default { | 
|---|
|  |  |  | name: 'SystemMonitor', | 
|---|
|  |  |  | components: { Profile, Light, Value }, | 
|---|
|  |  |  | data () { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | // å è½½ä¸ | 
|---|
|  |  |  | loading: false, | 
|---|
|  |  |  | // èªå¨å·æ°æ è¯ | 
|---|
|  |  |  | autoRefresh: false, | 
|---|
|  |  |  | // æ°æ® | 
|---|
|  |  |  | data: null, | 
|---|
|  |  |  | // èªå¨å·æ°å®æ¶å¨ | 
|---|
|  |  |  | interval: null | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | filters: { | 
|---|
|  |  |  | autoRefreshText (value) { | 
|---|
|  |  |  | if (value) { | 
|---|
|  |  |  | return 'å·²å¼å¯èªå¨å·æ°' | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return 'å·²å
³éèªå¨å·æ°' | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | methods: { | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * åæ¢èªå¨å·æ° | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param autoRefresh æ¯å¦èªå¨å·æ° | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | changeAutoRefresh (autoRefresh) { | 
|---|
|  |  |  | if (this.interval != null) { | 
|---|
|  |  |  | clearInterval(this.interval) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (autoRefresh) { | 
|---|
|  |  |  | this.getSystemInfo() | 
|---|
|  |  |  | this.interval = setInterval(() => { | 
|---|
|  |  |  | this.getSystemInfo() | 
|---|
|  |  |  | }, 3000) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * è·åç³»ç»ä¿¡æ¯ | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | getSystemInfo () { | 
|---|
|  |  |  | if (this.loading) { | 
|---|
|  |  |  | return | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.loading = true | 
|---|
|  |  |  | getSystemInfo() | 
|---|
|  |  |  | .then(data => { | 
|---|
|  |  |  | this.data = data | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(e => { | 
|---|
|  |  |  | this.$tip.apiFailed(e) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .finally(() => { | 
|---|
|  |  |  | this.loading = false | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * åä½è½¬ä¸ºG | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param value è½¬æ¢å¼ | 
|---|
|  |  |  | * @returns {number} | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | toG (value) { | 
|---|
|  |  |  | return Math.round(value / 1024 * 100) / 100 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * è½¬ä¸ºæ¯ç | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param value è½¬æ¢å¼ | 
|---|
|  |  |  | * @returns {number} | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | keep2decimals (value) { | 
|---|
|  |  |  | return Math.round(value * 100) / 100 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | beforeRouteLeave (from, to, next) { | 
|---|
|  |  |  | clearInterval(this.interval) | 
|---|
|  |  |  | next() | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | created () { | 
|---|
|  |  |  | this.getSystemInfo() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </script> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <style scoped lang="scss"> | 
|---|
|  |  |  | @import "@/assets/style/variables.scss"; | 
|---|
|  |  |  | .monitor { | 
|---|
|  |  |  | padding: 20px 20px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //ʌᴌ
·æ  | 
|---|
|  |  |  | .toolbar { | 
|---|
|  |  |  | margin-bottom: 12px; | 
|---|
|  |  |  | background: #fff; | 
|---|
|  |  |  | padding: 8px 16px; | 
|---|
|  |  |  | label { | 
|---|
|  |  |  | font-size: 12px; | 
|---|
|  |  |  | margin-left: 8px; | 
|---|
|  |  |  | color: #999; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ul { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | flex-wrap: wrap; | 
|---|
|  |  |  | justify-content: space-between; | 
|---|
|  |  |  | li { | 
|---|
|  |  |  | width: 49.5%; | 
|---|
|  |  |  | min-height: 200px; | 
|---|
|  |  |  | flex-shrink: 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // ä¿¡æ¯æ¨¡å | 
|---|
|  |  |  | .wrap { | 
|---|
|  |  |  | background: #fff; | 
|---|
|  |  |  | box-shadow: 2px 2px 10px -5px #999; | 
|---|
|  |  |  | border-radius: 8px; | 
|---|
|  |  |  | margin-bottom: 16px; | 
|---|
|  |  |  | h2 { | 
|---|
|  |  |  | border-bottom: 1px solid #eee; | 
|---|
|  |  |  | font-size: 18px; | 
|---|
|  |  |  | font-weight: normal; | 
|---|
|  |  |  | line-height: 40px; | 
|---|
|  |  |  | padding: 0 16px; | 
|---|
|  |  |  | color: #555; | 
|---|
|  |  |  | position: relative; | 
|---|
|  |  |  | .light { | 
|---|
|  |  |  | position: absolute; | 
|---|
|  |  |  | top: 12px; | 
|---|
|  |  |  | right: 12px; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | & > div { | 
|---|
|  |  |  | padding: 0 16px; | 
|---|
|  |  |  | font-size: 14px; | 
|---|
|  |  |  | dl { | 
|---|
|  |  |  | display: flex; | 
|---|
|  |  |  | dt { | 
|---|
|  |  |  | width: 80px; | 
|---|
|  |  |  | text-align: right; | 
|---|
|  |  |  | flex-shrink: 0; | 
|---|
|  |  |  | color: #999; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | dd { | 
|---|
|  |  |  | width: 100%; | 
|---|
|  |  |  | margin: 0; | 
|---|
|  |  |  | padding-left: 12px; | 
|---|
|  |  |  | color: #555; | 
|---|
|  |  |  | overflow: hidden; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // éè¦ä¿¡æ¯ | 
|---|
|  |  |  | .important { | 
|---|
|  |  |  | color: $primary-color; | 
|---|
|  |  |  | font-weight: bold; | 
|---|
|  |  |  | & > dd > div { | 
|---|
|  |  |  | color: $primary-color; | 
|---|
|  |  |  | font-weight: bold; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | </style> | 
|---|