Pārlūkot izejas kodu

[alerter,webapp]feature 告警配置支持多指标集合 !10
* [alerter,webapp]feature 告警配置支持多指标集合

tomsun28 3 gadi atpakaļ
vecāks
revīzija
7c12eda30e

+ 4 - 9
alerter/src/main/java/com/usthe/alert/calculate/CalculateAlarm.java

@@ -138,32 +138,24 @@ public class CalculateAlarm {
         }
         List<CollectRep.Field> fields = metricsData.getFieldsList();
         Map<String, Object> fieldValueMap = new HashMap<>(16);
-        fieldValueMap.put("app", app);
-        fieldValueMap.put("metrics", metrics);
         for (CollectRep.ValueRow valueRow : metricsData.getValuesList()) {
             if (!valueRow.getColumnsList().isEmpty()) {
+                fieldValueMap.clear();
                 String instance = valueRow.getInstance();
                 if (!"".equals(instance)) {
                     fieldValueMap.put("instance", instance);
-                } else {
-                    fieldValueMap.remove("instance");
                 }
                 for (int index = 0; index < valueRow.getColumnsList().size(); index++) {
                     String valueStr = valueRow.getColumns(index);
                     CollectRep.Field field = fields.get(index);
-                    fieldValueMap.put("metric", field.getName());
                     if (field.getType() == CommonConstants.TYPE_NUMBER) {
                         Double doubleValue = CommonUtil.parseDoubleStr(valueStr);
                         if (doubleValue != null) {
                             fieldValueMap.put(field.getName(), doubleValue);
-                        } else {
-                            fieldValueMap.remove(field.getName());
                         }
                     } else {
                         if (!"".equals(valueStr)) {
                             fieldValueMap.put(field.getName(), valueStr);
-                        } else {
-                            fieldValueMap.remove(field.getName());
                         }
                     }
                 }
@@ -187,6 +179,9 @@ public class CalculateAlarm {
                                     }
                                 } else {
                                     int times = 1;
+                                    fieldValueMap.put("app", app);
+                                    fieldValueMap.put("metrics", metrics);
+                                    fieldValueMap.put("metric", define.getField());
                                     Alert alert = Alert.builder()
                                             .monitorId(monitorId)
                                             .alertDefineId(define.getId())

+ 25 - 12
web-app/src/app/routes/alert/alert-setting/alert-setting.component.html

@@ -127,7 +127,14 @@
       <nz-form-item>
         <nz-form-label [nzSpan]="7" nzFor="target" nzRequired="true">指标对象</nz-form-label>
         <nz-form-control [nzSpan]="8" [nzErrorTip]="'validation.required' | i18n">
-          <nz-cascader required name="target" id="target" [nzOptions]="appHierarchies" [(ngModel)]="cascadeValues"></nz-cascader>
+          <nz-cascader
+            required
+            name="target"
+            id="target"
+            [nzOptions]="appHierarchies"
+            [(ngModel)]="cascadeValues"
+            (ngModelChange)="cascadeOnChange($event)"
+          ></nz-cascader>
         </nz-form-control>
       </nz-form-item>
       <nz-form-item>
@@ -138,8 +145,11 @@
                 <nz-list-item *ngIf="cascadeValues.length == 3">
                   <code>{{ cascadeValues[2] }} : 选中的指标对象</code>
                 </nz-list-item>
-                <nz-list-item>
-                  <code>instance : 所属行实例值</code>
+                <nz-list-item *ngFor="let item of otherMetrics">
+                  <code>{{ item }} : 所属行其它指标对象</code>
+                </nz-list-item>
+                <nz-list-item *ngIf="otherMetrics.length != 0">
+                  <code>instance : 所属行实例</code>
                 </nz-list-item>
                 <nz-list-item>
                   <code>支持操作符函数 : equals(str1,str2), ==, <, <=, >, >=, !=, ( ), +, -, &&, ||</code>
@@ -167,7 +177,7 @@
               nz-input
               name="expr"
               id="expr"
-              placeholder='根据此表达式计算判断是否触发阈值.&#10;示例: equals&#40;instance,"cpu1"&#41; &amp;&amp; usage&gt;40'
+              placeholder="根据此表达式计算判断是否触发阈值.&#10;示例: responseTime&gt;40"
             >
             </textarea>
           </nz-textarea-count>
@@ -204,20 +214,23 @@
           <nz-collapse>
             <nz-collapse-panel [nzActive]="isManageModalAdd" nzHeader="支持的通知模版环境变量">
               <nz-list nzSize="small" nzSplit="false">
-                <nz-list-item *ngIf="cascadeValues.length == 3">
-                  <code>&#36;&#123;metric&#125; : 选中的指标对象名称</code>
+                <nz-list-item>
+                  <code>&#36;&#123;app&#125; : 监控类型名称</code>
+                </nz-list-item>
+                <nz-list-item>
+                  <code>&#36;&#123;metrics&#125; : 监控指标集合名称</code>
                 </nz-list-item>
                 <nz-list-item *ngIf="cascadeValues.length == 3">
-                  <code>&#36;{{ '{' + cascadeValues[2] + '}' }} : 选中的指标对象值</code>
+                  <code>&#36;&#123;metric&#125; : 监控指标名称</code>
                 </nz-list-item>
-                <nz-list-item>
-                  <code>&#36;&#123;instance&#125; : 所在行实例值</code>
+                <nz-list-item *ngIf="cascadeValues.length == 3">
+                  <code>&#36;{{ '{' + cascadeValues[2] + '}' }} : 监控指标对象值</code>
                 </nz-list-item>
-                <nz-list-item>
-                  <code>&#36;&#123;app&#125; : 所属监控类型名称</code>
+                <nz-list-item *ngFor="let item of otherMetrics">
+                  <code>&#36;{{ '{' + item + '}' }} : 所属行其它指标值</code>
                 </nz-list-item>
                 <nz-list-item>
-                  <code>&#36;&#123;metrics&#125; : 所属监控指标组名称</code>
+                  <code>&#36;&#123;instance&#125; : 所属行实例值</code>
                 </nz-list-item>
               </nz-list>
             </nz-collapse-panel>

+ 21 - 0
web-app/src/app/routes/alert/alert-setting/alert-setting.component.ts

@@ -136,6 +136,7 @@ export class AlertSettingComponent implements OnInit {
           if (message.code === 0) {
             this.define = message.data;
             this.cascadeValues = [this.define.app, this.define.metric, this.define.field];
+            this.cascadeOnChange(this.cascadeValues);
           } else {
             this.notifySvc.error('查询此监控定义详情失败!', message.msg);
           }
@@ -234,6 +235,26 @@ export class AlertSettingComponent implements OnInit {
   isManageModalAdd = true;
   define!: AlertDefine;
   cascadeValues: string[] = [];
+  otherMetrics: string[] = [];
+  cascadeOnChange(values: string[]): void {
+    if (values == null || values.length != 3) {
+      return;
+    }
+    this.appHierarchies.forEach(hierarchy => {
+      if (hierarchy.value == values[0]) {
+        hierarchy.children.forEach((metrics: { value: string; children: any[]}) => {
+          if (metrics.value == values[1]) {
+            this.otherMetrics = [];
+            metrics.children.forEach(item => {
+              if (item.value != values[2]) {
+                this.otherMetrics.push(item.value);
+              }
+            });
+          }
+        });
+      }
+    });
+  }
   onManageModalCancel() {
     this.isManageModalVisible = false;
   }

+ 1 - 1
web-app/src/app/routes/dashboard/dashboard.component.ts

@@ -127,7 +127,7 @@ export class DashboardComponent implements OnInit, OnDestroy {
     };
     this.alertsTheme = {
       title: {
-        subtext: '告警等级分布',
+        subtext: '告警分布',
         left: 'center'
       },
       tooltip: {