You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@skywalking.apache.org by wu...@apache.org on 2018/08/31 12:01:10 UTC
[incubator-skywalking] branch 6.0 updated: Change alarm
notification to batch mode.
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch 6.0
in repository https://gitbox.apache.org/repos/asf/incubator-skywalking.git
The following commit(s) were added to refs/heads/6.0 by this push:
new 4559c49 Change alarm notification to batch mode.
4559c49 is described below
commit 4559c49e86d12f2e62373e19868c4095ff12b421
Author: Wu Sheng <wu...@foxmail.com>
AuthorDate: Fri Aug 31 20:01:01 2018 +0800
Change alarm notification to batch mode.
---
.../oap/server/core/alarm/provider/AlarmCore.java | 16 ++++--
.../server/core/alarm/provider/RunningRule.java | 13 +++--
.../core/alarm/provider/WebhookCallback.java | 2 +-
.../core/alarm/provider/RunningRuleTest.java | 62 +++++++---------------
.../oap/server/core/alarm/AlarmCallback.java | 4 +-
.../oap/server/core/alarm/AlarmMessage.java | 5 ++
.../core/alarm/AlarmStandardPersistence.java | 4 +-
7 files changed, 50 insertions(+), 56 deletions(-)
diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmCore.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmCore.java
index 40d62bc..5d02b55 100644
--- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmCore.java
+++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/AlarmCore.java
@@ -25,6 +25,7 @@ import java.util.Map;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import org.apache.skywalking.oap.server.core.alarm.AlarmCallback;
+import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
import org.joda.time.LocalDateTime;
import org.joda.time.Minutes;
@@ -61,8 +62,9 @@ public class AlarmCore {
public void start(List<AlarmCallback> allCallbacks) {
LocalDateTime now = LocalDateTime.now();
lastExecuteTime = now;
- runningContext.values().forEach(ruleList -> ruleList.forEach(runningRule -> runningRule.start(now, allCallbacks)));
- Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() ->
+ runningContext.values().forEach(ruleList -> ruleList.forEach(runningRule -> runningRule.start(now)));
+ Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate(() -> {
+ List<AlarmMessage> alarmMessageList = new ArrayList<>(30);
runningContext.values().forEach(ruleList -> ruleList.forEach(runningRule -> {
LocalDateTime checkTime = LocalDateTime.now();
int minutes = Minutes.minutesBetween(lastExecuteTime, checkTime).getMinutes();
@@ -72,11 +74,17 @@ public class AlarmCore {
* Don't run in the first quarter per min, avoid to trigger alarm.
*/
if (checkTime.getSecondOfMinute() > 15) {
- runningRule.check();
+ AlarmMessage alarmMessage = runningRule.check();
+ if (alarmMessage != AlarmMessage.NONE) {
+ alarmMessageList.add(alarmMessage);
+ }
// Set the last execute time, and make sure the second is `00`, such as: 18:30:00
lastExecuteTime = checkTime.minusSeconds(checkTime.getSecondOfMinute());
}
}
- })), 10, 10, TimeUnit.SECONDS);
+ }));
+
+ allCallbacks.forEach(callback -> callback.doAlarm(alarmMessageList));
+ }, 10, 10, TimeUnit.SECONDS);
}
}
diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java
index e13be47..2d3d86f 100644
--- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java
+++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java
@@ -55,7 +55,6 @@ public class RunningRule {
private Window window;
private volatile boolean isStarted = false;
private volatile IndicatorValueType valueType;
- private volatile List<AlarmCallback> allCallbacks;
private Scope targetScope;
public RunningRule(AlarmRule alarmRule) {
@@ -108,8 +107,7 @@ public class RunningRule {
*
* @param current
*/
- public void start(LocalDateTime current, List<AlarmCallback> allCallbacks) {
- this.allCallbacks = allCallbacks;
+ public void start(LocalDateTime current) {
window.start(current);
isStarted = true;
}
@@ -126,7 +124,7 @@ public class RunningRule {
/**
* Check the conditions, decide to whether trigger alarm.
*/
- public void check() {
+ public AlarmMessage check() {
boolean isMatched = window.isMatch();
/**
@@ -138,7 +136,7 @@ public class RunningRule {
if (isMatched) {
counter++;
if (counter >= countThreshold && silenceCountdown < 1) {
- triggerAlarm();
+ return triggerAlarm();
} else {
silenceCountdown--;
}
@@ -148,15 +146,16 @@ public class RunningRule {
counter--;
}
}
+ return AlarmMessage.NONE;
}
/**
* Trigger alarm callbacks.
*/
- private void triggerAlarm() {
+ private AlarmMessage triggerAlarm() {
silenceCountdown = silencePeriod;
AlarmMessage message = new AlarmMessage();
- allCallbacks.forEach(callback -> callback.doAlarm(message));
+ return message;
}
/**
diff --git a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallback.java b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallback.java
index 4ec9a40..7655b42 100644
--- a/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallback.java
+++ b/oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/WebhookCallback.java
@@ -32,7 +32,7 @@ public class WebhookCallback implements AlarmCallback {
this.remoteEndpoints = remoteEndpoints;
}
- @Override public void doAlarm(AlarmMessage alarmMessage) {
+ @Override public void doAlarm(List<AlarmMessage> alarmMessage) {
}
}
diff --git a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java
index 2c1f2da..e5695c7 100644
--- a/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java
+++ b/oap-server/server-alarm-plugin/src/test/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRuleTest.java
@@ -19,6 +19,7 @@
package org.apache.skywalking.oap.server.core.alarm.provider;
import java.util.LinkedList;
+import java.util.List;
import org.apache.skywalking.oap.server.core.alarm.AlarmCallback;
import org.apache.skywalking.oap.server.core.alarm.AlarmMessage;
import org.apache.skywalking.oap.server.core.alarm.MetaInAlarm;
@@ -55,7 +56,7 @@ public class RunningRuleTest {
RunningRule runningRule = new RunningRule(alarmRule);
LocalDateTime startTime = TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301440");
- runningRule.start(startTime, new LinkedList<>());
+ runningRule.start(startTime);
RunningRule.Window window = Whitebox.getInternalState(runningRule, "window");
LocalDateTime endTime = Whitebox.getInternalState(window, "endTime");
@@ -80,15 +81,7 @@ public class RunningRuleTest {
RunningRule runningRule = new RunningRule(alarmRule);
LocalDateTime startTime = TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301440");
- final boolean[] isAlarm = {false};
- AlarmCallback assertCallback = new AlarmCallback() {
- @Override public void doAlarm(AlarmMessage alarmMessage) {
- isAlarm[0] = true;
- }
- };
- LinkedList<AlarmCallback> callbackList = new LinkedList<>();
- callbackList.add(assertCallback);
- runningRule.start(startTime, callbackList);
+ runningRule.start(startTime);
long timeInPeriod1 = 201808301434L;
long timeInPeriod2 = 201808301436L;
@@ -98,15 +91,14 @@ public class RunningRuleTest {
runningRule.in(getMetaInAlarm(), getIndicator(timeInPeriod3, 74));
// check at 201808301440
- runningRule.check();
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check());
runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
// check at 201808301441
- runningRule.check();
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check());
runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301442"));
// check at 201808301442
- runningRule.check();
+ Assert.assertNotEquals(AlarmMessage.NONE, runningRule.check());
- Assert.assertTrue(isAlarm[0]);
}
@Test
@@ -125,13 +117,13 @@ public class RunningRuleTest {
final boolean[] isAlarm = {false};
AlarmCallback assertCallback = new AlarmCallback() {
- @Override public void doAlarm(AlarmMessage alarmMessage) {
+ @Override public void doAlarm(List<AlarmMessage> alarmMessage) {
isAlarm[0] = true;
}
};
LinkedList<AlarmCallback> callbackList = new LinkedList<>();
callbackList.add(assertCallback);
- runningRule.start(startTime, callbackList);
+ runningRule.start(startTime);
long timeInPeriod1 = 201808301434L;
long timeInPeriod2 = 201808301436L;
@@ -145,15 +137,13 @@ public class RunningRuleTest {
runningRule.in(getMetaInAlarm(), getIndicator(timeInPeriod5, 95));
// check at 201808301440
- runningRule.check();
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check());
runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301442"));
// check at 201808301441
- runningRule.check();
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check());
runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301443"));
// check at 201808301442
- runningRule.check();
-
- Assert.assertFalse((boolean)isAlarm[0]);
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check());
}
@Test
@@ -170,16 +160,7 @@ public class RunningRuleTest {
RunningRule runningRule = new RunningRule(alarmRule);
LocalDateTime startTime = TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301440");
- final Object[] isAlarm = {false, 0};
- AlarmCallback assertCallback = new AlarmCallback() {
- @Override public void doAlarm(AlarmMessage alarmMessage) {
- isAlarm[0] = true;
- isAlarm[1] = (int)isAlarm[1] + 1;
- }
- };
- LinkedList<AlarmCallback> callbackList = new LinkedList<>();
- callbackList.add(assertCallback);
- runningRule.start(startTime, callbackList);
+ runningRule.start(startTime);
long timeInPeriod1 = 201808301434L;
long timeInPeriod2 = 201808301436L;
@@ -189,22 +170,19 @@ public class RunningRuleTest {
runningRule.in(getMetaInAlarm(), getIndicator(timeInPeriod3, 74));
// check at 201808301440
- runningRule.check(); //check matches, no alarm
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check()); //check matches, no alarm
runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301441"));
// check at 201808301441
- runningRule.check(); //check matches, no alarm
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check()); //check matches, no alarm
runningRule.moveTo(TIME_BUCKET_FORMATTER.parseLocalDateTime("201808301442"));
// check at 201808301442
+ Assert.assertNotEquals(AlarmMessage.NONE, runningRule.check()); //alarm
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check()); //silence, no alarm
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check()); //silence, no alarm
runningRule.check(); //alarm
- runningRule.check(); //silence, no alarm
- runningRule.check(); //silence, no alarm
- runningRule.check(); //alarm
- runningRule.check(); //silence, no alarm
- runningRule.check(); //silence, no alarm
- runningRule.check(); //alarm
-
- Assert.assertTrue((boolean)isAlarm[0]);
- Assert.assertEquals(3, (int)isAlarm[1]);
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check()); //silence, no alarm
+ Assert.assertEquals(AlarmMessage.NONE, runningRule.check()); //silence, no alarm
+ Assert.assertNotEquals(AlarmMessage.NONE, runningRule.check()); //alarm
}
private MetaInAlarm getMetaInAlarm() {
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmCallback.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmCallback.java
index 80a6193..784d8f2 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmCallback.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmCallback.java
@@ -18,6 +18,8 @@
package org.apache.skywalking.oap.server.core.alarm;
+import java.util.List;
+
/**
* Alarm call back will be called by alarm implementor,
* after it decided alarm should be sent.
@@ -25,5 +27,5 @@ package org.apache.skywalking.oap.server.core.alarm;
* @author wusheng
*/
public interface AlarmCallback {
- void doAlarm(AlarmMessage alarmMessage);
+ void doAlarm(List<AlarmMessage> alarmMessage);
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java
index f7cf355..7a8f28e 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmMessage.java
@@ -30,4 +30,9 @@ import lombok.Setter;
@Setter(AccessLevel.PUBLIC)
@Getter(AccessLevel.PUBLIC)
public class AlarmMessage {
+ public static AlarmMessage NONE = new NoAlarm();
+
+ private static class NoAlarm extends AlarmMessage {
+
+ }
}
diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java
index 4a695ee..0f3037b 100644
--- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java
+++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/alarm/AlarmStandardPersistence.java
@@ -18,11 +18,13 @@
package org.apache.skywalking.oap.server.core.alarm;
+import java.util.List;
+
/**
* Save the alarm info into storage for UI query.
*/
public class AlarmStandardPersistence implements AlarmCallback {
- @Override public void doAlarm(AlarmMessage alarmMessage) {
+ @Override public void doAlarm(List<AlarmMessage> alarmMessage) {
//TODO Peng-yongsheng
/**
* This is just a callback entrance.