diff --git a/nezha-fronted/src/assets/stylus/main.scss b/nezha-fronted/src/assets/stylus/main.scss
index 7c73e74ce..834265944 100644
--- a/nezha-fronted/src/assets/stylus/main.scss
+++ b/nezha-fronted/src/assets/stylus/main.scss
@@ -288,14 +288,12 @@ li{
.nz-btn.nz-btn-style-normal-new { /* 新版橙色按钮 */
background: $btn-normal-background-color-new;
color: $btn-normal-txt-color-new;
- //box-shadow: $btn-normal-shadow;
- border: 0px;
+ border: 1px solid $btn-normal-background-color-new;
}
.nz-btn.nz-btn-style-error-new { /* 新版红色色按钮 */
background: $btn-error-background-color-new;
color: $btn-error-txt-color-new;
- //box-shadow: $btn-normal-shadow;
- border: 0px;
+ border: 1px solid $btn-error-background-color-new;
}
.nz-btn.nz-btn-style-light-new { /* 新版浅色按钮 */
background: #fff;
@@ -1271,16 +1269,16 @@ li{
margin-right: 15px
}
.dc-asset-state-in {
- background-color: #90ee90;
+ background-color: $success-color;
}
.dc-asset-state-out {
background-color: orange;
}
.dc-asset-state-suspended {
- background-color: rgba(255, 0, 0, 0.6);;
+ background-color: $danger-color;
}
.dc-asset-state-P1 {
- background-color: rgba(255, 0, 0, 0.6);
+ background-color: $danger-color;
}
.chart-box-dropdown {
width: 519px;
diff --git a/nezha-fronted/src/components/common/header.vue b/nezha-fronted/src/components/common/header.vue
index 23ac88689..7c7ca221f 100644
--- a/nezha-fronted/src/components/common/header.vue
+++ b/nezha-fronted/src/components/common/header.vue
@@ -460,8 +460,9 @@
logout() {
this.$get('logout').then(() => {
this.logoutSuccess();
+ document.location.href = "/";
});
- document.location.reload();
+
//this.jumpTo('/login');
},
refreshLang() {
diff --git a/nezha-fronted/src/components/common/project/addLine.vue b/nezha-fronted/src/components/common/project/addLine.vue
index 577d12e04..97bf1eb48 100644
--- a/nezha-fronted/src/components/common/project/addLine.vue
+++ b/nezha-fronted/src/components/common/project/addLine.vue
@@ -311,6 +311,10 @@
},
data(){
return{
+ metricList: [], // metric列表
+ metricCascaderList:[],//metric级联列表
+ metricAllData:new Map(),//存放所有的project-module-metric-labelValue,避免重复加载
+ metricOptions: [],
form:{
arrows:'0',
label:'',
@@ -354,6 +358,7 @@
},
mounted(){
// this.addExpression();
+ this.queryMetrics();
if( this.lineData.expressions){
this.lineData.expressions.forEach((item,index)=>{
this.$refs['promql-'+(index)][0].metricChange(this.expressions[index]);
@@ -361,6 +366,46 @@
}
},
methods:{
+ getMetricOptions() {
+ return this.metricOptions;
+ },
+ queryMetrics() {
+ this.metricOptions = [];
+ this.$get('prom/api/v1/label/__name__/values').then(response=>{
+ if(response.status == 'success'){
+ let metrics=response.data.sort();
+ let metricMap=new Map();
+ metrics.forEach((item)=>{
+ let key='';
+ if(/^[a-zA-Z]+?_[a-zA-Z]*/.test(item)){
+ key=item.split('_')[0];
+ }else if(/^_\w*/.test(item)){
+ key=' ';
+ }else{
+ key=item;
+ }
+ if(metricMap.get(key)){
+ let values=metricMap.get(key);
+ values.push({label:item,value:item});
+ }else{
+ let values=[{label:item,value:item}];
+ metricMap.set(key,values);
+ }
+ //this.metricStore.push({label:item,value:item,insertText:item})
+ });
+ for(let key of metricMap.keys()){
+ let option={
+ label:key,
+ value:key,
+ };
+ if(metricMap.get(key) && metricMap.get(key).length>1){
+ option.children=metricMap.get(key);
+ }
+ this.metricOptions.push(option);
+ }
+ }
+ })
+ },
onSubmit(){
this.$refs['form'].validate((valid) => {
if (valid) {
diff --git a/nezha-fronted/src/components/common/project/addNode.vue b/nezha-fronted/src/components/common/project/addNode.vue
index f4e50d9bb..d1e1ff690 100644
--- a/nezha-fronted/src/components/common/project/addNode.vue
+++ b/nezha-fronted/src/components/common/project/addNode.vue
@@ -34,9 +34,9 @@
-
+
-
![]()
+
{{selImage.imageName}}
-
-
+
+
- {{ item.imageName }}
+ {{ item.imageName }}
{{$t('alert.config.expr')}}
-
-
-
+
+
+
@@ -223,9 +223,15 @@
],
},
iconArray:[],
+ metricList: [], // metric列表
+ metricCascaderList:[],//metric级联列表
+ metricAllData:new Map(),//存放所有的project-module-metric-labelValue,避免重复加载
+ metricOptions: [],
}
},
mounted(){
+ this.getSuggestMetric();
+ this.queryMetrics();
// this.addExpression();
this.addNodeInit();
if( this.nodeData.expressions){
@@ -235,6 +241,43 @@
}
},
methods:{
+ queryMetrics() {
+ this.metricOptions = [];
+ this.$get('prom/api/v1/label/__name__/values').then(response=>{
+ if(response.status == 'success'){
+ let metrics=response.data.sort();
+ let metricMap=new Map();
+ metrics.forEach((item)=>{
+ let key='';
+ if(/^[a-zA-Z]+?_[a-zA-Z]*/.test(item)){
+ key=item.split('_')[0];
+ }else if(/^_\w*/.test(item)){
+ key=' ';
+ }else{
+ key=item;
+ }
+ if(metricMap.get(key)){
+ let values=metricMap.get(key);
+ values.push({label:item,value:item});
+ }else{
+ let values=[{label:item,value:item}];
+ metricMap.set(key,values);
+ }
+ //this.metricStore.push({label:item,value:item,insertText:item})
+ });
+ for(let key of metricMap.keys()){
+ let option={
+ label:key,
+ value:key,
+ };
+ if(metricMap.get(key) && metricMap.get(key).length>1){
+ option.children=metricMap.get(key);
+ }
+ this.metricOptions.push(option);
+ }
+ }
+ })
+ },
addNodeInit(selImageId){
this.$get('/project/topo/icon').then(res=>{
this.imgageLoading=true;
@@ -299,6 +342,63 @@
},
expressionChange: function () {
+ },
+ // 获取metric列表
+ getSuggestMetric() {
+ //this.$get('/prom/api/v1/label/__name__/values').then(response => {
+ this.$get('/module?pageSize=-1').then(response => {
+ if (response.code === 200) {
+ this.metricList = response.data.list;
+ const cascaderMap = new Map();
+ this.metricList.forEach((item,index) => {
+ let projectName = item.project.name;
+ let moduleName = item.name;
+ const childOption = {
+ value: moduleName,
+ label: moduleName,
+ children:[],
+ };
+ if(cascaderMap.has(projectName)){
+ cascaderMap.get(projectName).push(childOption);
+ }else {
+ let childArr = [];
+ childArr.push(childOption);
+ cascaderMap.set(projectName,childArr);
+ }
+
+ //缓存全局数据
+ const moduleItem = {
+ name:moduleName,
+ metricMap:new Map()
+ };
+ if(this.metricAllData.has(projectName)){
+ let moduleGroup = this.metricAllData.get(projectName);
+ this.metricAllData.get(projectName).push(moduleItem);
+ }else {
+ let moduleList = [];
+ moduleList.push(moduleItem);
+ this.metricAllData.set(projectName,moduleList);
+ }
+ });
+ let metricCascaderArr = [];
+ cascaderMap.forEach(function(value,index){
+ const option = {
+ value: index+"_par",
+ label: index,
+ children:value,
+ };
+ metricCascaderArr.push(option);
+ });
+
+ this.metricCascaderList = metricCascaderArr;
+ }else {
+ this.metricList = [];
+ this.metricCascaderList = [];
+ }
+ })
+ },
+ getMetricOptions() {
+ return this.metricOptions;
},
addExpression() {
this.expressions.push('');
@@ -398,8 +498,13 @@
}
-
+
diff --git a/nezha-fronted/src/components/page/config/mibBrowser.vue b/nezha-fronted/src/components/page/config/mibBrowser.vue
index 3c34742b8..d8ff5b488 100644
--- a/nezha-fronted/src/components/page/config/mibBrowser.vue
+++ b/nezha-fronted/src/components/page/config/mibBrowser.vue
@@ -726,6 +726,7 @@
font-size: 14px;
padding-bottom: 5px;
width: 100%;
+ overflow: auto;
}
.mib-browser-detail {
height: 31%;
@@ -758,8 +759,9 @@
position: absolute;
left: calc(25% + 2px);
width: calc(75% - 20px);
- min-height: 100%;
+ height: 100%;
padding-right: 12px;
+ overflow: auto;
}
/*第一列宽25%*/
.mib-browser-detail-row>div:first-of-type {
diff --git a/nezha-fronted/src/components/page/config/system.vue b/nezha-fronted/src/components/page/config/system.vue
index 54cf97c2f..f85a3bcf2 100644
--- a/nezha-fronted/src/components/page/config/system.vue
+++ b/nezha-fronted/src/components/page/config/system.vue
@@ -39,7 +39,7 @@
-
+
@@ -85,8 +85,8 @@
-
-
+
+
@@ -129,8 +129,8 @@
-
-
+
+
@@ -325,7 +325,7 @@
-
+