Compare commits

...

1 Commits

Author SHA1 Message Date
tomsun28
ec3efb71a9 [alerter,webapp]feature 告警配置支持多指标集合 2022-03-08 10:52:05 +08:00
4 changed files with 53 additions and 24 deletions

View File

@@ -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())

View File

@@ -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 *ngIf="cascadeValues.length == 3">
<code>&#36;{{ '{' + cascadeValues[2] + '}' }} : 监控指标对象值</code>
</nz-list-item>
<nz-list-item *ngFor="let item of otherMetrics">
<code>&#36;{{ '{' + item + '}' }} : 所属行其它指标值</code>
</nz-list-item>
<nz-list-item>
<code>&#36;&#123;instance&#125; : 所行实例值</code>
</nz-list-item>
<nz-list-item>
<code>&#36;&#123;app&#125; : 所属监控类型名称</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>

View File

@@ -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;
}

View File

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