123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- <template>
- <div class="ct">
- <el-row :gutter="20">
- <el-col :lg="6" :md="12" :xs="24">
- <div class="block">
- <p class="label">负载状态</p>
- <el-popover width="100" trigger="hover">
- <div class="system-perf-progress-popover">
- <ul>
- <li>CPU:{{ cpu.perc | fixed2 }} %</li>
- <li>内存:{{ mem.perc | fixed2 }} %</li>
- </ul>
- </div>
- <el-progress
- slot="reference"
- type="circle"
- :percentage="lb.perc | fixed2"
- :color="lb.perc | status_color"
- ></el-progress>
- </el-popover>
- </div>
- </el-col>
- <el-col :lg="6" :md="12" :xs="24">
- <div class="block">
- <p class="label">CPU存使用率</p>
- <el-progress
- type="circle"
- :percentage="cpu.perc | fixed2"
- :color="cpu.perc | status_color"
- ></el-progress>
- </div>
- </el-col>
- <el-col :lg="6" :md="12" :xs="24">
- <div class="block">
- <p class="label">内存使用率</p>
- <el-popover width="100" trigger="hover">
- <div class="system-perf-progress-popover">
- <ul>
- <li>总数:{{ mem.total | unit_size }}</li>
- <li>已使用:{{ mem.used | unit_size }}</li>
- </ul>
- </div>
- <el-progress
- slot="reference"
- type="circle"
- :percentage="mem.perc | fixed2"
- :color="mem.perc | status_color"
- ></el-progress>
- </el-popover>
- </div>
- </el-col>
- <el-col :lg="6" :md="12" :xs="24" v-for="(item, index) in disk.list" :key="index">
- <div class="block">
- <p class="label">{{ item.mount }}</p>
- <el-popover width="100" trigger="hover">
- <div class="system-perf-progress-popover">
- <ul>
- <li>总数:{{ item.size | unit_size }}</li>
- <li>已使用:{{ item.used | unit_size }}</li>
- </ul>
- </div>
- <el-progress
- slot="reference"
- type="circle"
- :percentage="item.use | fixed2"
- :color="item.use | status_color"
- ></el-progress>
- </el-popover>
- </div>
- </el-col>
- </el-row>
- </div>
- </template>
- <script>
- import Common from "./common";
- export default {
- filters: {
- status_color(v) {
- if (v < 50) {
- return "#67C23A";
- }
- if (v < 70) {
- return "#E6A23C";
- }
- if (v < 100) {
- return "#F56C6C";
- }
- }
- },
- mixins: [Common],
- data() {
- return {
- lb: {
- perc: 0
- },
- redis: {
- options: {},
- perc: 0
- },
- mysql: {
- options: {},
- number: 0,
- perc: 0
- },
- cpu: {
- options: {},
- perc: 0
- },
- mem: {
- perc: 0,
- total: 0,
- used: 0
- },
- disk: {
- list: [],
- all: 0
- }
- };
- },
- methods: {
- refresh(res) {
- const { data } = res;
- const item = data[data.length - 1];
- this.toMysql(res, item.mysql);
- this.toRedis(res, item.redis);
- this.toCPU(res, item.server.cpu);
- this.toDisk(item.server.disk.filter((e) => e.size));
- this.toMem(item.server.mem);
- this.toLB();
- },
- toLB() {
- let mem = this.mem.perc;
- let cpu = this.cpu.perc;
- if (mem >= 90) {
- this.lb.perc = mem;
- } else if (cpu >= 80) {
- this.lb.perc = cpu;
- } else {
- this.lb.perc = mem * 0.4 + cpu * 0.6;
- }
- },
- toCPU(undefined, cpu) {
- this.cpu.perc = cpu.currentload;
- },
- toMem(mem) {
- this.mem.perc = (mem.buffcache / mem.total) * 100;
- this.mem.total = mem.total;
- this.mem.used = mem.buffcache;
- },
- toDisk(disk) {
- this.disk.all = disk.reduce((a, b) => a + b.size, 0);
- this.disk.list = disk.map((e) => {
- e.use = e.use.toFixed(2);
- return e;
- });
- },
- toRedis(undefined, item) {
- this.redis.perc = parseFloat(item.Memory.used_memory_dataset_perc);
- },
- toMysql(undefined, item) {
- let free = 0;
- let used = 0;
- item.mysqlSize.forEach((e) => {
- free += parseFloat(e.data_free);
- used += parseFloat(e.data_size);
- });
- this.mysql.number = item.mysqlSize.length;
- this.mysql.perc = (used / (free + used)).toFixed(2);
- }
- }
- };
- </script>
- <style lang="scss">
- .system-perf-progress-popover {
- ul {
- li {
- list-style: none;
- line-height: 30px;
- }
- }
- }
- </style>
- <style lang="scss" scoped>
- .ct {
- background-color: #fff;
- .block {
- background-color: #fff;
- width: 100%;
- border-radius: 3px;
- display: flex;
- justify-content: center;
- align-items: center;
- flex-direction: column;
- padding: 20px;
- box-sizing: border-box;
- position: relative;
- height: 220px;
- cursor: pointer;
- .label {
- font-size: 16px;
- height: 40px;
- }
- .perc {
- position: absolute;
- padding: 5px 10px;
- background-color: #fff;
- }
- .c {
- height: 50px;
- .echarts {
- height: 100%;
- width: 100%;
- }
- }
- }
- }
- </style>
|