public void Reach()

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