in ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/org/apache/ozhera/prometheus/agent/service/alarmContact/DingAlertContact.java [66:153]
public void Reach(AlertManagerFireResult fireResult) {
fireResult.getAlerts().stream().forEach(alert -> {
try {
String alertName = alert.getLabels().getAlertname();
// query responsible person
log.info("SendAlert dingdingReach begin send AlertName :{}", alertName);
String[] principals = dao.GetRuleAlertAtPeople(alertName);
if (principals == null) {
log.info("SendAlert principals null alertName:{}", alertName);
return;
}
log.info("SendAlert dingdingReach AlertName :{} , principals:{}", alertName,principals);
RuleAlertEntity ruleAlertEntity = dao.GetRuleAlertByAlertName(alertName);
int priority = ruleAlertEntity.getPriority();
Map<String, Object> map = new HashMap<>();
map.put("priority", "P" + String.valueOf(priority));
map.put("title", fireResult.getCommonAnnotations().getTitle());
String alertOp = alert.getLabels().getAlert_op();
String alertValue = alert.getLabels().getAlert_value();
if (alertOp == null || alertOp.isEmpty()) {
alertOp = "";
alertValue = "";
}
//Generate alarm jump url
String generateAlarmJumpUrl = GenerateAlarmUrl(alert.getLabels().getDetailRedirectUrl(), alert);
log.info("DingAlertContact.generateAlarmJumpUrl: {}",generateAlarmJumpUrl);
map.put("alert_op", alertOp);
map.put("alert_value", alertValue);
map.put("application", alert.getLabels().getApplication());
map.put("silence_url", silenceUrl);
map.put("detailRedirectUrl",generateAlarmJumpUrl);
String cstTime = DateUtil.ISO8601UTCTOCST(alert.getStartsAt());
if (cstTime == null) {
cstTime = "unKnown time";
}
map.put("startTime", cstTime);
Labels commonLabels = fireResult.getAlerts().get(0).getLabels();
Class clazz = commonLabels.getClass();
Field[] fields = clazz.getDeclaredFields();
StringBuilder sb = new StringBuilder();
for (Field field : fields) {
// set access rights
field.setAccessible(true);
String fieldName = field.getName();
Object fieldValue = null;
try {
// convert fieldValue to String
fieldValue = field.get(commonLabels); // Get field value
if (fieldValue == null) {
continue;
}
map.put(fieldName, field.get(commonLabels));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
Map<String, Object> finalMap = transferNames(map);
filterName(finalMap);
finalMap.forEach(
(k, v) -> {
if (k.equals("detailRedirectUrl")) {
return;
}
sb.append("**").append(k).append("**").append(": ").append(v).append("\n");
});
String content = sb.toString();
finalMap.put("content", content);
//begin constructive silent parameter
String callbackTitle = "[" + priority + "][Hera] " + fireResult.getCommonAnnotations().getTitle() + alertOp + alertValue;
StringBuilder silenceSb = new StringBuilder();
String silencePrefix = silenceSb.append(alert.getLabels().getApplication()).append("||")
.append(alert.getLabels().getAlertname()).append("||").append(content).append("||")
.append(callbackTitle).append("||").toString();
finalMap.put("silence2h", silencePrefix + "2h");
finalMap.put("silence1d", silencePrefix + "1d");
finalMap.put("silence3d", silencePrefix + "3d");
String freeMarkerRes = FreeMarkerUtil.getContent("/dingding", "dingdingbasicCart.ftl", finalMap);
int randomNumber = random.nextInt(1000);
dingDingService.sendDingDing(freeMarkerRes, principals, alert.getLabels().getAlertname() +
"||" + System.currentTimeMillis() + randomNumber);
log.info("SendAlert success AlertName:{}", alertName);
} catch (Exception e) {
log.error("SendAlert.dingdingReach error:{}", e);
}
});
}