Authored by xwx

Merge branch 'master' of http://113.200.75.45:82/monitor_v3/hg-monitor-web into master-v32-xwx

Showing 26 changed files with 729 additions and 31 deletions
... ... @@ -1604,7 +1604,8 @@ layui.define(['soulTable', 'commonDetail', 'common', 'laytpl', 'view', 'admin',
// {field: 'adminName', title: '负责人', minWidth: 123, align: 'center', sort: true},
// {field: 'adminPhone', title: '负责人电话', minWidth: 118, align: 'center', sort: true},
{field: 'resTypeName', title: '资源类型', minWidth: x_110, align: 'center'},
{field: 'state', title: '资源状态', minWidth: x_110, align: 'center', sort: true, templet: '#resStateTpl'}
{field: 'state', title: '资源状态', minWidth: x_110, align: 'center', sort: true, templet: '#resStateTpl'},
{field: 'linkState', title: '连接状态', align: 'center', minWidth: x_110, templet: '#linkStateTpl', sort: true}
],
"MIDDLEWARE_TOMCAT": [
//{type: 'numbers', title: '序号', align: 'center', fixed: 'left'},
... ...
... ... @@ -469,7 +469,7 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
, icon: 1
, time: 1000
},function () {
reloadTable();
// reloadTable();
});
}).error(function (error) {
console.error(error);
... ...
... ... @@ -467,7 +467,7 @@ layui.define(['table', 'form', 'laydate', 'admin', 'layer', 'laytpl', 'common',
elem: '#upload_tasktemp' //绑定元素
, url: common.domainName + '/api-web/inspectiontask/upload?access_token=' + accessToken //上传接口
, accept: 'file' //允许上传的文件类型
, exts: 'docx'
, exts: 'docx|doc'
, multiple: false
, before: function () {
layer.load(2);
... ...
... ... @@ -46,6 +46,24 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'treeTabl
});
deleteById(noticeTimelyCodeList);
});
// 全部刷新
$('#btn-noticeTimely-refresh').on('click', function () {
layer.load(2);
$.ajax({
url: domainName + '/api-web/noticeTimely/refresh?access_token=' + accessToken,
type: 'get',
success: function (response) {
layer.closeAll('loading');
if (response.success) {
layer.msg('刷新成功!', {icon: 1, time: 3000});
reloadTable();
} else {
layer.msg('刷新失败!', {icon: 2, time: 3000});
}
}
})
});
//switch事件
$.each(switchElement, function (i, v) {
form.on('switch(switch_noticeTimely_checkbox_' + v + ')', function (data) {
... ... @@ -135,6 +153,17 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'treeTabl
var ids = [$(this).data('id')];
deleteStateById(ids);
});
//全部删除
$('#btn-notice-state-delete').unbind("click").on('click',function () {
//获取选中数据
var checks = table.checkStatus('table-noticeTimely-state-list').data;
var list= checks.map(item => item.id);
if(list.length>0){
deleteStateById(list);
}else{
layer.msg('请最少选择一项数据', {icon: 7, time: 2000});
}
})
}
});
}
... ... @@ -223,12 +252,6 @@ layui.define(['table', 'form', 'admin', 'layer', 'common', 'sessions', 'treeTabl
loadStateTable(id);
},
yes: function (index, layero) {
//获取选中数据
var checks = table.checkStatus('table-noticeTimely-state-list').data;
var list= checks.map(item => item.id);
if(list.length>0){
deleteStateById(list);
}
layer.close(index);
}
});
... ...
... ... @@ -24,6 +24,8 @@ layui.define(['commonDetail','common'], function (exports) {
var netcardkpi = "KPIFABFD741,KPID339D51B,KPI02062F43";
//HBA卡
var hbaKpi = "KPIFABFD741,KPI6BF1F392,KPI5858832B,KPI8BFD7BC7,KPI2EF4F8CD";
// LUN信息
var lunKpi = "KPID9EE5B18,KPI2D4365CA,KPI06F12BAA,KPI008F0D3A,KPI17B00478";
reload()
//渲染页面
... ... @@ -58,6 +60,11 @@ layui.define(['commonDetail','common'], function (exports) {
commonDetail.renderActiveAlarms("vmware_physicshost_alarmlist",resId);
commonDetail.renderVhostTable("vmware_physicshost_vhostlist",'VIRTUALIZATION_VMWARE_VHOST',resId);
// Start Wang 2022/2/24 9:29 解决:vm宿主机连接的LUN信息没有展示
// LUN信息
commonDetail.renderTable("vmware_physicshost_lunlist",false,resId,lunKpi,'LUN信息','lun');
// End Wang 2022/2/24 9:30
}
//定时任务
... ... @@ -67,4 +74,4 @@ layui.define(['commonDetail','common'], function (exports) {
commonDetail.detailTimer.push(timer);
});
});
\ No newline at end of file
});
... ...
... ... @@ -50,6 +50,8 @@
<label class="layui-form-label">周期类型<span style="color: red">*</span></label>
<div class="layui-input-block">
<select class="layui-select" name="frequencyType">
<!--增加请选择项,去除默认加载年报,joke modify 20220224-->
<option value="">请选择</option>
<option value="year">年报</option>
<option value="quarter">季报</option>
<option value="week">周报</option>
... ...
... ... @@ -119,7 +119,7 @@
<div class="layui-form-item hide" id="notice_timely_param_sql">
<label class="layui-form-label textarea-label">展示内容</label>
<div class="layui-input-block" style="display: flex;">
<textarea name="details" placeholder="请输入展示内容" class="layui-textarea" style="width: 92%"></textarea>
<textarea name="details" placeholder="请输入展示内容" class="layui-textarea" style=""></textarea>
</div>
</div>
<div class="layui-form-item hide" id="notice_timely_param_level">
... ... @@ -129,7 +129,7 @@
</article>
<script type="text/html" id="noticeTimelyParamAddRowHtml">
<div class="layui-form-item">
<div class="layui-inline" style="float: right">
<div class="layui-inline" style="margin-left: 110px">
<div class="layui-notice-time-lable">当数据集中的</div>
<select class="layui-notice-time-select notice_time_select_sql_value">
... ...
... ... @@ -29,6 +29,9 @@
<button class="layui-btn layui-btn-sm layui-btn-normal" id="btn-noticeTimely-delete">
<i class="layui-icon">&#xe640;</i>删除
</button>
<button class="layui-btn layui-btn-sm layui-btn-normal" id="btn-noticeTimely-refresh">
<i class="layui-icon">&#xe669;</i>全部刷新
</button>
</div>
<table id="table-noticeTimely-list" lay-filter="table-noticeTimely-list"></table>
</div>
... ... @@ -37,6 +40,13 @@
</div>
</article>
<script type="text/html" id="noticeTimely-state-html" >
<div class="layui-card-body">
<div class="warn-btns">
<button class="layui-btn layui-btn-sm layui-btn-normal" id="btn-notice-state-delete">
<i class="layui-icon">&#xe640;</i>删
</button>
</div>
</div>
<div>
<table id="table-noticeTimely-state-list" lay-filter="table-noticeTimely-state-list"></table>
</div>
... ...
... ... @@ -21,9 +21,9 @@
<button class="layui-btn layui-btn-sm layui-btn-normal" id="reporttype-create">
<i class="layui-icon">&#xe654;</i>新增
</button>
<button class="layui-btn layui-btn-sm layui-btn-normal" id="btn-reporttype-delete">
<i class="layui-icon">&#xe640;</i>删除
</button>
<!-- <button class="layui-btn layui-btn-sm layui-btn-normal" id="btn-reporttype-delete">-->
<!-- <i class="layui-icon">&#xe640;</i>删除-->
<!-- </button>-->
</div>
<table id="reporttype-table" lay-filter="reporttypetable"></table>
</div>
... ... @@ -34,7 +34,7 @@
<!--新增/编辑弹出框-->
<script type="text/html" id="reporttypeEdit">
<form class="layui-form layui-form-pane" action="" lay-filter="form-reporttype-edit" id="form-reporttype-edit">
<form class="layui-form layui-form-pane" action="" lay-filter="form-reporttype-edit" id="form-reporttype-edit" onsubmit="return false;">
<input type="hidden" name="id">
<fieldset class="layui-elem-field layui-field-title">
<legend>基本信息</legend>
... ...
... ... @@ -80,6 +80,14 @@
<div id="vmware_physicshost_vhostlist"></div>
</div>
</div>
<!--Start Wang 2022/2/24 9:29 解决:vm宿主机连接的LUN信息没有展示-->
<div class="lay-row">
<div class="lay-row-item">
<h5 class="lay-row-title">LUN信息</h5>
<div id="vmware_physicshost_lunlist"></div>
</div>
</div>
<!--End Wang 2022/2/24 9:30-->
<div class="lay-row">
<div class="lay-row-item">
<h5 class="lay-row-title">实时告警动态</h5>
... ... @@ -102,4 +110,4 @@
fn(JSON.parse(parm));
}
});
</script>
\ No newline at end of file
</script>
... ...
@import "../icon/iconfont.css";
@import "../css/assets.css";
@import "../css/components.css";
/*缓存数据*/
@import "../css/cacheData.css";
.d-flex {
display: flex;
... ... @@ -126,3 +128,10 @@ custom-class="config-dialog"
.breadcrumb .el-breadcrumb .el-breadcrumb__item {
cursor: pointer;
}
.margin-top-bottom-30{
margin:30px 0;
}
.margin-top-bottom-10{
margin:10px 0;
}
... ...
.flex-div-start{
display: flex;
align-items: center;
justify-content: flex-start;
}
.cache-container{
height:100%;
background: #FFFFFF;
padding:20px;
}
.tag-item{
margin-right: 10px;
}
.view-container{
min-height: 600px;
padding:0 10px 10px;
display: flex;
flex-flow: column;
align-items: flex-start;
}
.view-title{
padding-bottom: 10px;
}
.view-detail{
flex: 1;
width: 100%;
text-align: left;
border:1px solid #ccc;
max-height: 600px;
overflow-y: auto;
}
.detail-data{
padding:10px;
}
... ...
... ... @@ -47,7 +47,27 @@ const routes = [{
path: '/alarmsubscribe/excludeKpi',
name: 'alarmSubscribeExcludeKpi',
component: () => myImport('views/alarmsubscribe/index')
}
},
{
path: '/vue3/pieDetailLine',
name: 'pieDetailLine',
component: () => myImport('views/pieDetailLine/index')
},
{
path: '/vue3/portSenseSelect',
name: 'portSenseSelect',
component: () => myImport('views/portSenseSelect/index')
},
{
path: '/alarmsubscribe/excludeKpi',
name: 'alarmSubscribeExcludeKpi',
component: () => myImport('views/alarmsubscribe/index')
},
{
path: '/cache',
name: 'cacheData',
component: () => myImport('views/cacheData/index')
},
];
// hash模式: createWebHashHistory
... ...
<div :id="chartId" style="width:100%;height:100%;"></div>
... ...
export default {
name: 'lineChart',
template: '',
// props:['yAxisData','seriesData','legendData','chartId'],
props:['optionData'],
components: {
},
data(){
return {
myChart:'',
titleFontSize:30,
yAxisData:'',//y序列的数据
seriesData:[],//y轴数据
newOptionData:this.optionData,
chartId:'line-echart'
}
},
watch:{
optionData(newValue,oldValue){
this.newOptionData=newValue
this.chartSetOption()
}
},
setup(props, {attrs, slots, emit}) {
const {proxy} = Vue.getCurrentInstance();
// 挂载完
Vue.onMounted(() => {
proxy.chartSetOption()
})
const chartSetOption=()=>{
const chartDom=proxy.$el
const myChart = echarts.init(chartDom);
proxy.myChart=myChart;
/* window.addEventListener('resize', proxy.screenAdapter)
proxy.screenAdapter()*/
let option=props.optionData;
/* option = {
title: {
text: ''
},
tooltip: {
trigger: 'axis',
backgroundColor:'rgba(50,50,50,0.7)',
borderColor:"#333",
textStyle:{
color:"#fff",
align:'left'
}
},
legend: {
data: props.legendData,
itemHeight:0,//图例圆圈大小设置
y:'7px',
textStyle: {
color: '#ffffff',
fontsize:"12px"
}
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true,
},
/!*toolbox: {
feature: {
saveAsImage: {}
}
},*!/
xAxis: {
type: 'category',
boundaryGap: false,
data: xAxisData,
axisLine:{
show:false,//是否显示坐标线
},
axisTick: {
show: false //是否显示坐标刻度
},
axisLabel:{
color:'#ffffff',
},
},
yAxis: proxy.yAxisData,
series: proxy.seriesData,
itemStyle:{
showSymbol:false
}
};*/
option && myChart.setOption(option,true);
}
const screenAdapter= ()=> {
proxy.titleFontSize = proxy.myChart.offsetWidth / 100 * 3.6
const adapterOption = {
legend: {
itemWidth: proxy.titleFontSize,
itemHeight: proxy.titleFontSize,
itemGap: proxy.titleFontSize,
textStyle: {
fontSize: proxy.titleFontSize / 2
}
}
}
proxy.myChart.setOption(adapterOption,true)
proxy.myChart.resize()
}
return{
chartSetOption,
screenAdapter
}
},
unmounted () {
// window.removeEventListener('resize', this.screenAdapter)
}
}
\ No newline at end of file
... ...
<div class="pie-detail-line-container" >
<div class="pie-detail-title">
<span class="pie-detail-title-active">性能走势</span>
</div>
<!-- 趋势分析 预警分析-->
<div class="pie-detail-content">
<el-row class="detail-content-title">
<el-col :span="8"></el-col>
<el-col :span="16" class="pie-flex-end">
<div class="pie-date-range">
<cm-date-range-influx v-if="interval=='custom'" :keys="keys" @callbackinflux="getInfluxOption" @callbacksure="getOptionData" @callbacktime="callbacktime" @callbackrate="callbackrate"></cm-date-range-influx>
</div>
<div class="line-filter pie-line-filter">
<div class="linechartfrequency line-filter-content">
<div v-if="interval!='custom'" @click="changeInterval('DAY')" :class="['line-filter-item', {'active':interval=='DAY'}]" data-value="DAY" >一天</div>
<div v-if="interval!='custom'" @click="changeInterval('WEEK')" :class="['line-filter-item', {'active':interval=='WEEK'}]" data-value="WEEK">一周</div>
<div v-if="interval!='custom'" @click="changeInterval('MONTH')" :class="['line-filter-item', {'active':interval=='MONTH'}]" data-value="MONTH">一月</div>
<div v-if="interval!='custom'" @click="changeInterval('YEAR')" :class="['line-filter-item', {'active':interval=='YEAR'}]" data-value="YEAR">一年</div>
<div v-if="interval!='custom'" @click="changeInterval('custom')" :class="['line-filter-item', {'active':interval=='custom'}]" data-value="custom">自定义</div>
<div v-if="interval=='custom'" @click="changeInterval('DAY')" :class="['line-filter-item', {'active':interval=='custom'}]" data-value="custom">返 回</div>
</div>
</div>
</el-col>
</el-row>
<el-row class="detail-content">
<el-col :span="24" class="detail_linechart">
<LineChart :optionData="optionData" v-if="optionData"></LineChart>
<!-- <div class="detail_linechart" id="indentKpiLineChart"></div>-->
<!-- <div class="detail_linechart" id="warningKpiLineChart" style="margin-top:35px;"></div>-->
<!-- <div class="detail_linechart" id="line-tingyun-trendKpiLineChart" style="margin-top:35px;"></div>-->
</el-col>
</el-row>
</div>
</div>
... ...
export default {
name: 'pieDetailLine',
template: '',
components:{
'LineChart': Vue.defineAsyncComponent(
() => myImport('views/page/components/lineChart/index')
)
},
data() {
return{}
},
setup(props, {attrs, slots, emit}) {
const {proxy} = Vue.getCurrentInstance();
let interval=Vue.ref('DAY');
let optionData=Vue.ref('');
let names = Vue.ref(['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00']);
let series = Vue.ref([]);
let rateData = Vue.ref([]);
let kpiUnit = Vue.ref('');
let kpiName = Vue.ref('');//指标名称
let startTime=Vue.ref('');
let endTime=Vue.ref('');
let colorsArr=Vue.ref([
{
start: '#46d6d8',
end: '#2883d0'
},
{
start: '#facf5b',
end: '#f77623'
},
{
start: '#C04DD8',
end: '#D81F72'
},
{
start: '#F5A1EB',
end: '#A04DE2'
},
{
start: '#F36093',
end: '#FF465C'
},
{
start: '#C2E74D',
end: '#00AE8B'
},
{
start: '#3DC3FF',
end: '#01FFFF'
},
{
start: '#B850ED',
end: '#9062EF'
},
{
start: '#305be6',
end: '#36a7d3'
},
{
start: '#FFA500',
end: '#FFEE00'
},
{
start: '#C4E64C',
end: '#2de078'
},
{
start: '#30ffb3',
end: '#01FFFF'
},
{
start: '#FF4488',
end: '#F13EFF'
},
{
start: '#A64CE2',
end: '#625AE7'
},
{
start: '#5AEBC7',
end: '#5FC9F8'
},
{
start: '#FFA500',
end: '#FFEE00'
},
{
start: '#00AAD6',
end: '#625AE7'
},
{
start: '#E48BDE',
end: '#FF9262'
},
{
start: '#B2797B',
end: '#FF4B51'
},
{
start: '#ffe393',
end: '#feff5b'
}
])
let keys=Vue.ref('');
let getOptionData=(res)=>{
let nameArr=[];
let dataArr=[];
if(res && res.success){
if(res.map){
let resData=res.map;
kpiUnit.value = resData.kpiUnit == null ? "" : resData.kpiUnit;
Object.keys(resData).forEach(function(key){
Object.keys(resData[key]).sort(function (a, b) {
return a<b?1:-1;
}).forEach(function(time){
nameArr.unshift(time);
dataArr.unshift(resData[key][time])
})
})
rateData.value = {
names: nameArr,
series: [{
"data": dataArr,
"name": '平均值'
}],
kpiUnit: kpiUnit.value
}
}
}else{
proxy.$global.showMsg(res.msg,'warning');
}
setSeries();
}
const getInfluxOption = (res) => {
let str = res.str;
if (res.map && Object.keys(res.map).length == 0) {
let defData = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
let seriesDefArr = [];
if(str == 'performance'){
seriesDefArr = [{
"data": defData,
"name": kpiName.value
}];
} else {
seriesDefArr = [{
"data": defData,
"name": "最大"
},{
"data": defData,
"name": "最小"
},{
"data": defData,
"name": "平均"
}];
}
rateData.value = {
names: ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'],
series: seriesDefArr,
kpiUnit: kpiUnit.value
}
} else {
let names = [];
let max = [];
let min = [];
let avg = [];
let kpiValueArr = [];
let seriesArr = [];
let kpiName = '';
let kpiUnitVal = '';
let kpiList = res.data;
Object.keys(res.map).forEach(function(key){
res.map[key].forEach(function(item){
names.push(item.dbTimeStr);
if(str == 'performance'){
kpiValueArr.push(item.kpiValue);
} else {
max.push(item.maxValue);
min.push(item.minValue);
avg.push(item.avgValue);
}
if(kpiName == '' && kpiUnitVal == ''){
kpiList.filter(function (v){
if(v.kpiId == item.kpiId){
kpiName = v.kpiName;
kpiUnitVal = v.unit;
}
})
}
})
})
if(str == 'performance'){
seriesArr = [{
"data": kpiValueArr,
"name": kpiName
}];
} else {
seriesArr = [{
"data": max,
"name": "最大"
},{
"data": min,
"name": "最小"
},{
"data": avg,
"name": "平均"
}];
}
kpiUnit.value = kpiUnitVal;
rateData.value = {
names: names,
series: seriesArr,
kpiUnit: kpiUnit.value
};
}
setSeries();
}
const changeInterval=(val)=>{
interval.value=val;
if(val=='custom'){
}else{
getLineChart();
}
}
const getLineChart=()=>{
let params=proxy.$route.query
let resourceId=params.resId;//资源ID
let kpiId =params.kpiId; //指标ID
let flag =params.flag;//二级资源标识
let warning =params.warning;//预警指标标识
let ident =params.ident;//性能指标标识
let trend =params.trend;//趋势指标标识
keys.value=resourceId+":"+kpiId+":"+flag;
kpiName.value = params.name;//指标名称
let url = '/api-web/detail/performance/line/chart?interval=' + interval.value + '&startTime='
+ startTime.value + '&endTime=' + endTime.value + '&resId=' + resourceId + '&kpiIds=' + kpiId + '&subResId=' + flag;
proxy.$http.get(url, {},function (res){
kpiUnit.value = res.data.kpiUnit == null ? "" : res.data.kpiUnit;
if (res.data && res.data.names.length == 0) {
rateData.value = {
names: ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'],
series: [{
"data": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"name": kpiName.value
}],
kpiUnit: kpiUnit.value
}
} else {
rateData.value = res.data;
}
setSeries();
},function (error){
rateData.value = {
names: ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'],
series: [{
"data": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"name": kpiName.value
}],
kpiUnit: kpiUnit.value
}
setSeries();
})
}
const setSeries=()=>{
series.value=[];
$.each(rateData.value.series,function (i,v) {
series.value.push({
name: v.name,
type: 'line',
data: v.data,
symbolSize: 12,
symbol: 'circle',
itemStyle: {
normal: {
color: colorsArr.value[i].start //图标颜色
}
},
lineStyle: {
normal: {
width: 3, //连线粗细
color: colorsArr.value[i].end //连线颜色
}
}
})
});
optionDataInit();
}
const optionDataInit=()=>{
optionData.value = {
tooltip: {
trigger: 'axis',
formatter:function (param) {
var tips = kpiName.value+" "+param[0].name +"<br/>";
$.each(param,function (i,v) {
tips += v.marker+" "+v.seriesName + ":"+v.value +kpiUnit.value+"</br>"
});
return tips;
}
},
legend: {
show: true
},
grid: {
top: '10%',
left: '3%',
right: '4%',
bottom: '15%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {
show: false
}
}
},
xAxis: {
type: 'category',
data: rateData.value.names,
axisLine: {
lineStyle: {
color: '#c9c9c9'
}
},
axisLabel: {
color: '#232425',
showMaxLabel: true
},
splitArea: {
show: true,
areaStyle: {
color: ['rgba(200,200,200,0.1)', 'transparent'
]
}
}
},
yAxis: {
type: 'value',
scale: true,
boundaryGap: ['10%', '10%'],
axisLine: {
lineStyle: {
color: '#232425'
},
show: false
},
axisTick: {
show: false
},
splitLine: {
lineStyle: {
color: ['#ccc']
}
}
},
// x轴拖动
dataZoom: [
{
type: "slider",
realtime: true, //拖动滚动条时是否动态的更新图表数据
height: 25, //滚动条高度
start: 40, //滚动条开始位置(共100等份)
end: 65 //结束位置(共100等份)
}
],
series:series.value
};
}
//时间范围组件回调函数--时间范围
const callbacktime=(val)=>{
}
//时间范围组件回调函数--聚合频率
const callbackrate=(val)=>{
}
// 挂载完
Vue.onMounted(() => {
getLineChart();
})
return {
interval,
optionData,
names,
series,
rateData,
kpiUnit,
kpiName,
keys,
optionDataInit,
getOptionData,
getInfluxOption,
getLineChart,
changeInterval
}
}
}
... ...
... ... @@ -48,6 +48,10 @@ layui.define(['commonDetail','common', 'admin'], function (exports) {
dataRenderingBase("arms_JVM_threadCount_lineChart", resId, "KPI7C4BEB26,KPI97B71BAA,KPI15EC2627,KPIA9E2E4DE,KPI068D9FA5,KPI6ECA9036,KPI328E5AFE,KPI8F8FAD7F", "JVM线程数/每分钟", null, 1);
//响应时间/每分钟
dataRenderingBase("arms_time_lineChart", resId, "KPI678F9FC3", "响应时间/每分钟", null);
// Start Wang 2022/2/24 9:29 解决:arms采集结果展示(详情页面开发)
// 节点详情
commonDetail.renderTable("arms_node_detail",false,resId,"KPI452C0F78,KPI678F9FC3,KPIFC03301B,KPI4D6871EA,KPI649E288B,KPI5769F327,KPI8B2CCCCF",'节点详情',`detail`);
// End Wang 2022/2/24 9:30
//活动告警
commonDetail.renderActiveAlarms("arms_active_alram", resId);
}
... ... @@ -157,4 +161,4 @@ layui.define(['commonDetail','common', 'admin'], function (exports) {
},commonDetail.timerTime);
commonDetail.detailTimer.push(timer);
});
});
\ No newline at end of file
});
... ...
... ... @@ -1443,8 +1443,9 @@ layui.define(['common', 'tree', 'laypage', 'laytpl', 'admin', 'form', 'table', '
if(resType == 'HOST_MINICOMPUTER' || resType=='HUAWEI_CLOUD_CLUSTER' || resType=='HUAWEI_CLOUD_COLONY' || resType=='HUAWEI_CLOUD_PHYSICSHOST' ||
resType == 'HUAWEI_CLOUD_STORAGE' || resType == 'HUAWEI_CLOUD_SWITCHBOARD' || resType == 'HUAWEI_CLOUD_FIREWALL' || resType == 'ALI_CLOUD_RDS'
|| resType == 'ALI_CLOUD_SLB' || resType == 'ALI_CLOUD_OSS'||resType=='VIRTUALIZATION_VMWARE_VHOST'||resType=='MIDDLEWARE_WEBLOGIC'
){//小型机整机 屏蔽连接状态
){//屏蔽连接状态
$('.info-box-count').eq(3).hide();
$('#link_state_div').hide();
}
form.render("select");
form.render();
... ...
... ... @@ -44,6 +44,12 @@
</div>
<div class="lay-row">
<div class="lay-row-item">
<h5 class="lay-row-title">节点详情</h5>
<div id="arms_node_detail"></div>
</div>
</div>
<div class="lay-row">
<div class="lay-row-item">
<h5 class="lay-row-title">实时告警动态</h5>
<div id="arms_active_alram"></div>
</div>
... ... @@ -64,4 +70,4 @@
fn(JSON.parse(parm));
}
});
</script>
\ No newline at end of file
</script>
... ...
... ... @@ -53,5 +53,4 @@
/*对比分析*/
@import "../css/analysis.css";
/*缓存数据*/
@import "../css/cacheData.css";
... ...
... ... @@ -128,15 +128,9 @@
padding:15px ;
flex:1;
}
.margin-top-bottom-30{
margin:30px 0;
}
.margin-top-bottom-10{
margin:10px 0;
}
.export-div{
position: absolute;
right:0;
top:0;
}
\ No newline at end of file
}
... ...
... ... @@ -52,7 +52,7 @@ export default {
resData.push({
"resTypeAllNum": 0,
"code": "other",
"name": "其他",
"name": "暂无",
"excellentNum": 0,
"middleNum": 0,
"goodNum": 0,
... ...