优化后的代码:

if (bblength.length() < 168) {
    jedis.set("Error", "PassRule");
} else {
    List<Map<String, Object>> alarms = (List<Map<String, Object>>) map2.get("alarms");
    for (Map<String, Object> alarm : alarms) {
        String entityId = (String) alarm.get("id");
        Map<String, Object> createRules = (Map<String, Object>) alarm.get("createRules");
        for (String severity : Arrays.asList("MAJOR", "MINOR", "CRITICAL")) {
            JSONObject severityJson = (JSONObject) createRules.get(severity);
            if (severityJson != null) {
                JSONObject conditionJson = (JSONObject) severityJson.get("condition");
                Map<String, Object> conditionMap = parseJSON2Map(conditionJson.toString());
                List<Map<String, Object>> conditions = (List<Map<String, Object>>) conditionMap.get("condition");
                int operatorNum = ListNum(conditions);
                if (operatorNum == 1) {
                    GreaterOrLessOrEqual(conditions, 1);
                    String defaultValueStr = String.valueOf(defaultValue);
                    jedis.mset("devicename", devicename, "entity_id", entityId, "model", severity, "operation", operation, "defaultValue", defaultValueStr, "i", String.valueOf(1));
                    MySqlRuleInset(devicename, entityId, severity, operation, defaultValue, 1);
                } else if (operatorNum == 2 || operatorNum == 3) {
                    ForGreaterOrLessOrEqual(conditions, operatorNum, severity);
                }
            }
        }
    }
}

优化说明:

  1. 使用for-each循环遍历alarms列表和severity列表,减少重复代码和代码行数。
  2. 在循环中直接获取entityId、severityJson和conditionJson,减少重复代码和代码行数。
  3. 使用Arrays.asList方法创建severity列表,减少重复代码和代码行数。
  4. 将获取conditionMap和operatorNum的代码移到if语句外部,避免重复计算。
  5. 删除无用的注释和打印语句。
优化代码: 简化告警规则解析逻辑

原文地址: https://www.cveoy.top/t/topic/nbuO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录