From 153b640b6828efe610ac8563304edab236ba6635 Mon Sep 17 00:00:00 2001 From: "leon.li" Date: Thu, 12 Jun 2014 18:05:31 +0800 Subject: [PATCH] add 2 new RuleType for fluctuate case --- .../cat/report/task/alert/RuleType.java | 106 +++++++++++++++++- .../cat/report/alert/RuleConfigTest.java | 4 +- .../resources/config/demo-rule-monitor.xml | 6 +- 3 files changed, 107 insertions(+), 9 deletions(-) diff --git a/cat-home/src/main/java/com/dianping/cat/report/task/alert/RuleType.java b/cat-home/src/main/java/com/dianping/cat/report/task/alert/RuleType.java index e581dd095..e46264fd5 100644 --- a/cat-home/src/main/java/com/dianping/cat/report/task/alert/RuleType.java +++ b/cat-home/src/main/java/com/dianping/cat/report/task/alert/RuleType.java @@ -191,7 +191,7 @@ public enum RuleType { } }, - absoluteMaxValue { + AbsoluteMaxValue { @Override protected String buildRuleMessage(double[] values, double[] baselines, double ruleValue) { StringBuilder sb = new StringBuilder(); @@ -223,7 +223,7 @@ public enum RuleType { } }, - absoluteMinValue { + AbsoluteMinValue { @Override protected String buildRuleMessage(double[] values, double[] baselines, double ruleValue) { StringBuilder sb = new StringBuilder(); @@ -253,6 +253,108 @@ public enum RuleType { public String getId() { return "MinVal"; } + }, + + FluctuateIncreasePercentage { + private double[] buildFlucAscPers(double[] values) { + int length = values.length; + double[] ascPers = new double[length - 1]; + double baseVal = values[length - 1]; + + for (int i = 0; i <= length - 2; i++) { + ascPers[i] = (baseVal / values[i] - 1) * 100; + } + + return ascPers; + } + + @Override + protected String buildRuleMessage(double[] values, double[] baselines, double ruleValue) { + StringBuilder sb = new StringBuilder(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + sb.append("[实际值:").append(convertDoublesToString(values)).append("] "); + sb.append("[波动上升百分比:").append(convertPercentsToString(buildFlucAscPers(values))).append("] "); + sb.append("[波动上升百分比阈值: " + m_df.format(ruleValue) + "% ]"); + sb.append("[告警时间:").append(sdf.format(new Date()) + "]"); + + return sb.toString(); + } + + @Override + public Pair executeRule(double[] values, double[] baselines, double ruleValue) { + int length = values.length; + + if (length <= 1) { + return new Pair(false, ""); + } + + double baseVal = values[length - 1]; + + for (int i = 0; i <= length - 2; i++) { + if (baseVal / values[i] - 1 < ruleValue / 100) { + return new Pair(false, ""); + } + } + + return new Pair(true, buildRuleMessage(values, baselines, ruleValue)); + } + + @Override + public String getId() { + return "FluAscPer"; + } + }, + + FluctuateDecreasePercentage { + private double[] buildFlucDescPers(double[] values) { + int length = values.length; + double[] descPers = new double[length - 1]; + double baseVal = values[length - 1]; + + for (int i = 0; i <= length - 2; i++) { + descPers[i] = (1 - baseVal / values[i]) * 100; + } + + return descPers; + } + + @Override + protected String buildRuleMessage(double[] values, double[] baselines, double ruleValue) { + StringBuilder sb = new StringBuilder(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + sb.append("[实际值:").append(convertDoublesToString(values)).append("] "); + sb.append("[波动下降百分比:").append(convertPercentsToString(buildFlucDescPers(values))).append("] "); + sb.append("[波动下降百分比阈值: " + m_df.format(ruleValue) + "% ]"); + sb.append("[告警时间:").append(sdf.format(new Date()) + "]"); + + return sb.toString(); + } + + @Override + public Pair executeRule(double[] values, double[] baselines, double ruleValue) { + int length = values.length; + + if (length <= 1) { + return new Pair(false, ""); + } + + double baseVal = values[length - 1]; + + for (int i = 0; i <= length - 2; i++) { + if (1 - baseVal / values[i] < ruleValue / 100) { + return new Pair(false, ""); + } + } + + return new Pair(true, buildRuleMessage(values, baselines, ruleValue)); + } + + @Override + public String getId() { + return "FluDescPer"; + } }; static Map s_map = new LinkedHashMap(); diff --git a/cat-home/src/test/java/com/dianping/cat/report/alert/RuleConfigTest.java b/cat-home/src/test/java/com/dianping/cat/report/alert/RuleConfigTest.java index 14ecdf4e6..92b405886 100644 --- a/cat-home/src/test/java/com/dianping/cat/report/alert/RuleConfigTest.java +++ b/cat-home/src/test/java/com/dianping/cat/report/alert/RuleConfigTest.java @@ -51,8 +51,8 @@ public class RuleConfigTest { Assert.assertNotNull(configMap); - double baseline[] = { 200, 200 }; - double value[] = { 100, 100 }; + double baseline[] = { 200, 350 }; + double value[] = { 100, 50 }; Pair result = m_check.checkData(value, baseline, configMap.get("demo1")); Assert.assertEquals(result.getKey().booleanValue(), true); } diff --git a/cat-home/src/test/resources/config/demo-rule-monitor.xml b/cat-home/src/test/resources/config/demo-rule-monitor.xml index 99aca448e..8e7ef4d09 100644 --- a/cat-home/src/test/resources/config/demo-rule-monitor.xml +++ b/cat-home/src/test/resources/config/demo-rule-monitor.xml @@ -9,11 +9,7 @@ - 40 - 40 - - - 200 + 50 -- GitLab