能力运行监控

This commit is contained in:
gaoyuanwei 2022-06-28 19:25:05 +08:00
parent 961a8076fd
commit 194f6fcb3c
4 changed files with 191 additions and 172 deletions

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -24,20 +24,9 @@
<div class="RankingList"> <div class="RankingList">
<h4 class="title">API异常次数排行TOP10</h4> <h4 class="title">API异常次数排行TOP10</h4>
<ul> <ul>
<li <li class="RankingListData" v-for="(item, index) in RankingData" :key="index">
class="RankingListData" <i><b>{{ index + 1 }}</b></i>
v-for="(item, index) in RankingData" <el-tooltip class="item" effect="dark" :content="item.name" placement="top">
:key="index"
>
<i
><b>{{ index + 1 }}</b></i
>
<el-tooltip
class="item"
effect="dark"
:content="item.name"
placement="top"
>
<h6>{{ item.name }}</h6> <h6>{{ item.name }}</h6>
</el-tooltip> </el-tooltip>
<span>{{ item.num }}</span> <span>{{ item.num }}</span>
@ -48,7 +37,7 @@
<div class="AbnormalDistribution"> <div class="AbnormalDistribution">
<h4 class="title">API异常分布</h4> <h4 class="title">API异常分布</h4>
<div class="container-body1"> <div class="container-body1">
<div id="main" style="width: 100px; height: 260px"></div> <div id="main" style="width: 120px; height: 260px"></div>
</div> </div>
</div> </div>
<!-- API异常次数统计 --> <!-- API异常次数统计 -->
@ -56,28 +45,24 @@
<h4 class="title">API异常次数统计</h4> <h4 class="title">API异常次数统计</h4>
<div class="AnomalyStatisticsTable"> <div class="AnomalyStatisticsTable">
<el-table :data="AnomalyStatisticsTable" border style="width: 100%"> <el-table :data="AnomalyStatisticsTable" border style="width: 100%">
<el-table-column prop="name" label="接口名称" width="80"> <el-table-column prop="name" label="接口名称" width="80" :resizable="false" :show-overflow-tooltip="true">
</el-table-column> </el-table-column>
<el-table-column prop="address" label="接口地址" width="200"> <el-table-column prop="address" label="接口地址" width="200" :resizable="false" :show-overflow-tooltip="true">
</el-table-column> </el-table-column>
<el-table-column prop="method" label="调用方法"> <el-table-column prop="method" label="调用方法" :resizable="false" :show-overflow-tooltip="true">
</el-table-column> </el-table-column>
<el-table-column prop="type" label="组件类型"> </el-table-column> <el-table-column prop="type" label="组件类型" :resizable="false" :show-overflow-tooltip="true">
<el-table-column prop="provider" label="提供商"> </el-table-column>
<el-table-column prop="provider" label="提供商" :resizable="false" :show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="state" label="监控状态" :resizable="false" :show-overflow-tooltip="true">
</el-table-column> </el-table-column>
<el-table-column prop="state" label="监控状态"> </el-table-column>
</el-table> </el-table>
</div> </div>
<!-- 分页 --> <!-- 分页 -->
<div class="tablePagination"> <div class="tablePagination">
<el-pagination <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
@size-change="handleSizeChange" :current-page="currentPage4" :page-size="5" layout="total, prev, pager, next, jumper" :total="total">
@current-change="handleCurrentChange"
:current-page="currentPage4"
:page-size="5"
layout="total, prev, pager, next, jumper"
:total="total"
>
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
@ -91,7 +76,7 @@ import * as echarts from 'echarts'
export default { export default {
// components: {}, // components: {},
// props: {}, // props: {},
data () { data() {
return { return {
// //
RankingData: [ RankingData: [
@ -184,20 +169,20 @@ export default {
total: 0 total: 0
} }
}, },
mounted () { mounted() {
this.myEchars() this.myEchars()
// //
this.total = this.AnomalyStatisticsTable.length this.total = this.AnomalyStatisticsTable.length
}, },
methods: { methods: {
// //
handleSizeChange (val) { handleSizeChange(val) {
console.log(`每页 ${val}`) console.log(`每页 ${val}`)
}, },
handleCurrentChange (val) { handleCurrentChange(val) {
console.log(`当前页: ${val}`) console.log(`当前页: ${val}`)
}, },
myEchars () { myEchars() {
var chartDom = document.getElementById('main') var chartDom = document.getElementById('main')
var myChart = echarts.init(chartDom) var myChart = echarts.init(chartDom)
var option var option
@ -214,12 +199,23 @@ export default {
fontSize: 12, // fontSize: 12, //
color: '#666666' // color: '#666666' //
}, },
bottom: '22%' bottom: '13%',
formatter: function (name) {
var index = 0
var clientlabels = ['智能算法', '图层服务', '开发组件', '业务组件']
var clientcounts = ['25%', '25%', '25%', '25%']
clientlabels.forEach(function (value, i) {
if (value == name) {
index = i
}
})
return name + ' ' + clientcounts[index]
}
}, },
color: ['#0087ff', '#ff8a00', '#fcc549', '#49c988'], color: ['#0087ff', '#ff8a00', '#fcc549', '#49c988'],
series: [ series: [
{ {
center: ['50%', '20%'], center: ['50%', '23%'],
name: 'api异常分布', name: 'api异常分布',
type: 'pie', type: 'pie',
radius: ['40%', '70%'], radius: ['40%', '70%'],
@ -261,7 +257,6 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.contentBox { .contentBox {
display: flex; display: flex;
justify-content: space-between;
margin: 1.25rem 0; margin: 1.25rem 0;
.generalizeBox { .generalizeBox {
@ -281,8 +276,7 @@ export default {
} }
.ApiBox { .ApiBox {
background: url('~@/assets/img/CapabilityOperationMonitoring/bg-blue.png') background: url('~@/assets/img/CapabilityOperationMonitoring/bg-blue.png') no-repeat;
no-repeat;
background-size: 100%; background-size: 100%;
width: 22.5rem; width: 22.5rem;
height: 6.875rem; height: 6.875rem;
@ -319,8 +313,7 @@ export default {
} }
.ApiBox:last-of-type { .ApiBox:last-of-type {
background: url('~@/assets/img/CapabilityOperationMonitoring/bg-yellow.png') background: url('~@/assets/img/CapabilityOperationMonitoring/bg-yellow.png') no-repeat;
no-repeat;
background-size: 100%; background-size: 100%;
div { div {
@ -390,11 +383,9 @@ export default {
display: block; display: block;
height: 1.25rem; height: 1.25rem;
width: 2.25rem; width: 2.25rem;
background: linear-gradient( background: linear-gradient(to right,
to right,
rgba(204, 204, 204, 0.6), rgba(204, 204, 204, 0.6),
rgba(0, 0, 0, 0) rgba(0, 0, 0, 0));
);
} }
} }
@ -421,11 +412,9 @@ export default {
.RankingListData:nth-of-type(1) i b { .RankingListData:nth-of-type(1) i b {
width: 3.75rem; width: 3.75rem;
background: linear-gradient( background: linear-gradient(to right,
to right,
rgba(251, 59, 5, 0.6), rgba(251, 59, 5, 0.6),
rgba(0, 0, 0, 0) rgba(0, 0, 0, 0));
);
} }
.RankingListData:nth-of-type(1) span { .RankingListData:nth-of-type(1) span {
@ -434,11 +423,9 @@ export default {
.RankingListData:nth-of-type(2) i b { .RankingListData:nth-of-type(2) i b {
width: 3.125rem; width: 3.125rem;
background: linear-gradient( background: linear-gradient(to right,
to right,
rgba(251, 123, 5, 0.6), rgba(251, 123, 5, 0.6),
rgba(0, 0, 0, 0) rgba(0, 0, 0, 0));
);
} }
.RankingListData:nth-of-type(2) span { .RankingListData:nth-of-type(2) span {
@ -447,11 +434,9 @@ export default {
.RankingListData:nth-of-type(3) i b { .RankingListData:nth-of-type(3) i b {
width: 2.75rem; width: 2.75rem;
background: linear-gradient( background: linear-gradient(to right,
to right,
rgba(250, 179, 2, 0.6), rgba(250, 179, 2, 0.6),
rgba(0, 0, 0, 0) rgba(0, 0, 0, 0));
);
} }
.RankingListData:nth-of-type(3) span { .RankingListData:nth-of-type(3) span {
@ -462,8 +447,7 @@ export default {
.AbnormalDistribution { .AbnormalDistribution {
margin-right: 3.75rem; margin-right: 3.75rem;
.container-body1 { .container-body1 {}
}
} }
.AnomalyStatistics { .AnomalyStatistics {
@ -472,7 +456,7 @@ export default {
} }
.AnomalyStatisticsTable { .AnomalyStatisticsTable {
width: 41rem; width: 38.2rem;
::v-deep .el-table th { ::v-deep .el-table th {
padding: 0; padding: 0;
@ -489,6 +473,11 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
::v-deep .el-table tbody tr:hover>td {
background-color: transparent;
}
} }
.tablePagination { .tablePagination {

View File

@ -1,99 +0,0 @@
<template>
<div class="topBox">
<h1 class="topTitle">能力运行平台</h1>
<div class="topNav">
<div class="topTab">
<div @click="timeSwitch('日')" :class="timeSwitchindex == '日' ? 'timeDown' : ''">当天</div>
<div @click="timeSwitch('周')" :class="timeSwitchindex == '周' ? 'timeDown' : ''">最近一周</div>
<div @click="timeSwitch('月')" :class="timeSwitchindex == '月' ? 'timeDown' : ''">最近一月</div>
</div>
<div class="topTimme">
<span>选择时间段</span>
<el-date-picker v-model="timeStart" type="datetime" placeholder="请选择起始时间">
</el-date-picker>
<el-date-picker v-model="timeEnd" type="datetime" placeholder="请选择结束时间">
</el-date-picker>
<el-button type="primary" round>确定</el-button>
</div>
</div>
</div>
</template>
<script>
export default {
components: {},
props: {},
data() {
return {
timeSwitchindex: '日',
timeStart: '',
timeEnd: ''
}
},
watch: {},
computed: {},
methods: {
timeSwitch(name) {
this.timeSwitchindex = name
}
},
created() { },
mounted() { }
}
</script>
<style lang="scss" scoped>
.topBox {
.topTitle {
font-size: 1.5rem;
color: #000000;
font-weight: bold;
padding: 0.3125rem 0 1.25rem;
margin: 0;
}
.topNav {
display: flex;
justify-content: space-between;
align-items: center;
.topTab {
display: flex;
div {
width: 6.875rem;
height: 1.75rem;
line-height: 1.75rem;
text-align: center;
border-radius: 0.875rem;
font-size: 1rem;
color: #666666;
margin-right: 0.9375rem;
border: 0.0625rem solid #cccccc;
cursor: pointer;
}
.timeDown {
color: #1182fb;
border: 0.0625rem solid #1182fb;
}
}
.topTimme {
display: flex;
align-items: center;
span {
color: #666666;
font-size: 1rem;
display: block;
margin-right: 1.25rem;
}
::v-deep .el-date-editor.el-input {
margin-right: 0.625rem;
}
}
}
}
</style>

View File

@ -1,8 +1,23 @@
<!-- 权限管理-能力运行监控 --> <!-- 权限管理-能力运行监控 -->
<template> <template>
<div class="wrapper"> <div class="wrapper">
<div class="capability-operation-monitoring-top"> <div class="topBox">
<capability-operation-monitoring-time></capability-operation-monitoring-time> <h1 class="topTitle">能力运行平台</h1>
<div class="topNav">
<div class="topTab">
<div @click="timeSwitch('日')" :class="timeSwitchindex == '日' ? 'timeDown' : ''">当天</div>
<div @click="timeSwitch('周')" :class="timeSwitchindex == '周' ? 'timeDown' : ''">最近一周</div>
<div @click="timeSwitch('月')" :class="timeSwitchindex == '月' ? 'timeDown' : ''">最近一月</div>
</div>
<div class="topTimme">
<span>选择时间段</span>
<el-date-picker v-model="timeStart" type="date" placeholder="请选择起始时间" :picker-options="pickerOptions0">
</el-date-picker>
<el-date-picker v-model="timeEnd" type="date" placeholder="请选择结束时间" :picker-options="pickerOptions1">
</el-date-picker>
<el-button type="primary" round>确定</el-button>
</div>
</div>
</div> </div>
<div class="capability-operation-monitoring-center"> <div class="capability-operation-monitoring-center">
<abnormal-situation></abnormal-situation> <abnormal-situation></abnormal-situation>
@ -16,25 +31,139 @@
<script> <script>
import AbnormalSituation from './components/AbnormalSituation.vue' import AbnormalSituation from './components/AbnormalSituation.vue'
import AnalysisOfTheRequest from './components/AnalysisOfTheRequest.vue' import AnalysisOfTheRequest from './components/AnalysisOfTheRequest.vue'
import CapabilityOperationMonitoringTime from './components/CapabilityOperationMonitoringTime.vue' import * as moment from 'moment'
export default { export default {
components: { components: {
AbnormalSituation, AbnormalSituation,
AnalysisOfTheRequest, AnalysisOfTheRequest
CapabilityOperationMonitoringTime
}, },
props: {}, props: {},
data () { data () {
return {} return {
timeSwitchindex: '日',
timeStart: '',
timeEnd: '',
pickerOptions0: {
disabledDate: (time) => {
if (this.timeEnd != '') {
return time.getTime() > this.timeEnd
}
}
},
pickerOptions1: {
disabledDate: (time) => {
return time.getTime() < this.timeStart
}
},
callTheTrendData: []
}
}, },
watch: {}, watch: {},
computed: {}, computed: {},
methods: {}, methods: {
created () {}, timeSwitch (name) {
mounted () {} this.timeSwitchindex = name
this.callTheTrendData = []
if (name == '周') {
for (let i = 0; i < 7; i++) {
const time = moment()
.subtract('days', 6 - i)
.format('MM-DD')
this.callTheTrendData.push(time)
} console.log('time', this.callTheTrendData, name)
// callTheTrend(callTheTrendData.value)
} else if (name == '月') {
for (let i = 0; i < 31; i++) {
const time = moment()
.subtract('days', 30 - i)
.format('MM-DD')
this.callTheTrendData.push(time)
} console.log('time', this.callTheTrendData, name)
// callTheTrend(callTheTrendData.value)
} else {
const time = moment().startOf('day').format('YYYY-MM-DD 23:59:59')
this.callTheTrendData.push(time)
console.log(time, this.callTheTrendData)
}
}
},
created () { },
mounted () {
this.timeSwitch('日')
}
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.wrapper { .wrapper {
.topBox {
.topTitle {
font-size: 1.5rem;
color: #000000;
font-weight: bold;
padding: 0.3125rem 0 1.25rem;
margin: 0;
}
.topNav {
display: flex;
justify-content: space-between;
align-items: center;
.topTab {
display: flex;
div {
width: 6.875rem;
height: 1.75rem;
line-height: 1.75rem;
text-align: center;
border-radius: 0.875rem;
font-size: 1rem;
color: #666666;
margin-right: 0.9375rem;
border: 0.0625rem solid #cccccc;
cursor: pointer;
}
.timeDown {
color: #1182fb;
border: 0.0625rem solid #1182fb;
}
}
.topTimme {
display: flex;
align-items: center;
span {
color: #666666;
font-size: 1rem;
display: block;
margin-right: 1.25rem;
}
::v-deep .el-date-editor.el-input {
margin-right: 0.625rem;
width: 9.375rem;
.el-input__inner {
border-radius: 17px;
padding: 0;
padding-left: 10px;
padding-right: 0;
background-image: url(~@/assets/img/CapabilityOperationMonitoring/calendar.png);
background-repeat: no-repeat;
background-size: 18px 18px;
background-position: 118px center;
}
.el-input__prefix {
display: none;
}
}
}
}
}
} }
</style> </style>