[icinga-checkins] icinga.org: icinga2/master: More bugfixes for timeperiods.

git at icinga.org git at icinga.org
Tue Apr 16 10:55:31 CEST 2013


Module: icinga2
Branch: master
Commit: 2e600a78107b99ca512be03e90c14f36924b4da0
URL:    https://git.icinga.org/?p=icinga2.git;a=commit;h=2e600a78107b99ca512be03e90c14f36924b4da0

Author: Gunnar Beutner <gunnar.beutner at netways.de>
Date:   Tue Apr 16 10:55:23 2013 +0200

More bugfixes for timeperiods.

---

 lib/base/dynamicobject.cpp       |    8 +++++---
 lib/icinga/icingaapplication.cpp |    2 +-
 lib/icinga/legacytimeperiod.cpp  |   37 ++++++++++++++++++-------------------
 3 files changed, 24 insertions(+), 23 deletions(-)

diff --git a/lib/base/dynamicobject.cpp b/lib/base/dynamicobject.cpp
index 1418d17..055d38e 100644
--- a/lib/base/dynamicobject.cpp
+++ b/lib/base/dynamicobject.cpp
@@ -289,10 +289,12 @@ void DynamicObject::InternalSetAttribute(const String& name, const Value& data,
 		if (!allowEditConfig && (it->second.GetType() & Attribute_Config))
 			BOOST_THROW_EXCEPTION(std::runtime_error("Config properties are immutable: '" + name + "'."));
 
-		it->second.SetValue(tx, data);
+		if (tx > it->second.GetTx()) {
+			it->second.SetValue(tx, data);
 
-		if (it->second.GetType() & Attribute_Config)
-			m_ConfigTx = tx;
+			if (it->second.GetType() & Attribute_Config)
+				m_ConfigTx = tx;
+		}
 	}
 
 	if (IsRegistered()) {
diff --git a/lib/icinga/icingaapplication.cpp b/lib/icinga/icingaapplication.cpp
index 9e5f096..5125e93 100644
--- a/lib/icinga/icingaapplication.cpp
+++ b/lib/icinga/icingaapplication.cpp
@@ -185,7 +185,7 @@ shared_ptr<SSL_CTX> IcingaApplication::GetSSLContext(void) const
 	return m_SSLContext;
 }
 
-bool IcingaApplication::ResolveMacro(const String& macro, const Dictionary::Ptr& cr, String *result) const
+bool IcingaApplication::ResolveMacro(const String& macro, const Dictionary::Ptr&, String *result) const
 {
 	double now = Utility::GetTime();
 
diff --git a/lib/icinga/legacytimeperiod.cpp b/lib/icinga/legacytimeperiod.cpp
index 5117362..8d9dae9 100644
--- a/lib/icinga/legacytimeperiod.cpp
+++ b/lib/icinga/legacytimeperiod.cpp
@@ -118,29 +118,31 @@ Array::Ptr LegacyTimePeriod::ScriptFunc(const TimePeriod::Ptr& tp, double begin,
 
 	Dictionary::Ptr ranges = tp->Get("ranges");
 
-	time_t tempts = begin;
-	tm reference;
+
+
+	if (ranges) {
+		for (int i = 0; i <= (end - begin) / (24 * 60 * 60); i++) {
+			time_t refts = begin + i * 24 * 60 * 60;
+			tm reference;
 
 #ifdef _MSC_VER
-	tm *temp = localtime(&tempts);
+			tm *temp = localtime(&refts);
 
-	if (temp == NULL) {
-		BOOST_THROW_EXCEPTION(posix_error()
-		    << boost::errinfo_api_function("localtime")
-		    << boost::errinfo_errno(errno));
-	}
+			if (temp == NULL) {
+				BOOST_THROW_EXCEPTION(posix_error()
+				    << boost::errinfo_api_function("localtime")
+				    << boost::errinfo_errno(errno));
+			}
 
-	reference = *temp;
+			reference = *temp;
 #else /* _MSC_VER */
-	if (localtime_r(&tempts, &reference) == NULL) {
-		BOOST_THROW_EXCEPTION(posix_error()
-		    << boost::errinfo_api_function("localtime_r")
-		    << boost::errinfo_errno(errno));
-	}
+			if (localtime_r(&refts, &reference) == NULL) {
+				BOOST_THROW_EXCEPTION(posix_error()
+				    << boost::errinfo_api_function("localtime_r")
+				    << boost::errinfo_errno(errno));
+			}
 #endif /* _MSC_VER */
 
-	if (ranges) {
-		for (int i = 0; i <= (end - begin) / (24 * 60 * 60); i++) {
 			ObjectLock olock(ranges);
 			String key;
 			Value value;
@@ -150,8 +152,6 @@ Array::Ptr LegacyTimePeriod::ScriptFunc(const TimePeriod::Ptr& tp, double begin,
 
 				ProcessTimeRanges(value, &reference, segments);
 			}
-
-			reference.tm_mday++;
 		}
 	}
 
@@ -159,4 +159,3 @@ Array::Ptr LegacyTimePeriod::ScriptFunc(const TimePeriod::Ptr& tp, double begin,
 
 	return segments;
 }
-





More information about the icinga-checkins mailing list