From 407f88e1854b0168153cd6ef412cb7223f4be22a Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sat, 20 Dec 2014 22:04:24 +0100 Subject: [PATCH] Fix incorrect week day calculation in LegacyTimePeriod::ParseTimeSpec fixes #6943 --- lib/icinga/legacytimeperiod.cpp | 4 ++-- lib/icinga/scheduleddowntime.cpp | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/icinga/legacytimeperiod.cpp b/lib/icinga/legacytimeperiod.cpp index fa58c100f..e2f3aa119 100644 --- a/lib/icinga/legacytimeperiod.cpp +++ b/lib/icinga/legacytimeperiod.cpp @@ -234,7 +234,7 @@ void LegacyTimePeriod::ParseTimeSpec(const String& timespec, tm *begin, tm *end, if (tokens.size() > 1) FindNthWeekday(wday, n, begin); else - begin->tm_mday += - begin->tm_wday + wday; + begin->tm_mday += (7 - begin->tm_wday + wday) % 7; begin->tm_hour = 0; begin->tm_min = 0; @@ -247,7 +247,7 @@ void LegacyTimePeriod::ParseTimeSpec(const String& timespec, tm *begin, tm *end, if (tokens.size() > 1) FindNthWeekday(wday, n, end); else - end->tm_mday += - end->tm_wday + wday; + end->tm_mday += (7 - end->tm_wday + wday) % 7; end->tm_hour = 0; end->tm_min = 0; diff --git a/lib/icinga/scheduleddowntime.cpp b/lib/icinga/scheduleddowntime.cpp index a1f9492bf..e86015ea0 100644 --- a/lib/icinga/scheduleddowntime.cpp +++ b/lib/icinga/scheduleddowntime.cpp @@ -114,11 +114,17 @@ std::pair ScheduledDowntime::FindNextSegment(void) ObjectLock olock(ranges); BOOST_FOREACH(const Dictionary::Pair& kv, ranges) { + Log(LogDebug, "ScheduledDowntime") + << "Evaluating segment: " << kv.first << ": " << kv.second << " at "; + Dictionary::Ptr segment = LegacyTimePeriod::FindNextSegment(kv.first, kv.second, &reference); if (!segment) continue; + Log(LogDebug, "ScheduledDowntime") + << "Considering segment: " << Utility::FormatDateTime("%c", segment->Get("begin")) << " -> " << Utility::FormatDateTime("%c", segment->Get("end")); + double begin = segment->Get("begin"); if (begin < now)