¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |