|
@@ -1,38 +1,5 @@
|
|
<template>
|
|
<template>
|
|
<div style="padding:16px;">
|
|
<div style="padding:16px;">
|
|
- <el-row :gutter="10" class="mb8">
|
|
|
|
- <el-col :span="2">
|
|
|
|
- <div style="display:inline-block;vertical-align: middle;">
|
|
|
|
- <el-dropdown
|
|
|
|
- style="margin-left: 10px"
|
|
|
|
- size="mini"
|
|
|
|
- trigger="click"
|
|
|
|
- placement="bottom"
|
|
|
|
- >
|
|
|
|
- <el-button type="primary" size="mini">
|
|
|
|
- <!-- 下拉菜单 -->
|
|
|
|
- <i class="el-icon-s-grid" />
|
|
|
|
- <i class="el-icon-arrow-down" />
|
|
|
|
- </el-button>
|
|
|
|
- <el-dropdown-menu slot="dropdown">
|
|
|
|
- <el-checkbox-group
|
|
|
|
- v-model="colSelect"
|
|
|
|
- style="text-align: left"
|
|
|
|
- @change="columnChange"
|
|
|
|
- >
|
|
|
|
- <el-dropdown-item
|
|
|
|
- v-for="(item, index) in colData"
|
|
|
|
- :key="index"
|
|
|
|
- ><el-checkbox :label="item.title">{{
|
|
|
|
- item.title
|
|
|
|
- }}</el-checkbox></el-dropdown-item>
|
|
|
|
- </el-checkbox-group>
|
|
|
|
- </el-dropdown-menu>
|
|
|
|
- </el-dropdown>
|
|
|
|
- </div>
|
|
|
|
- </el-col>
|
|
|
|
- </el-row>
|
|
|
|
-
|
|
|
|
<div v-if="serveceMapList.length>0" class="TableBox">
|
|
<div v-if="serveceMapList.length>0" class="TableBox">
|
|
<el-table
|
|
<el-table
|
|
ref="tableRef"
|
|
ref="tableRef"
|
|
@@ -41,55 +8,101 @@
|
|
:data="serveceMapList"
|
|
:data="serveceMapList"
|
|
@row-click="handleRowClick"
|
|
@row-click="handleRowClick"
|
|
>
|
|
>
|
|
- <el-table-column v-if="colData[0].istrue" class-name="column_one" header-align="left" label="业务名" prop="name" align="left" :show-overflow-tooltip="true" />
|
|
|
|
- <el-table-column v-if="colData[1].istrue" header-align="left" label="起始服务" prop="service_name_cn" align="left" :show-overflow-tooltip="true">
|
|
|
|
|
|
+ <el-table-column v-if="colData[0].istrue" align="center" header-align="center" class-name="column_one" label="业务名" prop="name" :show-overflow-tooltip="true" />
|
|
|
|
+ <el-table-column v-if="colData[4].istrue" header-align="center" align="center" label="请求总数" sortable prop="request_total" :show-overflow-tooltip="true">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- <span>{{ scope.row.service_name_cn }}</span>
|
|
|
|
|
|
+ <div :class="scope.row.request_total!=0&&scope.row.request_total!= undefined?'table_bg':'table_bg_yellow'">
|
|
|
|
+ <div class="table-num-box">
|
|
|
|
+ {{ scope.row.request_total== undefined?0:Number(scope.row.request_total).toFixed(2) }}
|
|
|
|
+ </div>
|
|
|
|
+ <div class="table-day-rate-box">
|
|
|
|
+ <i v-show="processNumber(scope.row.request_total_dod).sign" :class="processNumber(scope.row.request_total_dod).sign == 'up'? 'el-icon-up up':'el-icon-down down'"></i>
|
|
|
|
+ <span>
|
|
|
|
+ {{ scope.row.request_total_dod==undefined?0:getErrRate(processNumber(scope.row.request_total_dod).value)}}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column v-if="colData[2].istrue" header-align="left" label="SpanName" prop="span_name" align="left" :show-overflow-tooltip="true">
|
|
|
|
|
|
+ <el-table-column v-if="colData[1].istrue" header-align="center" align="center" label="调用占比" prop="request_rate" :show-overflow-tooltip="true">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- <span>{{ scope.row.span_name }}</span>
|
|
|
|
|
|
+ <div class="table_bg">
|
|
|
|
+ <div class="table-num-box">
|
|
|
|
+ {{getErrRate(scope.row.request_rate)}}
|
|
|
|
+ </div>
|
|
|
|
+ <div class="table-day-rate-box">
|
|
|
|
+ <i v-show="processNumber(scope.row.request_rate_dod).sign" :class="processNumber(scope.row.request_rate_dod).sign == 'up'? 'el-icon-up up':'el-icon-down down'"></i>
|
|
|
|
+ <span>
|
|
|
|
+ {{ scope.row.request_rate_dod==undefined?0:getErrRate(scope.row.request_rate_dod)}}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column v-if="colData[3].istrue" header-align="center" label="rpm" sortable prop="rpm" align="right" :show-overflow-tooltip="true">
|
|
|
|
|
|
+ <el-table-column v-if="colData[2].istrue" header-align="center" align="center" label="SpanName" prop="span_name" :show-overflow-tooltip="true">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- <div class="table_bg">
|
|
|
|
- {{ scope.row.rpm == undefined?0:Number(scope.row.rpm).toFixed(2) }}
|
|
|
|
- </div>
|
|
|
|
|
|
+ <span>{{ scope.row.span_name }}</span>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column v-if="colData[4].istrue" header-align="center" label="请求总数" sortable prop="total" align="right" :show-overflow-tooltip="true">
|
|
|
|
|
|
+ <el-table-column v-if="colData[3].istrue" header-align="center" align="center" label="rpm" sortable prop="rpm" :show-overflow-tooltip="true">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- <div :class="scope.row.total!=0&&scope.row.total!= undefined?'table_bg':'table_bg_yellow'">
|
|
|
|
- {{ scope.row.total== undefined?0:Number(scope.row.total).toFixed(2) }}
|
|
|
|
|
|
+ <div class="table_bg">
|
|
|
|
+ {{ scope.row.rpm == undefined?0:Number(scope.row.rpm).toFixed(2) }}
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column v-if="colData[5].istrue" header-align="center" label="errRate" sortable prop="error_rate" align="right" :show-overflow-tooltip="true">
|
|
|
|
|
|
+ <el-table-column v-if="colData[5].istrue" header-align="center" align="center" label="错误率" sortable prop="error_rate" :show-overflow-tooltip="true">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
<div :class="scope.row.error_rate==0?'table_bg':'table_bg_red'">
|
|
<div :class="scope.row.error_rate==0?'table_bg':'table_bg_red'">
|
|
- {{getErrRate(scope.row.error_rate)}}
|
|
|
|
- <!-- {{ scope.row.error_rate==0?scope.row.error_rate:Number(scope.row.error_rate).toFixed(2) }} -->
|
|
|
|
|
|
+ <div class="table-num-box">
|
|
|
|
+ {{ getErrRate(scope.row.error_rate) }}
|
|
|
|
+ </div>
|
|
|
|
+ <div class="table-day-rate-box">
|
|
|
|
+ <i v-show="processNumber(scope.row.error_rate_dod).sign" :class="processNumber(scope.row.error_rate_dod).sign == 'up'? 'el-icon-up up':'el-icon-down down'"></i>
|
|
|
|
+ <span>
|
|
|
|
+ {{ scope.row.error_rate_dod==undefined?0:getErrRate(scope.row.error_rate_dod)}}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column v-if="colData[6].istrue" header-align="center" label="最大延迟(ms)" sortable prop="max" align="right" :show-overflow-tooltip="true">
|
|
|
|
|
|
+ <el-table-column v-if="colData[6].istrue" header-align="center" align="center" label="最大延迟(ms)" sortable prop="max" :show-overflow-tooltip="true">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
<div :class="scope.row.max<2000?'table_bg':'table_bg_red'">
|
|
<div :class="scope.row.max<2000?'table_bg':'table_bg_red'">
|
|
{{ scope.row.max==undefined?0:Number(scope.row.max).toFixed(2) }}
|
|
{{ scope.row.max==undefined?0:Number(scope.row.max).toFixed(2) }}
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column v-if="colData[7].istrue" header-align="center" label="avg(ms)" sortable prop="avg" align="right" :show-overflow-tooltip="true">
|
|
|
|
|
|
+ <el-table-column v-if="colData[7].istrue" header-align="center" align="center" label="平均延迟(ms)" sortable prop="duration_average" :show-overflow-tooltip="true">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
- <div :class="scope.row.avg<2000?'table_bg':'table_bg_red'">
|
|
|
|
- {{ scope.row.avg==undefined?0:Number(scope.row.avg).toFixed(2) }}
|
|
|
|
|
|
+ <div :class="scope.row.duration_average<2000?'table_bg':'table_bg_red'">
|
|
|
|
+ <div class="table-num-box">
|
|
|
|
+ {{ scope.row.duration_average==undefined?0:Number(scope.row.duration_average).toFixed(2) }}
|
|
|
|
+ </div>
|
|
|
|
+ <div class="table-day-rate-box">
|
|
|
|
+ <i v-show="processNumber(scope.row.duration_average_dod).sign" :class="processNumber(scope.row.duration_average_dod).sign == 'up'? 'el-icon-up up':'el-icon-down down'"></i>
|
|
|
|
+ <span>
|
|
|
|
+ {{ scope.row.duration_average_dod==undefined?0:getErrRate(scope.row.duration_average_dod)}}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column v-if="colData[8].istrue" header-align="center" label="中位延迟" prop="p50" align="center" width="200">
|
|
|
|
|
|
+ <el-table-column v-if="colData[8].istrue" header-align="center" align="center" label="中位延迟" prop="duration_median" width="200">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
|
+ <div :class="scope.row.duration_median<2000?'table_bg':'table_bg_red'">
|
|
|
|
+ <div class="table-num-box">
|
|
|
|
+ {{ scope.row.duration_median==undefined?0:Number(scope.row.duration_median).toFixed(2) }}
|
|
|
|
+ </div>
|
|
|
|
+ <div class="table-day-rate-box">
|
|
|
|
+ <i v-show="processNumber(scope.row.duration_median_dod).sign" :class="processNumber(scope.row.duration_median_dod).sign == 'up'? 'el-icon-up up':'el-icon-down down'"></i>
|
|
|
|
+ <span>
|
|
|
|
+ {{ scope.row.duration_median_dod==undefined?0:getErrRate(scope.row.duration_median_dod)}}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <!-- <template slot-scope="scope">
|
|
<span v-if="scope.row.quantiles!=undefined" style="display:flex;">
|
|
<span v-if="scope.row.quantiles!=undefined" style="display:flex;">
|
|
{{ drawEchartsp5(scope.row, scope.$index, 'five') }}
|
|
{{ drawEchartsp5(scope.row, scope.$index, 'five') }}
|
|
<div :id="`tiger-five-trend-index` + scope.$index" style="flex:1;padding-left:10px" class="tiger-trend-charts" />
|
|
<div :id="`tiger-five-trend-index` + scope.$index" style="flex:1;padding-left:10px" class="tiger-trend-charts" />
|
|
@@ -100,10 +113,23 @@
|
|
</div>
|
|
</div>
|
|
</el-popover>
|
|
</el-popover>
|
|
</span>
|
|
</span>
|
|
- </template>
|
|
|
|
|
|
+ </template> -->
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column v-if="colData[9].istrue" header-align="center" label="90分位延迟" prop="p90" align="center" width="200">
|
|
|
|
|
|
+ <el-table-column v-if="colData[9].istrue" header-align="center" align="center" label="90分位延迟" prop="duration_p90" width="200">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
|
+ <div :class="scope.row.duration_p90<2000?'table_bg':'table_bg_red'">
|
|
|
|
+ <div class="table-num-box">
|
|
|
|
+ {{ scope.row.duration_p90==undefined?0:Number(scope.row.duration_p90).toFixed(2) }}
|
|
|
|
+ </div>
|
|
|
|
+ <div class="table-day-rate-box">
|
|
|
|
+ <i v-show="processNumber(scope.row.duration_p90_dod).sign" :class="processNumber(scope.row.duration_p90_dod).sign == 'up'? 'el-icon-up up':'el-icon-down down'"></i>
|
|
|
|
+ <span>
|
|
|
|
+ {{ scope.row.duration_p90_dod==undefined?0:getErrRate(scope.row.duration_p90_dod)}}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <!-- <template slot-scope="scope">
|
|
<span v-if="scope.row.quantiles!=undefined" style="display:flex;">
|
|
<span v-if="scope.row.quantiles!=undefined" style="display:flex;">
|
|
{{ drawEchartsp90(scope.row, scope.$index, 'nine') }}
|
|
{{ drawEchartsp90(scope.row, scope.$index, 'nine') }}
|
|
<div :id="`tiger-nine-trend-index` + scope.$index" style="flex:1;padding-left:10px" class="tiger-trend-charts" />
|
|
<div :id="`tiger-nine-trend-index` + scope.$index" style="flex:1;padding-left:10px" class="tiger-trend-charts" />
|
|
@@ -114,10 +140,23 @@
|
|
</div>
|
|
</div>
|
|
</el-popover>
|
|
</el-popover>
|
|
</span>
|
|
</span>
|
|
- </template>
|
|
|
|
|
|
+ </template> -->
|
|
</el-table-column>
|
|
</el-table-column>
|
|
- <el-table-column v-if="colData[10].istrue" header-align="center" label="99分位延迟" prop="p99" align="center" width="200">
|
|
|
|
|
|
+ <el-table-column v-if="colData[10].istrue" header-align="center" align="center" label="99分位延迟" prop="duration_p99" width="200">
|
|
<template slot-scope="scope">
|
|
<template slot-scope="scope">
|
|
|
|
+ <div :class="scope.row.duration_p99<2000?'table_bg':'table_bg_red'">
|
|
|
|
+ <div class="table-num-box">
|
|
|
|
+ {{ scope.row.duration_p99==undefined?0:Number(scope.row.duration_p99).toFixed(2) }}
|
|
|
|
+ </div>
|
|
|
|
+ <div class="table-day-rate-box">
|
|
|
|
+ <i v-show="processNumber(scope.row.duration_p99_dod).sign" :class="processNumber(scope.row.duration_p99_dod).sign == 'up'? 'el-icon-up up':'el-icon-down down'"></i>
|
|
|
|
+ <span>
|
|
|
|
+ {{ scope.row.duration_p99_dod==undefined?0:getErrRate(scope.row.duration_p99_dod)}}
|
|
|
|
+ </span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <!-- <template slot-scope="scope">
|
|
<span v-if="scope.row.quantiles!=undefined" style="display:flex;">
|
|
<span v-if="scope.row.quantiles!=undefined" style="display:flex;">
|
|
{{ drawEchartsp99(scope.row, scope.$index, 'hundred') }}
|
|
{{ drawEchartsp99(scope.row, scope.$index, 'hundred') }}
|
|
<div :id="`tiger-hundred-trend-index` + scope.$index" style="flex:1;padding-left:10px" class="tiger-trend-charts" />
|
|
<div :id="`tiger-hundred-trend-index` + scope.$index" style="flex:1;padding-left:10px" class="tiger-trend-charts" />
|
|
@@ -128,7 +167,7 @@
|
|
</div>
|
|
</div>
|
|
</el-popover>
|
|
</el-popover>
|
|
</span>
|
|
</span>
|
|
- </template>
|
|
|
|
|
|
+ </template> -->
|
|
</el-table-column>
|
|
</el-table-column>
|
|
<el-table-column
|
|
<el-table-column
|
|
label="操作"
|
|
label="操作"
|
|
@@ -172,8 +211,8 @@
|
|
<pagination
|
|
<pagination
|
|
v-show="tableCount>0"
|
|
v-show="tableCount>0"
|
|
:total="tableCount"
|
|
:total="tableCount"
|
|
- :page.sync="queryParams.pageIndex"
|
|
|
|
- :limit.sync="queryParams.pageSize"
|
|
|
|
|
|
+ :page.sync="queryParams.page_num"
|
|
|
|
+ :limit.sync="queryParams.page_size"
|
|
@pagination="getList"
|
|
@pagination="getList"
|
|
/>
|
|
/>
|
|
|
|
|
|
@@ -191,112 +230,12 @@
|
|
</el-dialog>
|
|
</el-dialog>
|
|
<!-- 业务空间 -->
|
|
<!-- 业务空间 -->
|
|
<ServiceSpaceDrawer v-if="isShowServiceSpaceDrawer" :is-opendrawer="isShowServiceSpaceDrawer" :bussiness-id="currentBussinessId" :bussiness-name="currentBussinessName" @handleClose="handleClose"></ServiceSpaceDrawer>
|
|
<ServiceSpaceDrawer v-if="isShowServiceSpaceDrawer" :is-opendrawer="isShowServiceSpaceDrawer" :bussiness-id="currentBussinessId" :bussiness-name="currentBussinessName" @handleClose="handleClose"></ServiceSpaceDrawer>
|
|
- <!-- <el-drawer
|
|
|
|
- :visible.sync="drawer"
|
|
|
|
- direction="rtl"
|
|
|
|
- size="80%"
|
|
|
|
- @close="drawerClose"
|
|
|
|
- >
|
|
|
|
- <div slot="title">
|
|
|
|
- <span style="font-size:16px;font-weight:500;margin-right:24px" @click="handleUpdate">{{ detailTitle }}</span>
|
|
|
|
- <el-button
|
|
|
|
- size="small"
|
|
|
|
- type="primary"
|
|
|
|
- @click.native.stop="handleUpdateName()"
|
|
|
|
- >修改别名</el-button>
|
|
|
|
- </div>
|
|
|
|
- <div style="margin-bottom:16px;">
|
|
|
|
- <div class="flexWrap">
|
|
|
|
- <div class="flex-left">
|
|
|
|
- <div v-loading="loading">
|
|
|
|
- <Topo v-if="topflag" ref="topo" :graph-data="graphData" topo-id="container" />
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- <div class="flex-right">
|
|
|
|
- <div id="scaleMain" style="width:100%;height:240px;margin-bottom:36px;margin-top:16px" />
|
|
|
|
- <el-table
|
|
|
|
- v-loading="tableLoading"
|
|
|
|
- :data="rowData"
|
|
|
|
- >
|
|
|
|
- <el-table-column header-align="center" label="TraceID" prop="trace_id" align="center" width="240">
|
|
|
|
- <template slot-scope="scope">
|
|
|
|
- <span @click="goto(scope.row)">{{ scope.row.trace_id }}</span>
|
|
|
|
- </template>
|
|
|
|
- </el-table-column>
|
|
|
|
- <el-table-column header-align="center" label="SpanName" prop="span_name" align="center" :show-overflow-tooltip="true" />
|
|
|
|
-
|
|
|
|
- <el-table-column header-align="center" label="DateTime" prop="datetime" align="center" :show-overflow-tooltip="true" />
|
|
|
|
-
|
|
|
|
- <el-table-column header-align="center" label="Duration(ms)" prop="duration" width="140" align="center">
|
|
|
|
- <template slot-scope="scope">
|
|
|
|
- <el-tag v-if="scope.row.duration>=2000" type="danger">{{ scope.row.duration }}</el-tag>
|
|
|
|
- <el-tag v-if="scope.row.duration<2000" type="info">{{ scope.row.duration }}</el-tag>
|
|
|
|
- </template>
|
|
|
|
- </el-table-column>
|
|
|
|
- </el-table>
|
|
|
|
- <pagination
|
|
|
|
- v-show="total>0"
|
|
|
|
- :total="total"
|
|
|
|
- :page.sync="childQueryParams.pageIndex"
|
|
|
|
- :limit.sync="childQueryParams.pageSize"
|
|
|
|
- @pagination="handelgetBizDetail"
|
|
|
|
- />
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
-
|
|
|
|
- </div>
|
|
|
|
- </el-drawer> -->
|
|
|
|
-
|
|
|
|
- <el-drawer
|
|
|
|
- v-if="JSON.stringify(detailData) != "{}""
|
|
|
|
- :visible.sync="drawerDetail"
|
|
|
|
- direction="rtl"
|
|
|
|
- size="55%"
|
|
|
|
- @close="drawerCloseDetail"
|
|
|
|
- >
|
|
|
|
- <el-collapse v-model="activeNames">
|
|
|
|
- <el-collapse-item title="属性" name="one">
|
|
|
|
- <ul v-if="detailData.span_attributes !=null" class="ul_box">
|
|
|
|
- <li v-for="(value,key) in detailData.span_attributes" :key="key">
|
|
|
|
- <div class="ul_label">{{ key }}</div>
|
|
|
|
- <div class="ul_value" style="color:#008080;white-space: pre-wrap;">"{{ value }}"</div>
|
|
|
|
- </li>
|
|
|
|
- </ul>
|
|
|
|
- </el-collapse-item>
|
|
|
|
- <el-collapse-item title="资源" name="tow">
|
|
|
|
- <ul v-if="detailData.resource_attributes !=null" class="ul_box">
|
|
|
|
- <li v-for="(value,key) in detailData.resource_attributes" :key="key">
|
|
|
|
- <div class="ul_label">{{ key }}</div>
|
|
|
|
- <div class="ul_value" style="color:#008080;white-space: pre-wrap;">"{{ value }}"</div>
|
|
|
|
- </li>
|
|
|
|
- </ul>
|
|
|
|
- </el-collapse-item>
|
|
|
|
- <el-collapse-item v-if="detailData.events_timestamp.length>0 && detailData.events_timestamp!=null" :title="'事件'+'('+ detailData.events_timestamp.length +')'" name="three">
|
|
|
|
- <div class="events_box">
|
|
|
|
- <el-collapse :value="activeIn">
|
|
|
|
- <el-collapse-item v-for="(item,index) in detailData.events_timestamp" :key="index" :title="item" :name="index">
|
|
|
|
- <ul class="ul_box">
|
|
|
|
- <li>
|
|
|
|
- <div class="ul_label">message</div>
|
|
|
|
- <div class="ul_value" style="color:#008080;white-space: pre-wrap;">"{{ detailData.events_name[index] }}"</div>
|
|
|
|
- </li>
|
|
|
|
- <li v-for="(value,key) in detailData.events_attributes[index]" :key="key">
|
|
|
|
- <div class="ul_label">{{ key }}</div>
|
|
|
|
- <div class="ul_value" style="color:#008080;white-space: pre-wrap;">"{{ value }}"</div>
|
|
|
|
- </li>
|
|
|
|
- </ul>
|
|
|
|
- </el-collapse-item>
|
|
|
|
- </el-collapse>
|
|
|
|
- </div>
|
|
|
|
- </el-collapse-item>
|
|
|
|
- </el-collapse>
|
|
|
|
- </el-drawer>
|
|
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
import ServiceSpaceDrawer from './ServiceSpaceDrawer.vue'
|
|
import ServiceSpaceDrawer from './ServiceSpaceDrawer.vue'
|
|
-import { addUrlMapping, listBiz, listBizStats, getBizDetail, listBizGraph, updateBiz, delBiz, favorBiz } from '@/api/mapping'
|
|
|
|
|
|
+import { addUrlMapping, getNewBusinessList, listBizStats, getBizDetail, listBizGraph, updateBiz, delBiz, favorBiz } from '@/api/mapping'
|
|
import { formatJson } from '@/utils'
|
|
import { formatJson } from '@/utils'
|
|
import storage from '@/utils/storage'
|
|
import storage from '@/utils/storage'
|
|
// import bus from '@/utils/bus'
|
|
// import bus from '@/utils/bus'
|
|
@@ -309,7 +248,7 @@ import moment from 'moment'
|
|
import Topo from './Topo'
|
|
import Topo from './Topo'
|
|
import BigNumber from 'bignumber.js'
|
|
import BigNumber from 'bignumber.js'
|
|
export default {
|
|
export default {
|
|
- name: 'ServiceMap',
|
|
|
|
|
|
+ name: 'KeyBusiness',
|
|
components: {
|
|
components: {
|
|
Topo,
|
|
Topo,
|
|
ServiceSpaceDrawer
|
|
ServiceSpaceDrawer
|
|
@@ -321,11 +260,11 @@ export default {
|
|
// 设置选中的列的复选框
|
|
// 设置选中的列的复选框
|
|
colSelect: [
|
|
colSelect: [
|
|
'业务名',
|
|
'业务名',
|
|
- '起始服务',
|
|
|
|
|
|
+ '调用占比',
|
|
// "SpanName",
|
|
// "SpanName",
|
|
// "rpm",
|
|
// "rpm",
|
|
'请求总数',
|
|
'请求总数',
|
|
- // "errRate",
|
|
|
|
|
|
+ "错误率",
|
|
// '最大延迟(ms)',
|
|
// '最大延迟(ms)',
|
|
// "延迟比例",
|
|
// "延迟比例",
|
|
'中位延迟',
|
|
'中位延迟',
|
|
@@ -334,13 +273,13 @@ export default {
|
|
],
|
|
],
|
|
colData: [
|
|
colData: [
|
|
{ title: '业务名', istrue: false },
|
|
{ title: '业务名', istrue: false },
|
|
- { title: '起始服务', istrue: false },
|
|
|
|
|
|
+ { title: '调用占比', istrue: false },
|
|
{ title: 'SpanName', istrue: false },
|
|
{ title: 'SpanName', istrue: false },
|
|
{ title: 'rpm', istrue: false },
|
|
{ title: 'rpm', istrue: false },
|
|
{ title: '请求总数', istrue: false },
|
|
{ title: '请求总数', istrue: false },
|
|
- { title: 'errRate', istrue: false },
|
|
|
|
|
|
+ { title: '错误率', istrue: false },
|
|
{ title: '最大延迟(ms)', istrue: false },
|
|
{ title: '最大延迟(ms)', istrue: false },
|
|
- { title: 'avg(ms)', istrue: false },
|
|
|
|
|
|
+ { title: '平均延迟(ms)', istrue: false },
|
|
// { title: "延迟比例", istrue: false },
|
|
// { title: "延迟比例", istrue: false },
|
|
{ title: '中位延迟', istrue: false },
|
|
{ title: '中位延迟', istrue: false },
|
|
{ title: '90分位延迟', istrue: false },
|
|
{ title: '90分位延迟', istrue: false },
|
|
@@ -381,13 +320,17 @@ export default {
|
|
dateRange: [],
|
|
dateRange: [],
|
|
// 查询参数
|
|
// 查询参数
|
|
queryParams: {
|
|
queryParams: {
|
|
- // start_time:Math.round((new Date().getTime())/1000 - (5*60)),
|
|
|
|
- // end_time:Math.round(new Date().getTime()/1000),
|
|
|
|
- app_id: '',
|
|
|
|
- start_time: '',
|
|
|
|
- end_time: '',
|
|
|
|
- pageIndex: 1,
|
|
|
|
- pageSize: 10
|
|
|
|
|
|
+ app_alias:'',//应用别名
|
|
|
|
+ service_name: null,//服务名称
|
|
|
|
+ // duration:'',//最小延迟
|
|
|
|
+ // error_rate:'',//最小错误率
|
|
|
|
+ // request_total:'',//最低请求量
|
|
|
|
+ // node_num:'',//最小节点数量
|
|
|
|
+ // access_database: '',//是否涉及数据库
|
|
|
|
+ // vip: true,//是否为重点业务
|
|
|
|
+ // favor:'',//是否收藏
|
|
|
|
+ page_num: 1,//当前页码
|
|
|
|
+ page_size: 10,//每页条数
|
|
},
|
|
},
|
|
// 表单参数
|
|
// 表单参数
|
|
form: {
|
|
form: {
|
|
@@ -406,15 +349,7 @@ export default {
|
|
headers: { 'Authorization': 'Bearer ' + getToken() },
|
|
headers: { 'Authorization': 'Bearer ' + getToken() },
|
|
appsItem: {},
|
|
appsItem: {},
|
|
expands: [],
|
|
expands: [],
|
|
- childQueryParams: {
|
|
|
|
- // start_time:Math.round((new Date().getTime())/1000 - (5*60)),
|
|
|
|
- // end_time:Math.round(new Date().getTime()/1000),
|
|
|
|
- start_time: 0,
|
|
|
|
- end_time: 0,
|
|
|
|
- biz_id: 1,
|
|
|
|
- pageIndex: 1,
|
|
|
|
- pageSize: 10
|
|
|
|
- },
|
|
|
|
|
|
+
|
|
rowData: [],
|
|
rowData: [],
|
|
serviceMapTimer: null,
|
|
serviceMapTimer: null,
|
|
BizStatsQuery: {
|
|
BizStatsQuery: {
|
|
@@ -449,9 +384,7 @@ export default {
|
|
this.BizStatsQuery.end_time = newValue.endTime
|
|
this.BizStatsQuery.end_time = newValue.endTime
|
|
this.graphStatsQuery.start_time = newValue.startTime
|
|
this.graphStatsQuery.start_time = newValue.startTime
|
|
this.graphStatsQuery.end_time = newValue.endTime
|
|
this.graphStatsQuery.end_time = newValue.endTime
|
|
- this.childQueryParams.start_time = newValue.startTime
|
|
|
|
- this.childQueryParams.end_time = newValue.endTime
|
|
|
|
- this.queryParams.pageIndex = 1
|
|
|
|
|
|
+ this.queryParams.page_num = 1
|
|
this.serveceMapList = []
|
|
this.serveceMapList = []
|
|
this.getList()
|
|
this.getList()
|
|
if (newValue.timeOut) {
|
|
if (newValue.timeOut) {
|
|
@@ -483,15 +416,8 @@ export default {
|
|
|
|
|
|
this.appItem = storage.get('appsItem')
|
|
this.appItem = storage.get('appsItem')
|
|
if (JSON.stringify(this.appItem) != '{}') {
|
|
if (JSON.stringify(this.appItem) != '{}') {
|
|
- this.queryParams.app_id = this.appItem.id
|
|
|
|
- const start_time = this.$store.state.time.globalTimes.startTime
|
|
|
|
- const end_time = this.$store.state.time.globalTimes.endTime
|
|
|
|
- this.queryParams.start_time = start_time
|
|
|
|
- this.queryParams.end_time = end_time
|
|
|
|
- this.BizStatsQuery.start_time = start_time
|
|
|
|
- this.BizStatsQuery.end_time = end_time
|
|
|
|
- this.childQueryParams.start_time = start_time
|
|
|
|
- this.childQueryParams.end_time = end_time
|
|
|
|
|
|
+ this.appItem = storage.get('appsItem')
|
|
|
|
+ this.queryParams.app_alias = this.appItem.alias
|
|
this.getList()
|
|
this.getList()
|
|
this.$forceUpdate()
|
|
this.$forceUpdate()
|
|
}
|
|
}
|
|
@@ -508,6 +434,22 @@ export default {
|
|
this.disposeEcharts(this.myChartBox2List)
|
|
this.disposeEcharts(this.myChartBox2List)
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
|
|
+ //判断数字是正是负还是零并给出标识
|
|
|
|
+ processNumber(num) {
|
|
|
|
+ let result = {
|
|
|
|
+ value: num,
|
|
|
|
+ sign: ''
|
|
|
|
+ };
|
|
|
|
+ if (num > 0) {
|
|
|
|
+ result.sign = 'up';
|
|
|
|
+ } else if (num < 0) {
|
|
|
|
+ result.value = Math.abs(num); // 返回绝对值
|
|
|
|
+ result.sign = 'down';
|
|
|
|
+ } else {
|
|
|
|
+ result.sign = '';
|
|
|
|
+ }
|
|
|
|
+ return result;
|
|
|
|
+ },
|
|
getErrRate(error_rate){
|
|
getErrRate(error_rate){
|
|
let strErrorRate = numToString(error_rate)
|
|
let strErrorRate = numToString(error_rate)
|
|
let length = 0
|
|
let length = 0
|
|
@@ -575,51 +517,18 @@ export default {
|
|
this.getList()
|
|
this.getList()
|
|
}, timeOut)
|
|
}, timeOut)
|
|
},
|
|
},
|
|
- goto(row) {
|
|
|
|
- const href = this.$router.resolve({
|
|
|
|
- path: '/latency/index',
|
|
|
|
- query: {
|
|
|
|
- id: row.trace_id,
|
|
|
|
- span_id: row.span_id
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
- window.open(window.location.origin + '/' + href.href, '_blank')
|
|
|
|
- },
|
|
|
|
handleClose() {
|
|
handleClose() {
|
|
this.isShowServiceSpaceDrawer = false
|
|
this.isShowServiceSpaceDrawer = false
|
|
},
|
|
},
|
|
drawerCloseDetail() {
|
|
drawerCloseDetail() {
|
|
this.drawerDetail = false
|
|
this.drawerDetail = false
|
|
},
|
|
},
|
|
- toogleExpand(row, column, event) {
|
|
|
|
- // this.drawer=true;
|
|
|
|
- this.childQueryParams.id = row.id
|
|
|
|
- this.handelgetBizDetail()
|
|
|
|
- },
|
|
|
|
handleRowClick(row, column, event) {
|
|
handleRowClick(row, column, event) {
|
|
- storage.set('detailObj', row)
|
|
|
|
- console.log(8888888, row)
|
|
|
|
this.currentBussinessId = row.id
|
|
this.currentBussinessId = row.id
|
|
this.currentBussinessName = row.name
|
|
this.currentBussinessName = row.name
|
|
this.isShowServiceSpaceDrawer = true
|
|
this.isShowServiceSpaceDrawer = true
|
|
- // this.$router.push({
|
|
|
|
- // path: '/business-analysis/analysisDetail/index',
|
|
|
|
- // query: {
|
|
|
|
- // id: row.id,
|
|
|
|
- // name: row.name
|
|
|
|
- // }
|
|
|
|
- // })
|
|
|
|
- },
|
|
|
|
- handelgetBizDetail() {
|
|
|
|
- this.tableLoading = true
|
|
|
|
- getBizDetail(this.childQueryParams).then(res => {
|
|
|
|
- if (res.code == 200) {
|
|
|
|
- this.tableLoading = false
|
|
|
|
- this.rowData = res.data.list
|
|
|
|
- this.total = res.data.count
|
|
|
|
- }
|
|
|
|
- })
|
|
|
|
},
|
|
},
|
|
|
|
+
|
|
getListBizGraph(id) {
|
|
getListBizGraph(id) {
|
|
this.loading = true
|
|
this.loading = true
|
|
listBizGraph({ biz_id: id }).then((res) => {
|
|
listBizGraph({ biz_id: id }).then((res) => {
|
|
@@ -655,6 +564,7 @@ export default {
|
|
return data
|
|
return data
|
|
},
|
|
},
|
|
handleData(data) {
|
|
handleData(data) {
|
|
|
|
+ console.log(3000,data)
|
|
data.forEach((v, k) => {
|
|
data.forEach((v, k) => {
|
|
v.id = v.biz_id
|
|
v.id = v.biz_id
|
|
|
|
|
|
@@ -694,7 +604,7 @@ export default {
|
|
if (!this.loading) {
|
|
if (!this.loading) {
|
|
this.loading = true
|
|
this.loading = true
|
|
if (this.serveceMapList.length < this.tableCount) {
|
|
if (this.serveceMapList.length < this.tableCount) {
|
|
- this.queryParams.pageIndex++
|
|
|
|
|
|
+ this.queryParams.page_num++
|
|
this.getList()
|
|
this.getList()
|
|
} else {
|
|
} else {
|
|
// this.$message("已加载完所有的数据!");
|
|
// this.$message("已加载完所有的数据!");
|
|
@@ -708,7 +618,7 @@ export default {
|
|
this.myChartList = []
|
|
this.myChartList = []
|
|
this.myChartboxList = []
|
|
this.myChartboxList = []
|
|
this.myChartBox2List = []
|
|
this.myChartBox2List = []
|
|
- listBiz(this.queryParams).then(res => {
|
|
|
|
|
|
+ getNewBusinessList(this.queryParams).then(res => {
|
|
if (res.code == 200) {
|
|
if (res.code == 200) {
|
|
this.serveceMapList = res.data.list || []
|
|
this.serveceMapList = res.data.list || []
|
|
this.tableCount = res.data.count || 0
|
|
this.tableCount = res.data.count || 0
|
|
@@ -729,42 +639,6 @@ export default {
|
|
}
|
|
}
|
|
})
|
|
})
|
|
},
|
|
},
|
|
- // getList() {// 解析列表的table 数据
|
|
|
|
- // this.loading = true
|
|
|
|
- // const _this = this
|
|
|
|
- // this.myChartList = []
|
|
|
|
- // this.myChartboxList = []
|
|
|
|
- // this.myChartBox2List = []
|
|
|
|
- // listBiz(this.queryParams).then(res => {
|
|
|
|
- // if (res.code == 200) {
|
|
|
|
- // // _this.serveceMapList= _this.serveceMapList.concat(res.data.list);
|
|
|
|
- // this.serveceMapList = res.data.list
|
|
|
|
- // this.tableCount = res.data.count
|
|
|
|
- // // this.queryParams.pageIndex = res.data.pageIndex;
|
|
|
|
- // this.loading = false
|
|
|
|
-
|
|
|
|
- // // this.tempList = this.tempList.concat(res.data.list);
|
|
|
|
- // if (_this.serveceMapList.length > 0) {
|
|
|
|
- // for (let i = 0; i < _this.serveceMapList.length; i++) {
|
|
|
|
- // this.BizStatsQuery.biz_id = _this.serveceMapList[i].id
|
|
|
|
- // listBizStats(this.BizStatsQuery).then(response => {
|
|
|
|
- // if (response.code == 200) {
|
|
|
|
- // if (response.data.biz_id != undefined) {
|
|
|
|
- // if (_this.serveceMapList[i].id == response.data.biz_id) {
|
|
|
|
- // _this.serveceMapList[i] = Object.assign({}, _this.serveceMapList[i], response.data)
|
|
|
|
- // _this.isUpdate = !_this.isUpdate
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // })
|
|
|
|
- // }
|
|
|
|
- // }
|
|
|
|
- // this.$nextTick(() => {
|
|
|
|
- // this.$forceUpdate()
|
|
|
|
- // })
|
|
|
|
- // }
|
|
|
|
- // })
|
|
|
|
- // },
|
|
|
|
beforeUpload(file) {
|
|
beforeUpload(file) {
|
|
const isRightSize = file.size / 1024 / 1024 < 2
|
|
const isRightSize = file.size / 1024 / 1024 < 2
|
|
if (!isRightSize) {
|
|
if (!isRightSize) {
|
|
@@ -795,7 +669,7 @@ export default {
|
|
},
|
|
},
|
|
/** 搜索按钮操作 */
|
|
/** 搜索按钮操作 */
|
|
handleQuery() {
|
|
handleQuery() {
|
|
- this.queryParams.pageIndex = 1
|
|
|
|
|
|
+ this.queryParams.page_num = 1
|
|
this.serveceMapList = []
|
|
this.serveceMapList = []
|
|
this.tempList = []
|
|
this.tempList = []
|
|
this.getList()
|
|
this.getList()
|
|
@@ -853,7 +727,7 @@ export default {
|
|
this.msgSuccess(response.msg)
|
|
this.msgSuccess(response.msg)
|
|
this.open = false
|
|
this.open = false
|
|
this.drawer = false
|
|
this.drawer = false
|
|
- this.queryParams.pageIndex = 1
|
|
|
|
|
|
+ this.queryParams.page_num = 1
|
|
this.serveceMapList = []
|
|
this.serveceMapList = []
|
|
this.tempList = []
|
|
this.tempList = []
|
|
this.getList()
|
|
this.getList()
|
|
@@ -866,7 +740,7 @@ export default {
|
|
if (response.code === 200) {
|
|
if (response.code === 200) {
|
|
this.msgSuccess(response.msg)
|
|
this.msgSuccess(response.msg)
|
|
this.open = false
|
|
this.open = false
|
|
- this.queryParams.pageIndex = 1
|
|
|
|
|
|
+ this.queryParams.page_num = 1
|
|
this.serveceMapList = []
|
|
this.serveceMapList = []
|
|
this.tempList = []
|
|
this.tempList = []
|
|
this.getList()
|
|
this.getList()
|
|
@@ -889,7 +763,7 @@ export default {
|
|
}).then(function() {
|
|
}).then(function() {
|
|
return delBiz(id)
|
|
return delBiz(id)
|
|
}).then((response) => {
|
|
}).then((response) => {
|
|
- this.queryParams.pageIndex = 1
|
|
|
|
|
|
+ this.queryParams.page_num = 1
|
|
this.serveceMapList = []
|
|
this.serveceMapList = []
|
|
this.tempList = []
|
|
this.tempList = []
|
|
this.msgSuccess(response.msg)
|
|
this.msgSuccess(response.msg)
|
|
@@ -907,7 +781,7 @@ export default {
|
|
favorBiz({ favor: favor }, row.id).then(res => {
|
|
favorBiz({ favor: favor }, row.id).then(res => {
|
|
if (res.code === 200) {
|
|
if (res.code === 200) {
|
|
this.msgSuccess(res.msg)
|
|
this.msgSuccess(res.msg)
|
|
- this.queryParams.pageIndex = 1
|
|
|
|
|
|
+ this.queryParams.page_num = 1
|
|
this.serveceMapList = []
|
|
this.serveceMapList = []
|
|
this.tempList = []
|
|
this.tempList = []
|
|
this.getList()
|
|
this.getList()
|
|
@@ -1315,15 +1189,6 @@ export default {
|
|
]
|
|
]
|
|
}
|
|
}
|
|
myChartScale.setOption(option)
|
|
myChartScale.setOption(option)
|
|
-
|
|
|
|
- myChartScale.getZr().on('click', params => {
|
|
|
|
- const data = storage.get('paramsValue')
|
|
|
|
- const timestamp = moment(data[0].name).unix()
|
|
|
|
-
|
|
|
|
- _this.childQueryParams.start_time = timestamp
|
|
|
|
- _this.childQueryParams.end_time = timestamp
|
|
|
|
- _this.handelgetBizDetail()
|
|
|
|
- })
|
|
|
|
},
|
|
},
|
|
disposeEcharts(echartsList) {
|
|
disposeEcharts(echartsList) {
|
|
if (echartsList.length > 0) {
|
|
if (echartsList.length > 0) {
|
|
@@ -1447,6 +1312,27 @@ export default {
|
|
color: #e6a23c;
|
|
color: #e6a23c;
|
|
padding:0 4px;
|
|
padding:0 4px;
|
|
}
|
|
}
|
|
|
|
+.table-num-box{
|
|
|
|
+ height:20px;
|
|
|
|
+ line-height:30px;
|
|
|
|
+}
|
|
|
|
+.table-day-rate-box{
|
|
|
|
+ height:20px;
|
|
|
|
+ line-height:20px;
|
|
|
|
+ font-size:10px;
|
|
|
|
+}
|
|
|
|
+.up{
|
|
|
|
+ color:#ea463d;
|
|
|
|
+}
|
|
|
|
+.down{
|
|
|
|
+ color:#00b54f;
|
|
|
|
+}
|
|
|
|
+.el-icon-up:before{
|
|
|
|
+ content:'\e6e6'
|
|
|
|
+}
|
|
|
|
+.el-icon-down:before{
|
|
|
|
+ content:'\e6eb'
|
|
|
|
+}
|
|
.TableBox ::v-deep .el-table .cell{
|
|
.TableBox ::v-deep .el-table .cell{
|
|
line-height: 40px !important;
|
|
line-height: 40px !important;
|
|
padding-left: 1px;
|
|
padding-left: 1px;
|