Fix timeperiod update bug.

This commit is contained in:
Gunnar Beutner 2013-09-19 00:01:18 +02:00
parent a10a4013c7
commit 77a945157f
1 changed files with 11 additions and 2 deletions

View File

@ -70,6 +70,8 @@ void TimePeriod::AddSegment(double begin, double end)
{ {
ASSERT(OwnsLock()); ASSERT(OwnsLock());
Log(LogDebug, "icinga", "Adding segment '" + Utility::FormatDateTime("%c", begin) + "' <-> '" + Utility::FormatDateTime("%c", end) + "' to TimePeriod '" + GetName() + "'");
if (m_ValidBegin.IsEmpty() || begin < m_ValidBegin) if (m_ValidBegin.IsEmpty() || begin < m_ValidBegin)
m_ValidBegin = begin; m_ValidBegin = begin;
@ -119,6 +121,8 @@ void TimePeriod::RemoveSegment(double begin, double end)
{ {
ASSERT(OwnsLock()); ASSERT(OwnsLock());
Log(LogDebug, "icinga", "Removing segment '" + Utility::FormatDateTime("%c", begin) + "' <-> '" + Utility::FormatDateTime("%c", end) + "' from TimePeriod '" + GetName() + "'");
if (m_ValidBegin.IsEmpty() || begin < m_ValidBegin) if (m_ValidBegin.IsEmpty() || begin < m_ValidBegin)
m_ValidBegin = begin; m_ValidBegin = begin;
@ -147,22 +151,26 @@ void TimePeriod::RemoveSegment(double begin, double end)
} }
/* Adjust the begin/end timestamps so as to not overlap with the specified range. */ /* Adjust the begin/end timestamps so as to not overlap with the specified range. */
if (segment->Get("begin") < end) if (segment->Get("begin") > begin && segment->Get("begin") < end)
segment->Set("begin", end); segment->Set("begin", end);
if (segment->Get("end") > begin) if (segment->Get("end") > begin && segment->Get("end") < end)
segment->Set("end", begin); segment->Set("end", begin);
newSegments->Add(segment); newSegments->Add(segment);
} }
m_Segments = newSegments; m_Segments = newSegments;
Dump();
} }
void TimePeriod::PurgeSegments(double end) void TimePeriod::PurgeSegments(double end)
{ {
ASSERT(OwnsLock()); ASSERT(OwnsLock());
Log(LogDebug, "icinga", "Purging segments older than '" + Utility::FormatDateTime("%c", end) + "' from TimePeriod '" + GetName() + "'");
if (m_ValidBegin.IsEmpty() || end < m_ValidBegin) if (m_ValidBegin.IsEmpty() || end < m_ValidBegin)
return; return;
@ -306,6 +314,7 @@ void TimePeriod::Dump(void)
Array::Ptr segments = m_Segments; Array::Ptr segments = m_Segments;
Log(LogDebug, "icinga", "Dumping TimePeriod '" + GetName() + "'"); Log(LogDebug, "icinga", "Dumping TimePeriod '" + GetName() + "'");
Log(LogDebug, "icinga", "Valid from '" + Utility::FormatDateTime("%c", m_ValidBegin) + "' until '" + Utility::FormatDateTime("%c", m_ValidEnd));
if (segments) { if (segments) {
ObjectLock dlock(segments); ObjectLock dlock(segments);