| | |
| | | <el-tabs id="systemMonitor" v-model="activeName"> |
| | | <el-tab-pane label="单元" name="proc"> |
| | | <div class="form-title"> |
| | | <b>算法单元</b>(正在进行5个算法单元) |
| | | <b>算法单元</b> |
| | | (正在进行{{algoProcessData.length}}个算法单元) |
| | | <el-table :data="algoProcessData" style="width: 100%"> |
| | | <el-table-column prop="desc" label="名称" width="180"></el-table-column> |
| | | <el-table-column label="CPU" width="180"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.cpu.toFixed(2)}} %</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="内存"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.mem.toFixed(2)}} %</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="disk" label="硬盘"></el-table-column> |
| | | <el-table-column label="算力"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.gpu}} M</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="net" label="网络"></el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | |
| | | <div class="form-title"> |
| | | <b>应用单元</b>(正在进行5个应用单元) |
| | | <div class="form-title" style="margin-top:20px"> |
| | | <b>应用单元</b> |
| | | (正在进行{{appProcessData.length}}个应用单元) |
| | | <el-table :data="appProcessData" style="width: 100%"> |
| | | <el-table-column prop="desc" label="名称" width="180"></el-table-column> |
| | | <el-table-column prop="cpu" label="CPU" width="180"></el-table-column> |
| | | <el-table-column prop="mem" label="内存"></el-table-column> |
| | | <el-table-column prop="disk" label="硬盘"></el-table-column> |
| | | <el-table-column prop="gpu" label="算力"></el-table-column> |
| | | <el-table-column prop="net" label="网络"></el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <el-divider></el-divider> |
| | | </el-tab-pane> |
| | | |
| | | <el-tab-pane label="性能" name="top"> |
| | | <div class="column-left" ref="left"> |
| | | <div class="resize-bar"> |
| | | <div class="ax_default"> |
| | | <div class="ax_default_pic"></div> |
| | | <div>CPU</div> |
| | | <div>100%</div> |
| | | <div |
| | | :class="['ax_default', activeChartItem == 'cpu' ?'selected': '']" |
| | | @click="setActiveChartItem('cpu')" |
| | | > |
| | | <div class="ax_default_pic color-cpu"></div> |
| | | <div class="ax_default_text">CPU</div> |
| | | <div class="ax_default_subtext">{{cpuUsedPercent}}%</div> |
| | | </div> |
| | | |
| | | <div class="ax_default"> |
| | | <div class="ax_default_pic"></div> |
| | | <div>内存</div> |
| | | <div>100%</div> |
| | | <div |
| | | :class="['ax_default', activeChartItem == 'mem' ?'selected': '']" |
| | | @click="setActiveChartItem('mem')" |
| | | > |
| | | <div class="ax_default_pic color-mem"></div> |
| | | <div class="ax_default_text">内存</div> |
| | | <div class="ax_default_subtext">{{memUsedPercent}}%</div> |
| | | </div> |
| | | |
| | | <div class="ax_default"> |
| | | <div class="ax_default_pic"></div> |
| | | <div>磁盘</div> |
| | | <div>100%</div> |
| | | <div |
| | | :class="['ax_default', activeChartItem == 'gpu' ?'selected': '']" |
| | | @click="setActiveChartItem('gpu')" |
| | | > |
| | | <div class="ax_default_pic color-gpu"></div> |
| | | <div class="ax_default_text">算力</div> |
| | | <div class="ax_default_subtext">{{gpuUsedPercent}}%</div> |
| | | </div> |
| | | |
| | | <div class="ax_default"> |
| | | <div class="ax_default_pic"></div> |
| | | <div>算力</div> |
| | | <div>100%</div> |
| | | <div |
| | | :class="['ax_default', activeChartItem == 'net' ?'selected': '']" |
| | | @click="setActiveChartItem('net')" |
| | | > |
| | | <div class="ax_default_pic color-net"></div> |
| | | <div class="ax_default_text">网络</div> |
| | | <div class="ax_default_subtext">{{netSend | byteConver}} / {{netRecive | byteConver}}</div> |
| | | </div> |
| | | |
| | | <div class="ax_default"> |
| | | <div class="ax_default_pic"></div> |
| | | <div>网络</div> |
| | | <div>100%</div> |
| | | <div |
| | | v-for="(v, k) in disks" |
| | | :key="k" |
| | | :class="['ax_default', activeChartItem == ('disk|' + k) ?'selected': '']" |
| | | @click="setActiveChartItem('disk|'+k)" |
| | | > |
| | | <div class="ax_default_pic color-disk"></div> |
| | | <div class="ax_default_text">磁盘 {{k}}</div> |
| | | <div class="ax_default_subtext">{{v.info.total | byteConver}}</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="resize-line"></div> |
| | | </div> |
| | | |
| | | <div class="column-right"> |
| | | <div class="max-val">{{yAxisMaxVal}}</div> |
| | | <div ref="graphs" class="graphs-chart"></div> |
| | | |
| | | <div v-show="activeChartItem == 'cpu'"> |
| | | <div class="ax_default_label"> |
| | | <b>占用率</b> |
| | | <p>{{cpuUsedPercent}}%</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>主频</b> |
| | | <p>{{cpuMaxRate}}Ghz</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>插槽</b> |
| | | <p>{{cpuCount}}</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>内核</b> |
| | | <p>{{cpuCore}}</p> |
| | | </div> |
| | | </div> |
| | | |
| | | <div v-show="activeChartItem == 'mem'"> |
| | | <div class="ax_default_label"> |
| | | <b>使用中</b> |
| | | <p>{{memUsed}}G</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>已缓存</b> |
| | | <p>{{memCache}}G</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>可用</b> |
| | | <p>{{memFree}}G</p> |
| | | </div> |
| | | </div> |
| | | |
| | | <div v-show="activeChartItem == 'net'"> |
| | | <div class="ax_default_label"> |
| | | <b>接收</b> |
| | | <p>{{netRecive |byteConver}}</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>发送</b> |
| | | <p>{{netSend |byteConver}}</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>IP地址</b> |
| | | <p>{{ipAddr}}</p> |
| | | </div> |
| | | <div class="ax_default_label" style="margin-left: 19px;"> |
| | | <b>MAC地址</b> |
| | | <p>{{macAddr}}</p> |
| | | </div> |
| | | </div> |
| | | |
| | | <div v-show="isDisk"> |
| | | <div class="ax_default_label"> |
| | | <b>容量</b> |
| | | <p>{{activeDisk.total |byteConver}}</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>已用</b> |
| | | <p>{{activeDisk.used |byteConver}}</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>可用</b> |
| | | <p>{{activeDisk.free |byteConver}}</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>读取速度</b> |
| | | <p>{{ioRead | byteConver}}</p> |
| | | </div> |
| | | <div class="ax_default_label"> |
| | | <b>写入速度</b> |
| | | <p>{{ioWrite | byteConver}}</p> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </el-tab-pane> |
| | | |
| | | <el-tab-pane label="服务" name="service"> |
| | | <el-table height="93%" :data="services" border :cell-style="cellStyle"> |
| | | <el-table-column label="名称" align="center" show-overflow-tooltip> |
| | | <el-table :data="vasystemServicesData"> |
| | | <el-table-column label="名称" show-overflow-tooltip> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.name}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="状态" prop="status" align="center" width="130px"></el-table-column> |
| | | <el-table-column label="描述" prop="text" align="center"></el-table-column> |
| | | <el-table-column label="状态" prop="status"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.pid == 0 ? "未启动" : "已启动" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="描述" prop="desc"></el-table-column> |
| | | </el-table> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | |
| | | |
| | | <script> |
| | | import echarts from "echarts"; |
| | | import { showSystemStates } from "../api/api" |
| | | import { showSystemStates, showService, showProcesses } from "../api/api" |
| | | |
| | | export default { |
| | | components: { |
| | | |
| | | |
| | | }, |
| | | data() { |
| | | return { |
| | | activeName: "proc", |
| | | eChartsObj: {}, |
| | | eChartsBaseOpt: { |
| | | animation: false, |
| | | xAxis: { |
| | | type: "category", |
| | | boundaryGap: false, |
| | | data: Array.from({ length: 100 }, () => 0), |
| | | axisLabel: { |
| | | show: false |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | axisLabel: { |
| | | show: false |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'line', |
| | | symbol: 'none', |
| | | data: Array.from({ length: 100 }, () => 0), |
| | | // smooth: true, |
| | | areaStyle: {} |
| | | } |
| | | ] |
| | | }, |
| | | services: [ |
| | | { |
| | | name: "系统配置服务", |
| | | status: "已启动", |
| | | text: "实现系统的通用功能配置" |
| | | |
| | | } |
| | | ] |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.initChart(); |
| | | if (!this.isShow('vindicate:device')) { |
| | | this.activeName = "dbvdc" |
| | | } |
| | | }, |
| | | computed: { |
| | | isDisk() { |
| | | return this.activeChartItem.indexOf("disk") == 0 |
| | | }, |
| | | isAdmin() { |
| | | if ( |
| | | sessionStorage.getItem('userInfo') && |
| | |
| | | return false; |
| | | } |
| | | }, |
| | | filters: { |
| | | byteConver(limit) { |
| | | var size = ""; |
| | | if (limit < 1024) { //如果小于0.1KB转化成B |
| | | size = limit + "B"; |
| | | } else if (limit < 1024 * 1024) {//如果小于0.1MB转化成KB |
| | | size = (limit / 1024).toFixed(2) + "KB"; |
| | | } else if (limit < 1024 * 1024 * 1024) { //如果小于0.1GB转化成MB |
| | | size = (limit / (1024 * 1024)).toFixed(2) + "MB"; |
| | | } else if (limit < 1024 * 1024 * 1024 * 1024) { //其他转化成GB |
| | | size = (limit / (1024 * 1024 * 1024)).toFixed(2) + "GB"; |
| | | } else { |
| | | size = (limit / (1024 * 1024 * 1024 * 1024)).toFixed(2) + "TB"; |
| | | } |
| | | |
| | | var sizestr = size + ""; |
| | | var len = sizestr.indexOf("\."); |
| | | var dec = sizestr.substr(len + 1, 2); |
| | | if (dec == "00") {//当小数点后为00时 去掉小数部分 |
| | | return sizestr.substring(0, len) + sizestr.substr(len + 3, 2); |
| | | } |
| | | |
| | | return sizestr; |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | activeName: "proc", |
| | | activeChartItem: "cpu", |
| | | yAxisMaxVal: "100%", |
| | | algoProcessData: [], |
| | | appProcessData: [], |
| | | vasystemServicesData: [], |
| | | eChartsObj: {}, |
| | | eChartsBaseOpt: { |
| | | title: { |
| | | top: 10, |
| | | }, |
| | | animation: false, |
| | | grid: { |
| | | show: true, |
| | | left: '1%', |
| | | right: '4%', |
| | | bottom: '3%', |
| | | containLabel: true, |
| | | borderWidth: 2, |
| | | borderColor: '#000' |
| | | }, |
| | | xAxis: { |
| | | type: "category", |
| | | boundaryGap: false, |
| | | data: Array.from({ length: 60 }, () => 0), |
| | | // show: false, |
| | | axisLabel: { |
| | | show: false |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | }, |
| | | splitLine: { |
| | | show: true, |
| | | interval: 5, |
| | | lineStyle: { |
| | | width: 1, |
| | | type: 'solid' |
| | | } |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | // show: false, |
| | | axisLine: { |
| | | show: false |
| | | }, |
| | | axisLabel: { |
| | | show: false |
| | | }, |
| | | axisTick: { |
| | | show: false |
| | | } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'line', |
| | | symbol: 'none', |
| | | data: Array.from({ length: 60 }, () => 0), |
| | | // smooth: true, |
| | | itemStyle: {}, |
| | | areaStyle: {} |
| | | } |
| | | ] |
| | | }, |
| | | cpuUtilizations: Array.from({ length: 60 }, () => 0), |
| | | memUtilizations: Array.from({ length: 60 }, () => 0), |
| | | gpuUtilizations: Array.from({ length: 60 }, () => 0), |
| | | diskIOWriteCount: Array.from({ length: 60 }, () => 0), |
| | | diskIOReadCount: Array.from({ length: 60 }, () => 0), |
| | | netReciveCount: Array.from({ length: 60 }, () => 0), |
| | | netSendCount: Array.from({ length: 60 }, () => 0), |
| | | cpuModel: "", |
| | | cpuUsedPercent: 0, |
| | | cpuMaxRate: 0, |
| | | cpuCount: 0, |
| | | cpuCore: 0, |
| | | memTotal: 0, |
| | | memUsed: 0, |
| | | memFree: 0, |
| | | memCache: 0, |
| | | memUsedPercent: 0, |
| | | netSend: 0, |
| | | netRecive: 0, |
| | | ipAddr: "", |
| | | macAddr: "", |
| | | gpuUsedPercent: 0, |
| | | disks: {}, |
| | | activeDisk: {}, |
| | | ioRead: 0, |
| | | ioWrite: 0 |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.dataCollection(); |
| | | this.initChart(); |
| | | }, |
| | | methods: { |
| | | // 循环采集所有数据 |
| | | dataCollection() { |
| | | this.serviceCollect(); |
| | | this.procCollect(); |
| | | setTimeout(() => { |
| | | this.dataCollection(); |
| | | }, 5000) |
| | | }, |
| | | serviceCollect() { |
| | | showService().then(rsp => { |
| | | if (rsp && rsp.success) { |
| | | rsp.data.sort(function (obj1, obj2) { |
| | | var val1 = obj1.name |
| | | var val2 = obj2.name |
| | | if (val1 < val2) { |
| | | return -1 |
| | | } else if (val1 > val2) { |
| | | return 1 |
| | | } else { |
| | | return 0 |
| | | } |
| | | }) |
| | | this.vasystemServicesData = rsp.data; |
| | | } |
| | | }).catch(() => { }) |
| | | |
| | | }, |
| | | procCollect() { |
| | | showProcesses().then(rsp => { |
| | | if (rsp && rsp.success) { |
| | | if (rsp.data.algos) |
| | | this.algoProcessData = rsp.data.algos; |
| | | |
| | | if (rsp.data.apps) |
| | | this.appProcessData = rsp.data.apps; |
| | | } |
| | | |
| | | }).catch(() => { }) |
| | | }, |
| | | getSystemState() { |
| | | showSystemStates().then(rsp => { |
| | | if (rsp && rsp.success) { |
| | | // 处理cpu |
| | | this.cpuUtilizations = this.cpuUtilizations.slice(1); |
| | | this.cpuUtilizations.push(rsp.data.cpu.toFixed(2)); |
| | | this.cpuUsedPercent = this.cpuUtilizations[59]; |
| | | if (rsp.data.cpu_info) { |
| | | this.cpuMaxRate = (rsp.data.cpu_info[0].mhz / 1024).toFixed(2); |
| | | this.cpuModel = rsp.data.cpu_info[0].modelName; |
| | | this.cpuCore = Number(rsp.data.cpu_info[rsp.data.cpu_info.length - 1].coreId) + 1; |
| | | this.cpuCount = (rsp.data.cpu_info.length / this.cpuCore).toFixed(0); |
| | | } |
| | | |
| | | // 内存 |
| | | this.memUtilizations = this.memUtilizations.slice(1); |
| | | this.memUtilizations.push(rsp.data.mem.usedPercent.toFixed(2)); |
| | | this.memTotal = (rsp.data.mem.total / 1024 / 1024 / 1000).toFixed(0); |
| | | this.memUsed = (rsp.data.mem.used / 1024 / 1024 / 1000).toFixed(2); |
| | | this.memFree = (rsp.data.mem.free / 1024 / 1024 / 1000).toFixed(2); |
| | | this.memCache = ((rsp.data.mem.cached + rsp.data.mem.buffers) / 1024 / 1024 / 1000).toFixed(2); |
| | | this.memUsedPercent = rsp.data.mem.usedPercent.toFixed(2); |
| | | |
| | | // 算力 |
| | | this.gpuUtilizations = this.gpuUtilizations.slice(1); |
| | | this.gpuUtilizations.push(rsp.data.gpu.toFixed(2)); |
| | | this.gpuUsedPercent = this.gpuUtilizations[59]; |
| | | |
| | | // 网络 |
| | | this.netReciveCount = this.netReciveCount.slice(1); |
| | | this.netReciveCount.push(rsp.data.net.bytesRecv); |
| | | this.netSendCount = this.netSendCount.slice(1); |
| | | this.netSendCount.push(rsp.data.net.bytesSent); |
| | | |
| | | this.netRecive = this.netReciveCount[59]; |
| | | this.netSend = this.netSendCount[59]; |
| | | this.macAddr = rsp.data.net.mac; |
| | | if (rsp.data.net.addr.length) { |
| | | this.ipAddr = rsp.data.net.addr[0].addr; |
| | | } |
| | | |
| | | // 磁盘 |
| | | rsp.data.disk.sort(function (obj1, obj2) { |
| | | var val1 = obj1.name; |
| | | var val2 = obj2.name; |
| | | if (val1 < val2) { |
| | | return -1; |
| | | } else if (val1 > val2) { |
| | | return 1; |
| | | } else { |
| | | return 0; |
| | | } |
| | | }) |
| | | |
| | | rsp.data.disk.forEach(d => { |
| | | if (d.name in this.disks) { |
| | | this.disks[d.name].readBytes = this.disks[d.name].readBytes.slice(1); |
| | | this.disks[d.name].readBytes.push(d.readBytes); |
| | | this.disks[d.name].writeBytes = this.disks[d.name].writeBytes.slice(1); |
| | | this.disks[d.name].writeBytes.push(d.writeBytes); |
| | | } else { |
| | | this.disks[d.name] = {}; |
| | | this.disks[d.name]["info"] = d.info; |
| | | this.disks[d.name]["readBytes"] = Array.from({ length: 60 }, () => 0); |
| | | this.disks[d.name]["writeBytes"] = Array.from({ length: 60 }, () => 0); |
| | | } |
| | | }); |
| | | |
| | | // this.disks = rsp.data.disk; |
| | | } |
| | | |
| | | |
| | | this.setChartData(); |
| | | setTimeout(() => { |
| | | this.getSystemState(); |
| | | }, 1000) |
| | | }) |
| | | }, |
| | | isShow(authority) { |
| | | if (this.isAdmin) { |
| | | return true |
| | |
| | | this.$moment(array[1]).format("YYYY-MM-DD") |
| | | ]; |
| | | }, |
| | | setActiveChartItem(item) { |
| | | this.activeChartItem = item; |
| | | this.eChartsObj.clear(); |
| | | this.setChartData(); |
| | | }, |
| | | initChart() { |
| | | this.eChartsObj = echarts.init(this.$refs.graphs); |
| | | this.eChartsObj.setOption(this.eChartsBaseOpt); |
| | | this.cpuMonitor() |
| | | this.getSystemState(); |
| | | }, |
| | | cpuMonitor() { |
| | | let rate = Math.floor(Math.random() * 100); |
| | | let data = this.eChartsBaseOpt.series[0].data.slice(1); |
| | | data.push(rate) |
| | | this.eChartsBaseOpt.series[0].data = data; |
| | | this.eChartsObj.setOption(this.eChartsBaseOpt); |
| | | setTimeout(() => { |
| | | this.cpuMonitor() |
| | | }, 1000) |
| | | setChartData() { |
| | | let option = JSON.parse(JSON.stringify(this.eChartsBaseOpt)); |
| | | switch (this.activeChartItem) { |
| | | case 'cpu': |
| | | this.yAxisMaxVal = this.cpuModel; |
| | | option.title.text = "CPU"; |
| | | option.title.subtext = "%占用率"; |
| | | option.yAxis.max = 100; |
| | | option.yAxis.min = 0; |
| | | option.grid.borderColor = "#8aadd0"; |
| | | option.series[0].itemStyle.color = "#8aadd0"; |
| | | option.series[0].areaStyle.color = "#a8d4ff"; |
| | | option.series[0].data = this.cpuUtilizations; |
| | | |
| | | break; |
| | | case 'mem': |
| | | this.yAxisMaxVal = this.memTotal + "G"; |
| | | option.title.text = "内存"; |
| | | option.title.subtext = "内存使用量"; |
| | | option.yAxis.max = 100; |
| | | option.yAxis.min = 0; |
| | | option.grid.borderColor = "#ff9900"; |
| | | option.series[0].itemStyle.color = "#ff9900"; |
| | | option.series[0].areaStyle.color = "#f7bb88"; |
| | | option.series[0].data = this.memUtilizations; |
| | | break; |
| | | case 'gpu': |
| | | this.yAxisMaxVal = "100%"; |
| | | option.title.text = "算力"; |
| | | option.title.subtext = "%使用率"; |
| | | option.yAxis.max = 100; |
| | | option.yAxis.min = 0; |
| | | option.grid.borderColor = "#bc84d8"; |
| | | option.series[0].itemStyle.color = "#bc84d8"; |
| | | option.series[0].areaStyle.color = "#de9dff"; |
| | | option.series[0].data = this.gpuUtilizations; |
| | | break; |
| | | case 'net': |
| | | this.yAxisMaxVal = ""; |
| | | option.title.text = "网络"; |
| | | option.title.subtext = "网络负载"; |
| | | option.grid.borderColor = "#4696da"; |
| | | option.series[0].itemStyle.color = "#ffa16a"; |
| | | option.series[0].areaStyle.color = "#d68658"; |
| | | option.series[0].data = this.netReciveCount; |
| | | option.series.push({ |
| | | type: 'line', |
| | | symbol: 'none', |
| | | data: this.netSendCount, |
| | | // smooth: true, |
| | | itemStyle: { |
| | | color: "#4696da" |
| | | }, |
| | | areaStyle: { |
| | | color: "#4eacfd" |
| | | } |
| | | }) |
| | | break; |
| | | default: |
| | | if (this.activeChartItem.indexOf("disk|") == 0) { |
| | | let dev = this.activeChartItem.split("|")[1]; |
| | | |
| | | this.yAxisMaxVal = ""; |
| | | option.title.text = "磁盘"; |
| | | option.title.subtext = "磁盘传输速率"; |
| | | option.grid.borderColor = "#33cc66"; |
| | | option.series[0].itemStyle.color = "#4696da"; |
| | | option.series[0].areaStyle.color = "#4eacfd"; |
| | | option.series[0].data = this.disks[dev].readBytes; |
| | | option.series.push({ |
| | | type: 'line', |
| | | symbol: 'none', |
| | | data: this.disks[dev].writeBytes, |
| | | // smooth: true, |
| | | itemStyle: { |
| | | color: "#33ff66" |
| | | }, |
| | | areaStyle: { |
| | | color: "#33cc66" |
| | | } |
| | | }) |
| | | |
| | | this.activeDisk = this.disks[dev].info; |
| | | this.ioRead = this.disks[dev].readBytes[59]; |
| | | this.ioWrite = this.disks[dev].writeBytes[59]; |
| | | } |
| | | break; |
| | | } |
| | | |
| | | this.eChartsObj.setOption(option); |
| | | } |
| | | |
| | | } |
| | |
| | | } |
| | | |
| | | .graphs-chart { |
| | | height: 380px; |
| | | width: 450px; |
| | | height: 500px; |
| | | width: 900px; |
| | | margin-left: 15px; |
| | | // border: 1px solid rgb(69, 69, 172); |
| | | } |
| | | |
| | | .column-left { |
| | | background-color: #fff; |
| | | position: relative; |
| | | float: left; |
| | | } |
| | | |
| | | .column-right { |
| | | //overflow: hidden; |
| | | overflow-y: hidden; |
| | | overflow-x: auto; |
| | | } |
| | | .resize-bar { |
| | | width: 200px; |
| | | height: 400px; |
| | | |
| | | .max-val { |
| | | position: absolute; |
| | | right: 4%; |
| | | top: 8%; |
| | | } |
| | | |
| | | .resize-bar { |
| | | width: 238px; |
| | | height: 610px; |
| | | } |
| | | |
| | | /* 拖拽线 */ |
| | | .resize-line { |
| | | position: absolute; |
| | |
| | | } |
| | | |
| | | .ax_default { |
| | | font-family: "Arial Normal", "Arial"; |
| | | font-weight: 400; |
| | | font-style: normal; |
| | | font-size: 13px; |
| | | text-align: center; |
| | | line-height: normal; |
| | | width: 200px; |
| | | height: 50px; |
| | | font-size: 16px; |
| | | width: 207px; |
| | | height: 45px; |
| | | padding: 10px; |
| | | font-size: 15px; |
| | | margin: 5px; |
| | | cursor: pointer; |
| | | margin-bottom: 15px; |
| | | } |
| | | |
| | | .selected { |
| | | background: inherit; |
| | | background-color: #cde8ff; |
| | | border: none; |
| | | border-radius: 8px; |
| | | } |
| | | |
| | | .ax_default_pic { |
| | | position: absolute; |
| | | border-width: 0px; |
| | | width: 65px; |
| | | width: 66px; |
| | | height: 45px; |
| | | background: inherit; |
| | | background-color: rgba(255, 255, 255, 0); |
| | | box-sizing: border-box; |
| | | border-width: 1px; |
| | | border-style: solid; |
| | | border-color: rgba(255, 153, 0, 1); |
| | | border-radius: 0px; |
| | | -moz-box-shadow: none; |
| | | -webkit-box-shadow: none; |
| | | box-shadow: none; |
| | | border: 1px solid rgba(255, 153, 0, 1); |
| | | background-repeat: no-repeat; |
| | | background-position: bottom; |
| | | } |
| | | |
| | | .color-cpu { |
| | | border-color: #8aadd0; |
| | | background-image: url("/images/systemMonitor/cpu.png"); |
| | | } |
| | | |
| | | .color-mem { |
| | | border-color: #ff9900; |
| | | background-image: url("/images/systemMonitor/mem.png"); |
| | | } |
| | | |
| | | .color-gpu { |
| | | border-color: #bc84d8; |
| | | background-image: url("/images/systemMonitor/gpu.png"); |
| | | } |
| | | |
| | | .color-net { |
| | | border-color: #4696da; |
| | | background-image: url("/images/systemMonitor/net.png"); |
| | | } |
| | | |
| | | .color-disk { |
| | | border-color: #33cc66; |
| | | background-image: url("/images/systemMonitor/disk.png"); |
| | | } |
| | | |
| | | .ax_default_text { |
| | | position: relative; |
| | | text-align: left; |
| | | margin-left: 72px; |
| | | } |
| | | |
| | | .ax_default_subtext { |
| | | font-size: 13px; |
| | | margin-left: 72px; |
| | | line-height: 35px; |
| | | color: #4e4d4d; |
| | | text-align: left; |
| | | } |
| | | |
| | | .ax_default_label { |
| | | width: 120px; |
| | | font-size: 15px; |
| | | display: inline-block; |
| | | float: left; |
| | | |
| | | b { |
| | | font-family: "思源黑体"; |
| | | font-weight: 400; |
| | | font-style: normal; |
| | | color: #a1a1a1; |
| | | } |
| | | |
| | | p { |
| | | margin-top: 5px; |
| | | } |
| | | } |
| | | .ax_label_flex { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | flex-direction: column; |
| | | } |
| | | .s-system-monitor-breadcrumb { |
| | | height: 5%; |
| | | box-sizing: border-box; |
| | | border: 1px solid #e4e7ed; |
| | | box-shadow: #e4e7ed 0px 0px 9px inset; |
| | | box-shadow: #e4e7ed 0px 0px 9px inset; |
| | | border-radius: 5px; |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .el-tabs__content { |
| | | height: calc(100% - 64px); |
| | | width: calc(100% - 20px); |
| | | box-sizing: border-box; |
| | | overflow-y: auto; |
| | | padding: 10px 40px !important; |
| | | padding: 10px 10px !important; |
| | | .el-tab-pane { |
| | | width: 100%; |
| | | .s-title { |