]> granicus.if.org Git - icinga2/commitdiff
ido: Use relative timestamps for the timeranges.
authorGunnar Beutner <gunnar.beutner@netways.de>
Fri, 9 Aug 2013 09:07:55 +0000 (11:07 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Fri, 9 Aug 2013 09:07:55 +0000 (11:07 +0200)
lib/icinga/legacytimeperiod.cpp
lib/icinga/legacytimeperiod.h
lib/ido/timeperioddbobject.cpp

index 67d4d01566da9f1dbf07fb35200601aa576edea8..f88acc3aec00b841f0f90868ec2247273af13942 100644 (file)
@@ -329,7 +329,7 @@ bool LegacyTimePeriod::IsInDayDefinition(const String& daydef, tm *reference)
        return IsInTimeRange(&begin, &end, stride, reference);
 }
 
-Dictionary::Ptr LegacyTimePeriod::ProcessTimeRange(const String& timerange, tm *reference)
+void LegacyTimePeriod::ProcessTimeRangeRaw(const String& timerange, tm *reference, tm *begin, tm *end)
 {
        std::vector<String> times;
 
@@ -349,22 +349,24 @@ Dictionary::Ptr LegacyTimePeriod::ProcessTimeRange(const String& timerange, tm *
        if (hd2.size() != 2)
                BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid time specification: " + times[1]));
 
-       tm begin, end;
-
-       begin = *reference;
-       begin.tm_sec = 0;
-       begin.tm_min = Convert::ToLong(hd1[1]);
-       begin.tm_hour = Convert::ToLong(hd1[0]);
+       *begin = *reference;
+       begin->tm_sec = 0;
+       begin->tm_min = Convert::ToLong(hd1[1]);
+       begin->tm_hour = Convert::ToLong(hd1[0]);
 
-       end = *reference;
-       end.tm_sec = 0;
-       end.tm_min = Convert::ToLong(hd2[1]);
-       end.tm_hour = Convert::ToLong(hd2[0]);
+       *end = *reference;
+       end->tm_sec = 0;
+       end->tm_min = Convert::ToLong(hd2[1]);
+       end->tm_hour = Convert::ToLong(hd2[0]);
+}
 
+Dictionary::Ptr LegacyTimePeriod::ProcessTimeRange(const String& timestamp, tm *reference)
+{
+       tm begin, end;
+       ProcessTimeRangeRaw(timestamp, reference, &begin, &end);
        Dictionary::Ptr segment = boost::make_shared<Dictionary>();
        segment->Set("begin", (long)mktime(&begin));
        segment->Set("end", (long)mktime(&end));
-
        return segment;
 }
 
index 131961fa3e807b560f401b5bc6f18d344cd041b0..5ccd84c0027f930ef7ed87c03f8a6a279a1ca191 100644 (file)
@@ -44,6 +44,7 @@ public:
        static void ParseTimeSpec(const String& timespec, tm *begin, tm *end, tm *reference);
        static void ParseTimeRange(const String& timerange, tm *begin, tm *end, int *stride, tm *reference);
        static bool IsInDayDefinition(const String& daydef, tm *reference);
+       static void ProcessTimeRangeRaw(const String& timerange, tm *reference, tm *begin, tm *end);
        static Dictionary::Ptr ProcessTimeRange(const String& timerange, tm *reference);
        static void ProcessTimeRanges(const String& timeranges, tm *reference, const Array::Ptr& result);
 
index 83c5e8a9fa4503fdc6410643f2b6e5800e478673..47f86798a6154855f809c029d11b21194354312a 100644 (file)
@@ -97,12 +97,7 @@ void TimePeriodDbObject::OnConfigUpdate(void)
 #endif /* _MSC_VER */
 
                tm begin, end;
-               int stride;
-
-               LegacyTimePeriod::ParseTimeRange(key, &begin, &end, &stride, &reference);
-
-               if (stride != 1)
-                       continue;
+               LegacyTimePeriod::ProcessTimeRangeRaw(value, &reference, &begin, &end);
 
                DbQuery query;
                query.Table = GetType()->GetTable() + "_timeranges";
@@ -111,8 +106,8 @@ void TimePeriodDbObject::OnConfigUpdate(void)
                query.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
                query.Fields->Set("timeperiod_id", DbValue::FromObjectInsertID(tp));
                query.Fields->Set("day", wday);
-               query.Fields->Set("start_sec", mktime(&begin));
-               query.Fields->Set("end_sec", mktime(&end));
+               query.Fields->Set("start_sec", begin.tm_hour * 3600 + begin.tm_min * 60 + begin.tm_sec);
+               query.Fields->Set("end_sec", end.tm_hour * 3600 + end.tm_min * 60 + end.tm_sec);
                OnQuery(query);
        }
 }