Browse Source

Improved scheduler logic

pull/3576/head
Andrii Shvaika 6 years ago
parent
commit
3ae7957a0e
  1. 18
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmRuleState.java

18
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmRuleState.java

@ -165,9 +165,7 @@ class AlarmRuleState {
return false;
}
}
long startOfDay = zdt.toLocalDate().atStartOfDay(zoneId).toInstant().toEpochMilli();
long msFromStartOfDay = eventTs - startOfDay;
return schedule.getStartsOn() <= msFromStartOfDay && schedule.getEndsOn() > msFromStartOfDay;
return isActive(eventTs, zoneId, zdt, schedule.getStartsOn(), schedule.getEndsOn());
}
private boolean isActiveCustom(CustomTimeSchedule schedule, long eventTs) {
@ -177,9 +175,7 @@ class AlarmRuleState {
for (CustomTimeScheduleItem item : schedule.getItems()) {
if (item.getDayOfWeek() == dayOfWeek) {
if (item.isEnabled()) {
long startOfDay = zdt.toLocalDate().atStartOfDay(zoneId).toInstant().toEpochMilli();
long msFromStartOfDay = eventTs - startOfDay;
return item.getStartsOn() <= msFromStartOfDay && item.getEndsOn() > msFromStartOfDay;
return isActive(eventTs, zoneId, zdt, item.getStartsOn(), item.getEndsOn());
} else {
return false;
}
@ -188,6 +184,16 @@ class AlarmRuleState {
return false;
}
private boolean isActive(long eventTs, ZoneId zoneId, ZonedDateTime zdt, long startsOn, long endsOn) {
long startOfDay = zdt.toLocalDate().atStartOfDay(zoneId).toInstant().toEpochMilli();
long msFromStartOfDay = eventTs - startOfDay;
if (startsOn <= endsOn) {
return startsOn <= msFromStartOfDay && endsOn > msFromStartOfDay;
} else {
return startsOn < msFromStartOfDay || (0 < msFromStartOfDay && msFromStartOfDay < endsOn);
}
}
public void clear() {
if (state.getEventCount() > 0 || state.getLastEventTs() > 0 || state.getDuration() > 0) {
state.setEventCount(0L);

Loading…
Cancel
Save