wankai123 commented on code in PR #13539:
URL: https://github.com/apache/skywalking/pull/13539#discussion_r2501473417


##########
oap-server/server-alarm-plugin/src/main/java/org/apache/skywalking/oap/server/core/alarm/provider/RunningRule.java:
##########
@@ -214,59 +219,59 @@ public List<AlarmMessage> check() {
         windows.forEach((alarmEntity, window) -> {
             if (window.isExpired()) {
                 expiredEntityList.add(alarmEntity);
-                return;
+                if (log.isTraceEnabled()) {
+                    log.trace("RuleName:{} AlarmEntity {} {} {} expired", 
ruleName, alarmEntity.getName(),
+                            alarmEntity.getId0(), alarmEntity.getId1());
+                }
             }
 
             Optional<AlarmMessage> alarmMessageOptional = window.checkAlarm();
-            if (alarmMessageOptional.isPresent()) {
-                AlarmMessage alarmMessage = alarmMessageOptional.get();
-                alarmMessage.setScopeId(alarmEntity.getScopeId());
-                alarmMessage.setScope(alarmEntity.getScope());
-                alarmMessage.setName(alarmEntity.getName());
-                alarmMessage.setId0(alarmEntity.getId0());
-                alarmMessage.setId1(alarmEntity.getId1());
-                alarmMessage.setRuleName(this.ruleName);
-                alarmMessage.setAlarmMessage(formatter.format(alarmEntity));
-                alarmMessage.setStartTime(System.currentTimeMillis());
-                alarmMessage.setPeriod(this.period);
-                alarmMessage.setTags(this.tags);
-                alarmMessage.setHooks(this.hooks);
-                alarmMessage.setExpression(expression);
-                alarmMessage.setMqeMetricsSnapshot(window.mqeMetricsSnapshot);
-                alarmMessageList.add(alarmMessage);
-            }
+            alarmMessageOptional.ifPresent(alarmMessageList::add);
         });
 
         expiredEntityList.forEach(windows::remove);
         return alarmMessageList;
     }
 
+    public enum State {
+        NORMAL,
+        FIRING,
+        SILENCED,
+        OBSERVING_RECOVERY,
+        RECOVERED
+    }
+
     /**
      * A metrics window, based on AlarmRule#period. This window slides with 
time, just keeps the recent N(period)
      * buckets.
      */
     public class Window {
+
         @Getter
         private LocalDateTime endTime;
         @Getter
         private final int additionalPeriod;
         @Getter
         private final int size;
         @Getter
-        private int silenceCountdown;
+        private final int period;
+        @Getter
+        private final AlarmStateMachine stateMachine;
         private LinkedList<Map<String, Metrics>> values;
         private ReentrantLock lock = new ReentrantLock();
+        private AlarmMessage lastAlarmMessage;
         @Getter
         private JsonObject mqeMetricsSnapshot;
         private AlarmEntity entity;
 
-        public Window(AlarmEntity entity, int period, int additionalPeriod) {
+        public Window(AlarmEntity entity, int period, int silencePeriod, int 
recoveryObservationPeriod,
+                      int additionalPeriod) {
             this.entity = entity;
             this.additionalPeriod = additionalPeriod;
-            this.size = period + additionalPeriod;
-            // -1 means silence countdown is not running.
-            silenceCountdown = -1;
-            init();
+            this.size = period + additionalPeriod + Math.max(silencePeriod, 
recoveryObservationPeriod);

Review Comment:
   Could you explain why you have to change the window size?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to