mirror of
				https://github.com/Icinga/icinga2.git
				synced 2025-10-31 19:24:25 +01:00 
			
		
		
		
	
							parent
							
								
									b6220c6ecf
								
							
						
					
					
						commit
						f05858d3ad
					
				| @ -1401,13 +1401,11 @@ void ClusterListener::MessageHandler(const Endpoint::Ptr& sender, const Dictiona | |||||||
| 		if (localConfig->GetLength() != remoteConfig->GetLength()) | 		if (localConfig->GetLength() != remoteConfig->GetLength()) | ||||||
| 			configChange = true; | 			configChange = true; | ||||||
| 
 | 
 | ||||||
| 		String key; |  | ||||||
| 		Value value; |  | ||||||
| 		ObjectLock olock(remoteConfig); | 		ObjectLock olock(remoteConfig); | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), remoteConfig) { | 		BOOST_FOREACH(const Dictionary::Pair& kv, remoteConfig) { | ||||||
| 			Dictionary::Ptr remoteFile = value; | 			Dictionary::Ptr remoteFile = kv.second; | ||||||
| 			bool writeFile = false; | 			bool writeFile = false; | ||||||
| 			String hash = SHA256(key); | 			String hash = SHA256(kv.first); | ||||||
| 			String path = dir + "/" + hash; | 			String path = dir + "/" + hash; | ||||||
| 			 | 			 | ||||||
| 			if (!localConfig->Contains(hash)) | 			if (!localConfig->Contains(hash)) | ||||||
| @ -1437,8 +1435,8 @@ void ClusterListener::MessageHandler(const Endpoint::Ptr& sender, const Dictiona | |||||||
| 		olock.Unlock(); | 		olock.Unlock(); | ||||||
| 
 | 
 | ||||||
| 		ObjectLock olock2(localConfig); | 		ObjectLock olock2(localConfig); | ||||||
| 		BOOST_FOREACH(boost::tie(key, boost::tuples::ignore), localConfig) { | 		BOOST_FOREACH(const Dictionary::Pair& kv, localConfig) { | ||||||
| 			String path = dir + "/" + key; | 			String path = dir + "/" + kv.first; | ||||||
| 			Log(LogInformation, "cluster", "Removing obsolete config file: " + path); | 			Log(LogInformation, "cluster", "Removing obsolete config file: " + path); | ||||||
| 			(void) unlink(path.CStr()); | 			(void) unlink(path.CStr()); | ||||||
| 			configChange = true; | 			configChange = true; | ||||||
|  | |||||||
| @ -71,9 +71,9 @@ void StatusDataWriter::DumpComments(std::ostream& fp, const Service::Ptr& owner, | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(comments); | 	ObjectLock olock(comments); | ||||||
| 
 | 
 | ||||||
| 	String id; | 	BOOST_FOREACH(const Dictionary::Pair& kv, comments) { | ||||||
| 	Comment::Ptr comment; | 		Comment::Ptr comment = kv.second; | ||||||
| 	BOOST_FOREACH(boost::tie(id, comment), comments) { | 
 | ||||||
| 		if (comment->IsExpired()) | 		if (comment->IsExpired()) | ||||||
| 			continue; | 			continue; | ||||||
| 
 | 
 | ||||||
| @ -107,10 +107,8 @@ void StatusDataWriter::DumpTimePeriod(std::ostream& fp, const TimePeriod::Ptr& t | |||||||
| 
 | 
 | ||||||
| 	if (ranges) { | 	if (ranges) { | ||||||
| 		ObjectLock olock(ranges); | 		ObjectLock olock(ranges); | ||||||
| 		String key; | 		BOOST_FOREACH(const Dictionary::Pair& kv, ranges) { | ||||||
| 		Value value; | 			fp << "\t" << kv.first << "\t" << kv.second << "\n"; | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), ranges) { |  | ||||||
| 			fp << "\t" << key << "\t" << value << "\n"; |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -167,9 +165,9 @@ void StatusDataWriter::DumpDowntimes(std::ostream& fp, const Service::Ptr& owner | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(downtimes); | 	ObjectLock olock(downtimes); | ||||||
| 
 | 
 | ||||||
| 	String id; | 	BOOST_FOREACH(const Dictionary::Pair& kv, downtimes) { | ||||||
| 	Downtime::Ptr downtime; | 		Downtime::Ptr downtime = kv.second; | ||||||
| 	BOOST_FOREACH(boost::tie(id, downtime), downtimes) { | 
 | ||||||
| 		if (downtime->IsExpired()) | 		if (downtime->IsExpired()) | ||||||
| 			continue; | 			continue; | ||||||
| 
 | 
 | ||||||
| @ -518,16 +516,14 @@ void StatusDataWriter::DumpCustomAttributes(std::ostream& fp, const DynamicObjec | |||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(custom); | 	ObjectLock olock(custom); | ||||||
| 	String key; | 	BOOST_FOREACH(const Dictionary::Pair& kv, custom) { | ||||||
| 	Value value; |  | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), custom) { |  | ||||||
| 		fp << "\t"; | 		fp << "\t"; | ||||||
| 
 | 
 | ||||||
| 		if (key != "notes" && key != "action_url" && key != "notes_url" && | 		if (kv.first != "notes" && kv.first != "action_url" && kv.first != "notes_url" && | ||||||
| 		    key != "icon_image" && key != "icon_image_alt" && key != "statusmap_image" && "2d_coords") | 		    kv.first != "icon_image" && kv.first != "icon_image_alt" && kv.first != "statusmap_image" && kv.first != "2d_coords") | ||||||
| 			fp << "_"; | 			fp << "_"; | ||||||
| 
 | 
 | ||||||
| 		fp << key << "\t" << value << "\n"; | 		fp << kv.first << "\t" << kv.second << "\n"; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -485,18 +485,17 @@ void IdoMysqlConnection::InternalExecuteQuery(const DbQuery& query) | |||||||
| 		where << " WHERE "; | 		where << " WHERE "; | ||||||
| 
 | 
 | ||||||
| 		ObjectLock olock(query.WhereCriteria); | 		ObjectLock olock(query.WhereCriteria); | ||||||
| 		String key; |  | ||||||
| 		Value value; | 		Value value; | ||||||
| 		bool first = true; | 		bool first = true; | ||||||
| 
 | 
 | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), query.WhereCriteria) { | 		BOOST_FOREACH(const Dictionary::Pair& kv, query.WhereCriteria) { | ||||||
| 			if (!FieldToEscapedString(key, value, &value)) | 			if (!FieldToEscapedString(kv.first, kv.second, &value)) | ||||||
| 				return; | 				return; | ||||||
| 
 | 
 | ||||||
| 			if (!first) | 			if (!first) | ||||||
| 				where << " AND "; | 				where << " AND "; | ||||||
| 
 | 
 | ||||||
| 			where << key << " = " << value; | 			where << kv.first << " = " << value; | ||||||
| 
 | 
 | ||||||
| 			if (first) | 			if (first) | ||||||
| 				first = false; | 				first = false; | ||||||
| @ -537,31 +536,30 @@ void IdoMysqlConnection::InternalExecuteQuery(const DbQuery& query) | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (type == DbQueryInsert || type == DbQueryUpdate) { | 	if (type == DbQueryInsert || type == DbQueryUpdate) { | ||||||
| 		String cols; | 		std::ostringstream colbuf, valbuf; | ||||||
| 		String values; |  | ||||||
| 
 | 
 | ||||||
| 		ObjectLock olock(query.Fields); | 		ObjectLock olock(query.Fields); | ||||||
| 
 | 
 | ||||||
| 		String key; |  | ||||||
| 		Value value; |  | ||||||
| 		bool first = true; | 		bool first = true; | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), query.Fields) { | 		BOOST_FOREACH(const Dictionary::Pair& kv, query.Fields) { | ||||||
| 			if (!FieldToEscapedString(key, value, &value)) | 			Value value; | ||||||
|  | 
 | ||||||
|  | 			if (!FieldToEscapedString(kv.first, kv.second, &value)) | ||||||
| 				return; | 				return; | ||||||
| 
 | 
 | ||||||
| 			if (type == DbQueryInsert) { | 			if (type == DbQueryInsert) { | ||||||
| 				if (!first) { | 				if (!first) { | ||||||
| 					cols += ", "; | 					colbuf << ", "; | ||||||
| 					values += ", "; | 					valbuf << ", "; | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				cols += key; | 				colbuf << kv.first; | ||||||
| 				values += value; | 				valbuf << value; | ||||||
| 			} else { | 			} else { | ||||||
| 				if (!first) | 				if (!first) | ||||||
| 					qbuf << ", "; | 					qbuf << ", "; | ||||||
| 
 | 
 | ||||||
| 				qbuf << " " << key << " = " << value; | 				qbuf << " " << kv.first << " = " << value; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			if (first) | 			if (first) | ||||||
| @ -569,7 +567,7 @@ void IdoMysqlConnection::InternalExecuteQuery(const DbQuery& query) | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (type == DbQueryInsert) | 		if (type == DbQueryInsert) | ||||||
| 			qbuf << " (" << cols << ") VALUES (" << values << ")"; | 			qbuf << " (" << colbuf.str() << ") VALUES (" << valbuf.str() << ")"; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (type != DbQueryInsert) | 	if (type != DbQueryInsert) | ||||||
|  | |||||||
| @ -501,18 +501,17 @@ void IdoPgsqlConnection::InternalExecuteQuery(const DbQuery& query) | |||||||
| 		where << " WHERE "; | 		where << " WHERE "; | ||||||
| 
 | 
 | ||||||
| 		ObjectLock olock(query.WhereCriteria); | 		ObjectLock olock(query.WhereCriteria); | ||||||
| 		String key; |  | ||||||
| 		Value value; | 		Value value; | ||||||
| 		bool first = true; | 		bool first = true; | ||||||
| 
 | 
 | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), query.WhereCriteria) { | 		BOOST_FOREACH(const Dictionary::Pair& kv, query.WhereCriteria) { | ||||||
| 			if (!FieldToEscapedString(key, value, &value)) | 			if (!FieldToEscapedString(kv.first, kv.second, &value)) | ||||||
| 				return; | 				return; | ||||||
| 
 | 
 | ||||||
| 			if (!first) | 			if (!first) | ||||||
| 				where << " AND "; | 				where << " AND "; | ||||||
| 
 | 
 | ||||||
| 			where << key << " = " << value; | 			where << kv.first << " = " << value; | ||||||
| 
 | 
 | ||||||
| 			if (first) | 			if (first) | ||||||
| 				first = false; | 				first = false; | ||||||
| @ -553,31 +552,29 @@ void IdoPgsqlConnection::InternalExecuteQuery(const DbQuery& query) | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (type == DbQueryInsert || type == DbQueryUpdate) { | 	if (type == DbQueryInsert || type == DbQueryUpdate) { | ||||||
| 		String cols; | 		std::ostringstream colbuf, valbuf; | ||||||
| 		String values; |  | ||||||
| 
 | 
 | ||||||
| 		ObjectLock olock(query.Fields); | 		ObjectLock olock(query.Fields); | ||||||
| 
 | 
 | ||||||
| 		String key; |  | ||||||
| 		Value value; | 		Value value; | ||||||
| 		bool first = true; | 		bool first = true; | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), query.Fields) { | 		BOOST_FOREACH(const Dictionary::Pair& kv, query.Fields) { | ||||||
| 			if (!FieldToEscapedString(key, value, &value)) | 			if (!FieldToEscapedString(kv.first, kv.second, &value)) | ||||||
| 				return; | 				return; | ||||||
| 
 | 
 | ||||||
| 			if (type == DbQueryInsert) { | 			if (type == DbQueryInsert) { | ||||||
| 				if (!first) { | 				if (!first) { | ||||||
| 					cols += ", "; | 					colbuf << ", "; | ||||||
| 					values += ", "; | 					valbuf << ", "; | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				cols += key; | 				colbuf << kv.first; | ||||||
| 				values += value; | 				valbuf << value; | ||||||
| 			} else { | 			} else { | ||||||
| 				if (!first) | 				if (!first) | ||||||
| 					qbuf << ", "; | 					qbuf << ", "; | ||||||
| 
 | 
 | ||||||
| 				qbuf << " " << key << " = " << value; | 				qbuf << " " << kv.first << " = " << value; | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			if (first) | 			if (first) | ||||||
| @ -585,7 +582,7 @@ void IdoPgsqlConnection::InternalExecuteQuery(const DbQuery& query) | |||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (type == DbQueryInsert) | 		if (type == DbQueryInsert) | ||||||
| 			qbuf << " (" << cols << ") VALUES (" << values << ")"; | 			qbuf << " (" << colbuf.str() << ") VALUES (" << valbuf.str() << ")"; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (type != DbQueryInsert) | 	if (type != DbQueryInsert) | ||||||
|  | |||||||
| @ -107,17 +107,16 @@ void GraphiteWriter::CheckResultHandler(const Service::Ptr& service, const Check | |||||||
| 
 | 
 | ||||||
| 	Dictionary::Ptr perfdata = pdv; | 	Dictionary::Ptr perfdata = pdv; | ||||||
| 
 | 
 | ||||||
| 	String key; | 	ObjectLock olock(perfdata); | ||||||
| 	Value value; | 	BOOST_FOREACH(const Dictionary::Pair& kv, perfdata) { | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), perfdata) { |  | ||||||
| 		double valueNum; | 		double valueNum; | ||||||
| 
 | 
 | ||||||
| 		if (!value.IsObjectType<PerfdataValue>()) | 		if (!kv.second.IsObjectType<PerfdataValue>()) | ||||||
| 			valueNum = value; | 			valueNum = kv.second; | ||||||
| 		else | 		else | ||||||
| 			valueNum = static_cast<PerfdataValue::Ptr>(value)->GetValue(); | 			valueNum = static_cast<PerfdataValue::Ptr>(kv.second)->GetValue(); | ||||||
| 
 | 
 | ||||||
| 		String escaped_key = key; | 		String escaped_key = kv.first; | ||||||
| 		SanitizeMetric(escaped_key); | 		SanitizeMetric(escaped_key); | ||||||
| 		boost::algorithm::replace_all(escaped_key, "::", "."); | 		boost::algorithm::replace_all(escaped_key, "::", "."); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -21,7 +21,6 @@ | |||||||
| #include "base/objectlock.h" | #include "base/objectlock.h" | ||||||
| #include "base/debug.h" | #include "base/debug.h" | ||||||
| #include <cJSON.h> | #include <cJSON.h> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/make_shared.hpp> | #include <boost/make_shared.hpp> | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| @ -211,10 +210,8 @@ Dictionary::Ptr Dictionary::ShallowClone(void) const | |||||||
| 
 | 
 | ||||||
| 	Dictionary::Ptr clone = make_shared<Dictionary>(); | 	Dictionary::Ptr clone = make_shared<Dictionary>(); | ||||||
| 
 | 
 | ||||||
| 	String key; | 	BOOST_FOREACH(const Dictionary::Pair& kv, m_Data) { | ||||||
| 	Value value; | 		clone->Set(kv.first, kv.second); | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), m_Data) { |  | ||||||
| 		clone->Set(key, value); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return clone; | 	return clone; | ||||||
| @ -252,10 +249,8 @@ cJSON *Dictionary::ToJson(void) const | |||||||
| 	try { | 	try { | ||||||
| 		ObjectLock olock(this); | 		ObjectLock olock(this); | ||||||
| 
 | 
 | ||||||
| 		String key; | 		BOOST_FOREACH(const Dictionary::Pair& kv, m_Data) { | ||||||
| 		Value value; | 			cJSON_AddItemToObject(json, kv.first.CStr(), kv.second.ToJson()); | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), m_Data) { |  | ||||||
| 			cJSON_AddItemToObject(json, key.CStr(), value.ToJson()); |  | ||||||
| 		} | 		} | ||||||
| 	} catch (...) { | 	} catch (...) { | ||||||
| 		cJSON_Delete(json); | 		cJSON_Delete(json); | ||||||
|  | |||||||
| @ -43,6 +43,8 @@ public: | |||||||
| 	 */ | 	 */ | ||||||
| 	typedef std::map<String, Value>::iterator Iterator; | 	typedef std::map<String, Value>::iterator Iterator; | ||||||
| 
 | 
 | ||||||
|  | 	typedef std::pair<String, Value> Pair; | ||||||
|  | 
 | ||||||
| 	Value Get(const char *key) const; | 	Value Get(const char *key) const; | ||||||
| 	Value Get(const String& key) const; | 	Value Get(const String& key) const; | ||||||
| 	void Set(const String& key, const Value& value); | 	void Set(const String& key, const Value& value); | ||||||
|  | |||||||
| @ -24,7 +24,6 @@ | |||||||
| #include "base/logger_fwd.h" | #include "base/logger_fwd.h" | ||||||
| #include "base/utility.h" | #include "base/utility.h" | ||||||
| #include <boost/bind.hpp> | #include <boost/bind.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/make_shared.hpp> | #include <boost/make_shared.hpp> | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| #include <boost/thread/thread.hpp> | #include <boost/thread/thread.hpp> | ||||||
| @ -92,12 +91,10 @@ ProcessResult Process::Run(void) | |||||||
| 	if (m_ExtraEnvironment) { | 	if (m_ExtraEnvironment) { | ||||||
| 		ObjectLock olock(m_ExtraEnvironment); | 		ObjectLock olock(m_ExtraEnvironment); | ||||||
| 
 | 
 | ||||||
| 		String key; |  | ||||||
| 		Value value; |  | ||||||
| 		int index = envc; | 		int index = envc; | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), m_ExtraEnvironment) { | 		BOOST_FOREACH(const Dictionary::Pair& kv, m_ExtraEnvironment) { | ||||||
| 			String kv = key + "=" + Convert::ToString(value); | 			String skv = kv.first + "=" + Convert::ToString(kv.second); | ||||||
| 			envp[index] = strdup(kv.CStr()); | 			envp[index] = strdup(skv.CStr()); | ||||||
| 			index++; | 			index++; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -27,7 +27,6 @@ | |||||||
| #include <boost/thread/mutex.hpp> | #include <boost/thread/mutex.hpp> | ||||||
| #include <boost/signals2.hpp> | #include <boost/signals2.hpp> | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| 
 | 
 | ||||||
| namespace icinga | namespace icinga | ||||||
| { | { | ||||||
| @ -87,9 +86,10 @@ public: | |||||||
| 			items = m_Items; | 			items = m_Items; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		String name; | 		typedef typename std::pair<String, T> ItemMapPair; | ||||||
| 		BOOST_FOREACH(boost::tie(name, boost::tuples::ignore), items) { | 
 | ||||||
| 			OnUnregistered(name); | 		BOOST_FOREACH(const ItemMapPair& kv, items) { | ||||||
|  | 			OnUnregistered(kv.first); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		{ | 		{ | ||||||
|  | |||||||
| @ -22,7 +22,6 @@ | |||||||
| #include "base/application.h" | #include "base/application.h" | ||||||
| #include "base/objectlock.h" | #include "base/objectlock.h" | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <cJSON.h> | #include <cJSON.h> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -90,10 +89,8 @@ static Dictionary::Ptr SerializeDictionary(const Dictionary::Ptr& input, int att | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(input); | 	ObjectLock olock(input); | ||||||
| 
 | 
 | ||||||
| 	String key; | 	BOOST_FOREACH(const Dictionary::Pair& kv, input) { | ||||||
| 	Value value; | 		result->Set(kv.first, Serialize(kv.second, attributeTypes)); | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), input) { |  | ||||||
| 		result->Set(key, Serialize(value, attributeTypes)); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return result; | 	return result; | ||||||
| @ -140,10 +137,8 @@ static Dictionary::Ptr DeserializeDictionary(const Dictionary::Ptr& input, int a | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(input); | 	ObjectLock olock(input); | ||||||
| 
 | 
 | ||||||
| 	String key; | 	BOOST_FOREACH(const Dictionary::Pair& kv, input) { | ||||||
| 	Value value; | 		result->Set(kv.first, Deserialize(kv.second, attributeTypes)); | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), input) { |  | ||||||
| 		result->Set(key, Deserialize(value, attributeTypes)); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return result; | 	return result; | ||||||
|  | |||||||
| @ -25,7 +25,6 @@ | |||||||
| #include "base/logger_fwd.h" | #include "base/logger_fwd.h" | ||||||
| #include "base/debug.h" | #include "base/debug.h" | ||||||
| #include <sstream> | #include <sstream> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -170,10 +169,8 @@ DynamicObject::Ptr ConfigItem::Commit(void) | |||||||
| 	{ | 	{ | ||||||
| 		ObjectLock olock(properties); | 		ObjectLock olock(properties); | ||||||
| 
 | 
 | ||||||
| 		String key; | 		BOOST_FOREACH(const Dictionary::Pair& kv, properties) { | ||||||
| 		Value data; | 			attrs->Set(kv.first, kv.second); | ||||||
| 		BOOST_FOREACH(boost::tie(key, data), properties) { |  | ||||||
| 			attrs->Set(key, data); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -243,9 +240,8 @@ bool ConfigItem::ActivateItems(bool validateOnly) | |||||||
| 
 | 
 | ||||||
| 	Log(LogInformation, "config", "Linking config items..."); | 	Log(LogInformation, "config", "Linking config items..."); | ||||||
| 
 | 
 | ||||||
| 	ConfigItem::Ptr item; | 	BOOST_FOREACH(const ItemMap::value_type& kv, m_Items) { | ||||||
| 	BOOST_FOREACH(boost::tie(boost::tuples::ignore, item), m_Items) { | 		kv.second->Link(); | ||||||
| 		item->Link(); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (ConfigCompilerContext::GetInstance()->HasErrors()) | 	if (ConfigCompilerContext::GetInstance()->HasErrors()) | ||||||
| @ -253,8 +249,8 @@ bool ConfigItem::ActivateItems(bool validateOnly) | |||||||
| 
 | 
 | ||||||
| 	Log(LogInformation, "config", "Validating config items (step 1)..."); | 	Log(LogInformation, "config", "Validating config items (step 1)..."); | ||||||
| 
 | 
 | ||||||
| 	BOOST_FOREACH(boost::tie(boost::tuples::ignore, item), m_Items) { | 	BOOST_FOREACH(const ItemMap::value_type& kv, m_Items) { | ||||||
| 		item->ValidateItem(); | 		kv.second->ValidateItem(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (ConfigCompilerContext::GetInstance()->HasErrors()) | 	if (ConfigCompilerContext::GetInstance()->HasErrors()) | ||||||
| @ -264,8 +260,8 @@ bool ConfigItem::ActivateItems(bool validateOnly) | |||||||
| 
 | 
 | ||||||
| 	std::vector<DynamicObject::Ptr> objects; | 	std::vector<DynamicObject::Ptr> objects; | ||||||
| 
 | 
 | ||||||
| 	BOOST_FOREACH(boost::tie(boost::tuples::ignore, item), m_Items) { | 	BOOST_FOREACH(const ItemMap::value_type& kv, m_Items) { | ||||||
| 		DynamicObject::Ptr object = item->Commit(); | 		DynamicObject::Ptr object = kv.second->Commit(); | ||||||
| 
 | 
 | ||||||
| 		if (object) | 		if (object) | ||||||
| 			objects.push_back(object); | 			objects.push_back(object); | ||||||
| @ -277,8 +273,8 @@ bool ConfigItem::ActivateItems(bool validateOnly) | |||||||
| 
 | 
 | ||||||
| 	Log(LogInformation, "config", "Validating config items (step 2)..."); | 	Log(LogInformation, "config", "Validating config items (step 2)..."); | ||||||
| 
 | 
 | ||||||
| 	BOOST_FOREACH(boost::tie(boost::tuples::ignore, item), m_Items) { | 	BOOST_FOREACH(const ItemMap::value_type& kv, m_Items) { | ||||||
| 		item->ValidateItem(); | 		kv.second->ValidateItem(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (ConfigCompilerContext::GetInstance()->HasErrors()) | 	if (ConfigCompilerContext::GetInstance()->HasErrors()) | ||||||
|  | |||||||
| @ -22,7 +22,6 @@ | |||||||
| #include "base/objectlock.h" | #include "base/objectlock.h" | ||||||
| #include "base/convert.h" | #include "base/convert.h" | ||||||
| #include "base/scriptfunction.h" | #include "base/scriptfunction.h" | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -145,18 +144,16 @@ void ConfigType::ValidateDictionary(const Dictionary::Ptr& dictionary, | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(dictionary); | 	ObjectLock olock(dictionary); | ||||||
| 
 | 
 | ||||||
| 	String key; | 	BOOST_FOREACH(const Dictionary::Pair& kv, dictionary) { | ||||||
| 	Value value; |  | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), dictionary) { |  | ||||||
| 		TypeValidationResult overallResult = ValidationUnknownField; | 		TypeValidationResult overallResult = ValidationUnknownField; | ||||||
| 		std::vector<TypeRuleList::Ptr> subRuleLists; | 		std::vector<TypeRuleList::Ptr> subRuleLists; | ||||||
| 		String hint; | 		String hint; | ||||||
| 
 | 
 | ||||||
| 		locations.push_back("Attribute '" + key + "'"); | 		locations.push_back("Attribute '" + kv.first + "'"); | ||||||
| 
 | 
 | ||||||
| 		BOOST_FOREACH(const TypeRuleList::Ptr& ruleList, ruleLists) { | 		BOOST_FOREACH(const TypeRuleList::Ptr& ruleList, ruleLists) { | ||||||
| 			TypeRuleList::Ptr subRuleList; | 			TypeRuleList::Ptr subRuleList; | ||||||
| 			TypeValidationResult result = ruleList->ValidateAttribute(key, value, &subRuleList, &hint); | 			TypeValidationResult result = ruleList->ValidateAttribute(kv.first, kv.second, &subRuleList, &hint); | ||||||
| 
 | 
 | ||||||
| 			if (subRuleList) | 			if (subRuleList) | ||||||
| 				subRuleLists.push_back(subRuleList); | 				subRuleLists.push_back(subRuleList); | ||||||
| @ -184,10 +181,10 @@ void ConfigType::ValidateDictionary(const Dictionary::Ptr& dictionary, | |||||||
| 			ConfigCompilerContext::GetInstance()->AddMessage(true, message); | 			ConfigCompilerContext::GetInstance()->AddMessage(true, message); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		if (!subRuleLists.empty() && value.IsObjectType<Dictionary>()) | 		if (!subRuleLists.empty() && kv.second.IsObjectType<Dictionary>()) | ||||||
| 			ValidateDictionary(value, subRuleLists, locations); | 			ValidateDictionary(kv.second, subRuleLists, locations); | ||||||
| 		else if (!subRuleLists.empty() && value.IsObjectType<Array>()) | 		else if (!subRuleLists.empty() && kv.second.IsObjectType<Array>()) | ||||||
| 			ValidateArray(value, subRuleLists, locations); | 			ValidateArray(kv.second, subRuleLists, locations); | ||||||
| 
 | 
 | ||||||
| 		locations.pop_back(); | 		locations.pop_back(); | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -23,7 +23,6 @@ | |||||||
| #include "base/debug.h" | #include "base/debug.h" | ||||||
| #include "base/array.h" | #include "base/array.h" | ||||||
| #include <sstream> | #include <sstream> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -54,10 +53,8 @@ Value Expression::DeepClone(const Value& value) | |||||||
| 
 | 
 | ||||||
| 		ObjectLock olock(dict); | 		ObjectLock olock(dict); | ||||||
| 
 | 
 | ||||||
| 		String key; | 		BOOST_FOREACH(const Dictionary::Pair& kv, dict) { | ||||||
| 		Value item; | 			result->Set(kv.first, DeepClone(kv.second)); | ||||||
| 		BOOST_FOREACH(boost::tuples::tie(key, item), dict) { |  | ||||||
| 			result->Set(key, DeepClone(item)); |  | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		return result; | 		return result; | ||||||
| @ -136,8 +133,8 @@ void Expression::Execute(const Dictionary::Ptr& dictionary) const | |||||||
| 
 | 
 | ||||||
| 				String key; | 				String key; | ||||||
| 				Value value; | 				Value value; | ||||||
| 				BOOST_FOREACH(boost::tie(key, value), valueDict) { | 				BOOST_FOREACH(const Dictionary::Pair& kv, valueDict) { | ||||||
| 					dict->Set(key, DeepClone(value)); | 					dict->Set(kv.first, DeepClone(kv.second)); | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				newValue = dict; | 				newValue = dict; | ||||||
|  | |||||||
| @ -22,7 +22,6 @@ | |||||||
| #include "base/objectlock.h" | #include "base/objectlock.h" | ||||||
| #include "base/debug.h" | #include "base/debug.h" | ||||||
| #include <boost/thread/once.hpp> | #include <boost/thread/once.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -70,11 +69,11 @@ DbType::Ptr DbType::GetByName(const String& name) | |||||||
| 
 | 
 | ||||||
| DbType::Ptr DbType::GetByID(long tid) | DbType::Ptr DbType::GetByID(long tid) | ||||||
| { | { | ||||||
| 	String name; | 	boost::mutex::scoped_lock lock(GetStaticMutex()); | ||||||
| 	DbType::Ptr type; | 
 | ||||||
| 	BOOST_FOREACH(boost::tie(name, type), GetTypes()) { | 	BOOST_FOREACH(const TypeMap::value_type& kv, GetTypes()) { | ||||||
| 		if (type->GetTypeID() == tid) | 		if (kv.second->GetTypeID() == tid) | ||||||
| 			return type; | 			return kv.second; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return DbType::Ptr(); | 	return DbType::Ptr(); | ||||||
|  | |||||||
| @ -29,7 +29,6 @@ | |||||||
| #include "base/convert.h" | #include "base/convert.h" | ||||||
| #include "base/objectlock.h" | #include "base/objectlock.h" | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| 
 | 
 | ||||||
| @ -277,14 +276,12 @@ void HostDbObject::OnConfigUpdate(void) | |||||||
| 	if (customvars) { | 	if (customvars) { | ||||||
| 		ObjectLock olock (customvars); | 		ObjectLock olock (customvars); | ||||||
| 
 | 
 | ||||||
| 		String key; | 		BOOST_FOREACH(const Dictionary::Pair& kv, customvars) { | ||||||
| 		Value value; | 			Log(LogDebug, "db_ido", "host customvar key: '" + kv.first + "' value: '" + Convert::ToString(kv.second) + "'"); | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), customvars) { |  | ||||||
| 			Log(LogDebug, "db_ido", "host customvar key: '" + key + "' value: '" + Convert::ToString(value) + "'"); |  | ||||||
| 
 | 
 | ||||||
| 			Dictionary::Ptr fields3 = make_shared<Dictionary>(); | 			Dictionary::Ptr fields3 = make_shared<Dictionary>(); | ||||||
| 			fields3->Set("varname", Convert::ToString(key)); | 			fields3->Set("varname", Convert::ToString(kv.first)); | ||||||
| 			fields3->Set("varvalue", Convert::ToString(value)); | 			fields3->Set("varvalue", Convert::ToString(kv.second)); | ||||||
| 			fields3->Set("config_type", 1); | 			fields3->Set("config_type", 1); | ||||||
| 			fields3->Set("has_been_modified", 0); | 			fields3->Set("has_been_modified", 0); | ||||||
| 			fields3->Set("object_id", host); | 			fields3->Set("object_id", host); | ||||||
|  | |||||||
| @ -31,7 +31,6 @@ | |||||||
| #include "icinga/externalcommandprocessor.h" | #include "icinga/externalcommandprocessor.h" | ||||||
| #include "icinga/compatutility.h" | #include "icinga/compatutility.h" | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/algorithm/string/join.hpp> | #include <boost/algorithm/string/join.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -278,14 +277,12 @@ void ServiceDbObject::OnConfigUpdate(void) | |||||||
| 	if (customvars) { | 	if (customvars) { | ||||||
| 		ObjectLock olock(customvars); | 		ObjectLock olock(customvars); | ||||||
| 
 | 
 | ||||||
| 		String key; | 		BOOST_FOREACH(const Dictionary::Pair& kv, customvars) { | ||||||
| 		Value value; | 			Log(LogDebug, "db_ido", "service customvar key: '" + kv.first + "' value: '" + Convert::ToString(kv.second) + "'"); | ||||||
| 		BOOST_FOREACH(boost::tie(key, value), customvars) { |  | ||||||
| 			Log(LogDebug, "db_ido", "service customvar key: '" + key + "' value: '" + Convert::ToString(value) + "'"); |  | ||||||
| 
 | 
 | ||||||
| 			Dictionary::Ptr fields2 = make_shared<Dictionary>(); | 			Dictionary::Ptr fields2 = make_shared<Dictionary>(); | ||||||
| 			fields2->Set("varname", Convert::ToString(key)); | 			fields2->Set("varname", Convert::ToString(kv.first)); | ||||||
| 			fields2->Set("varvalue", Convert::ToString(value)); | 			fields2->Set("varvalue", Convert::ToString(kv.second)); | ||||||
| 			fields2->Set("config_type", 1); | 			fields2->Set("config_type", 1); | ||||||
| 			fields2->Set("has_been_modified", 0); | 			fields2->Set("has_been_modified", 0); | ||||||
| 			fields2->Set("object_id", service); | 			fields2->Set("object_id", service); | ||||||
| @ -330,10 +327,8 @@ void ServiceDbObject::AddComments(const Service::Ptr& service) | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(comments); | 	ObjectLock olock(comments); | ||||||
| 
 | 
 | ||||||
| 	String comment_id; | 	BOOST_FOREACH(const Dictionary::Pair& kv, comments) { | ||||||
| 	Comment::Ptr comment; | 		AddComment(service, kv.second); | ||||||
| 	BOOST_FOREACH(boost::tie(comment_id, comment), comments) { |  | ||||||
| 		AddComment(service, comment); |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -494,10 +489,8 @@ void ServiceDbObject::AddDowntimes(const Service::Ptr& service) | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(downtimes); | 	ObjectLock olock(downtimes); | ||||||
| 
 | 
 | ||||||
| 	String downtime_id; | 	BOOST_FOREACH(const Dictionary::Pair& kv, downtimes) { | ||||||
| 	Downtime::Ptr downtime; | 		AddDowntime(service, kv.second); | ||||||
| 	BOOST_FOREACH(boost::tie(downtime_id, downtime), downtimes) { |  | ||||||
| 		AddDowntime(service, downtime); |  | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -26,7 +26,6 @@ | |||||||
| #include "base/exception.h" | #include "base/exception.h" | ||||||
| #include "base/objectlock.h" | #include "base/objectlock.h" | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| 
 | 
 | ||||||
| @ -70,10 +69,8 @@ void TimePeriodDbObject::OnConfigUpdate(void) | |||||||
| 
 | 
 | ||||||
| 	time_t refts = Utility::GetTime(); | 	time_t refts = Utility::GetTime(); | ||||||
| 	ObjectLock olock(ranges); | 	ObjectLock olock(ranges); | ||||||
| 	String key; | 	BOOST_FOREACH(const Dictionary::Pair& kv, ranges) { | ||||||
| 	Value value; | 		int wday = LegacyTimePeriod::WeekdayFromString(kv.first); | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), ranges) { |  | ||||||
| 		int wday = LegacyTimePeriod::WeekdayFromString(key); |  | ||||||
| 
 | 
 | ||||||
| 		if (wday == -1) | 		if (wday == -1) | ||||||
| 			continue; | 			continue; | ||||||
| @ -99,7 +96,7 @@ void TimePeriodDbObject::OnConfigUpdate(void) | |||||||
| #endif /* _MSC_VER */ | #endif /* _MSC_VER */ | ||||||
| 
 | 
 | ||||||
| 		Array::Ptr segments = make_shared<Array>(); | 		Array::Ptr segments = make_shared<Array>(); | ||||||
| 		LegacyTimePeriod::ProcessTimeRanges(value, &reference, segments); | 		LegacyTimePeriod::ProcessTimeRanges(kv.second, &reference, segments); | ||||||
| 
 | 
 | ||||||
| 		ObjectLock olock(segments); | 		ObjectLock olock(segments); | ||||||
| 		BOOST_FOREACH(const Value& vsegment, segments) { | 		BOOST_FOREACH(const Value& vsegment, segments) { | ||||||
|  | |||||||
| @ -26,7 +26,6 @@ | |||||||
| #include "base/debug.h" | #include "base/debug.h" | ||||||
| #include "base/convert.h" | #include "base/convert.h" | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/algorithm/string/replace.hpp> | #include <boost/algorithm/string/replace.hpp> | ||||||
| #include <boost/algorithm/string/classification.hpp> | #include <boost/algorithm/string/classification.hpp> | ||||||
| #include <boost/algorithm/string/split.hpp> | #include <boost/algorithm/string/split.hpp> | ||||||
| @ -464,14 +463,14 @@ Dictionary::Ptr CompatUtility::GetCustomVariableConfig(const DynamicObject::Ptr& | |||||||
| 	ObjectLock olock(custom); | 	ObjectLock olock(custom); | ||||||
| 	String key; | 	String key; | ||||||
| 	Value value; | 	Value value; | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), custom) { | 	BOOST_FOREACH(const Dictionary::Pair& kv, custom) { | ||||||
| 		if (key == "notes" || | 		if (kv.first == "notes" || | ||||||
| 		    key == "action_url" || | 		    kv.first == "action_url" || | ||||||
| 		    key == "notes_url" || | 		    kv.first == "notes_url" || | ||||||
| 		    key == "icon_image" || | 		    kv.first == "icon_image" || | ||||||
| 		    key == "icon_image_alt" || | 		    kv.first == "icon_image_alt" || | ||||||
| 		    key == "statusmap_image" || | 		    kv.first == "statusmap_image" || | ||||||
| 		    key == "2d_coords") | 		    kv.first == "2d_coords") | ||||||
| 			continue; | 			continue; | ||||||
| 
 | 
 | ||||||
| 		customvars->Set(key, value); | 		customvars->Set(key, value); | ||||||
|  | |||||||
| @ -33,7 +33,6 @@ | |||||||
| #include "base/serializer.h" | #include "base/serializer.h" | ||||||
| #include "config/configitembuilder.h" | #include "config/configitembuilder.h" | ||||||
| #include "config/configcompilercontext.h" | #include "config/configcompilercontext.h" | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -151,19 +150,14 @@ void Host::UpdateSlaveServices(void) | |||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(service_descriptions); | 	ObjectLock olock(service_descriptions); | ||||||
| 	String svcname; | 	BOOST_FOREACH(const Dictionary::Pair& kv, service_descriptions) { | ||||||
| 	Value svcdesc; |  | ||||||
| 	BOOST_FOREACH(boost::tie(svcname, svcdesc), service_descriptions) { |  | ||||||
| 		if (svcdesc.IsScalar()) |  | ||||||
| 			svcname = svcdesc; |  | ||||||
| 
 |  | ||||||
| 		std::ostringstream namebuf; | 		std::ostringstream namebuf; | ||||||
| 		namebuf << GetName() << ":" << svcname; | 		namebuf << GetName() << ":" << kv.first; | ||||||
| 		String name = namebuf.str(); | 		String name = namebuf.str(); | ||||||
| 
 | 
 | ||||||
| 		std::vector<String> path; | 		std::vector<String> path; | ||||||
| 		path.push_back("services"); | 		path.push_back("services"); | ||||||
| 		path.push_back(svcname); | 		path.push_back(kv.first); | ||||||
| 
 | 
 | ||||||
| 		DebugInfo di; | 		DebugInfo di; | ||||||
| 		item->GetLinkedExpressionList()->FindDebugInfoPath(path, di); | 		item->GetLinkedExpressionList()->FindDebugInfoPath(path, di); | ||||||
| @ -175,13 +169,13 @@ void Host::UpdateSlaveServices(void) | |||||||
| 		builder->SetType("Service"); | 		builder->SetType("Service"); | ||||||
| 		builder->SetName(name); | 		builder->SetName(name); | ||||||
| 		builder->AddExpression("host", OperatorSet, GetName()); | 		builder->AddExpression("host", OperatorSet, GetName()); | ||||||
| 		builder->AddExpression("display_name", OperatorSet, svcname); | 		builder->AddExpression("display_name", OperatorSet, kv.first); | ||||||
| 		builder->AddExpression("short_name", OperatorSet, svcname); | 		builder->AddExpression("short_name", OperatorSet, kv.first); | ||||||
| 
 | 
 | ||||||
| 		if (!svcdesc.IsObjectType<Dictionary>()) | 		if (!kv.second.IsObjectType<Dictionary>()) | ||||||
| 			BOOST_THROW_EXCEPTION(std::invalid_argument("Service description must be either a string or a dictionary.")); | 			BOOST_THROW_EXCEPTION(std::invalid_argument("Service description must be either a string or a dictionary.")); | ||||||
| 
 | 
 | ||||||
| 		Dictionary::Ptr service = svcdesc; | 		Dictionary::Ptr service = kv.second; | ||||||
| 
 | 
 | ||||||
| 		Array::Ptr templates = service->Get("templates"); | 		Array::Ptr templates = service->Get("templates"); | ||||||
| 
 | 
 | ||||||
| @ -211,14 +205,9 @@ std::set<Service::Ptr> Host::GetServices(void) const | |||||||
| 	boost::mutex::scoped_lock lock(m_ServicesMutex); | 	boost::mutex::scoped_lock lock(m_ServicesMutex); | ||||||
| 
 | 
 | ||||||
| 	std::set<Service::Ptr> services; | 	std::set<Service::Ptr> services; | ||||||
| 	Service::WeakPtr wservice; | 	typedef std::pair<String, Service::Ptr> ServicePair; | ||||||
| 	BOOST_FOREACH(boost::tie(boost::tuples::ignore, wservice), m_Services) { | 	BOOST_FOREACH(const ServicePair& kv, m_Services) { | ||||||
| 		Service::Ptr service = wservice.lock(); | 		services.insert(kv.second); | ||||||
| 
 |  | ||||||
| 		if (!service) |  | ||||||
| 			continue; |  | ||||||
| 
 |  | ||||||
| 		services.insert(service); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return services; | 	return services; | ||||||
|  | |||||||
| @ -24,7 +24,6 @@ | |||||||
| #include "base/objectlock.h" | #include "base/objectlock.h" | ||||||
| #include "base/logger_fwd.h" | #include "base/logger_fwd.h" | ||||||
| #include "base/context.h" | #include "base/context.h" | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
|  | |||||||
| @ -27,7 +27,6 @@ | |||||||
| #include "base/utility.h" | #include "base/utility.h" | ||||||
| #include "base/convert.h" | #include "base/convert.h" | ||||||
| #include "base/exception.h" | #include "base/exception.h" | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
|  | |||||||
| @ -135,7 +135,7 @@ Value PluginUtility::ParsePerfdata(const String& perfdata) | |||||||
| 
 | 
 | ||||||
| String PluginUtility::FormatPerfdata(const Value& perfdata) | String PluginUtility::FormatPerfdata(const Value& perfdata) | ||||||
| { | { | ||||||
| 	String output; | 	std::ostringstream result; | ||||||
| 
 | 
 | ||||||
| 	if (!perfdata.IsObjectType<Dictionary>()) | 	if (!perfdata.IsObjectType<Dictionary>()) | ||||||
| 		return perfdata; | 		return perfdata; | ||||||
| @ -144,14 +144,15 @@ String PluginUtility::FormatPerfdata(const Value& perfdata) | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(dict); | 	ObjectLock olock(dict); | ||||||
| 
 | 
 | ||||||
| 	String key; | 	bool first = true; | ||||||
| 	Value value; | 	BOOST_FOREACH(const Dictionary::Pair& kv, dict) { | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), dict) { | 		if (!first) | ||||||
| 		if (!output.IsEmpty()) | 			result << " "; | ||||||
| 			output += " "; | 		else | ||||||
|  | 			first = false; | ||||||
| 
 | 
 | ||||||
| 		output += key + "=" + PerfdataValue::Format(value); | 		result << kv.first << "=" << PerfdataValue::Format(kv.second); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	return output; | 	return result.str(); | ||||||
| } | } | ||||||
|  | |||||||
| @ -24,7 +24,6 @@ | |||||||
| #include "base/timer.h" | #include "base/timer.h" | ||||||
| #include "base/utility.h" | #include "base/utility.h" | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| 
 | 
 | ||||||
| @ -90,12 +89,11 @@ void Service::RemoveAllComments(void) | |||||||
| 	Dictionary::Ptr comments = GetComments(); | 	Dictionary::Ptr comments = GetComments(); | ||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(comments); | 	ObjectLock olock(comments); | ||||||
| 	String id; | 	BOOST_FOREACH(const Dictionary::Pair& kv, comments) { | ||||||
| 	BOOST_FOREACH(boost::tie(id, boost::tuples::ignore), comments) { | 		ids.push_back(kv.first); | ||||||
| 		ids.push_back(id); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	BOOST_FOREACH(id, ids) { | 	BOOST_FOREACH(const String& id, ids) { | ||||||
| 		RemoveComment(id); | 		RemoveComment(id); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| @ -173,16 +171,16 @@ void Service::AddCommentsToCache(void) | |||||||
| 
 | 
 | ||||||
| 	boost::mutex::scoped_lock lock(l_CommentMutex); | 	boost::mutex::scoped_lock lock(l_CommentMutex); | ||||||
| 
 | 
 | ||||||
| 	String id; | 	BOOST_FOREACH(const Dictionary::Pair& kv, comments) { | ||||||
| 	Comment::Ptr comment; | 		Comment::Ptr comment = kv.second; | ||||||
| 	BOOST_FOREACH(boost::tie(id, comment), comments) { | 
 | ||||||
| 		int legacy_id = comment->GetLegacyId(); | 		int legacy_id = comment->GetLegacyId(); | ||||||
| 
 | 
 | ||||||
| 		if (legacy_id >= l_NextCommentID) | 		if (legacy_id >= l_NextCommentID) | ||||||
| 			l_NextCommentID = legacy_id + 1; | 			l_NextCommentID = legacy_id + 1; | ||||||
| 
 | 
 | ||||||
| 		l_LegacyCommentsCache[legacy_id] = id; | 		l_LegacyCommentsCache[legacy_id] = kv.first; | ||||||
| 		l_CommentsCache[id] = GetSelf(); | 		l_CommentsCache[kv.first] = GetSelf(); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -195,11 +193,11 @@ void Service::RemoveCommentsByType(int type) | |||||||
| 	{ | 	{ | ||||||
| 		ObjectLock olock(comments); | 		ObjectLock olock(comments); | ||||||
| 
 | 
 | ||||||
| 		String id; | 		BOOST_FOREACH(const Dictionary::Pair& kv, comments) { | ||||||
| 		Comment::Ptr comment; | 			Comment::Ptr comment = kv.second; | ||||||
| 		BOOST_FOREACH(boost::tie(id, comment), comments) { | 
 | ||||||
| 			if (comment->GetEntryType() == type) | 			if (comment->GetEntryType() == type) | ||||||
| 				removedComments.push_back(id); | 				removedComments.push_back(kv.first); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -217,11 +215,11 @@ void Service::RemoveExpiredComments(void) | |||||||
| 	{ | 	{ | ||||||
| 		ObjectLock olock(comments); | 		ObjectLock olock(comments); | ||||||
| 
 | 
 | ||||||
| 		String id; | 		BOOST_FOREACH(const Dictionary::Pair& kv, comments) { | ||||||
| 		Comment::Ptr comment; | 			Comment::Ptr comment = kv.second; | ||||||
| 		BOOST_FOREACH(boost::tie(id, comment), comments) { | 
 | ||||||
| 			if (comment->IsExpired()) | 			if (comment->IsExpired()) | ||||||
| 				expiredComments.push_back(id); | 				expiredComments.push_back(kv.first); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -24,7 +24,6 @@ | |||||||
| #include "base/timer.h" | #include "base/timer.h" | ||||||
| #include "base/utility.h" | #include "base/utility.h" | ||||||
| #include "base/convert.h" | #include "base/convert.h" | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -144,9 +143,8 @@ void Service::TriggerDowntimes(void) | |||||||
| 	{ | 	{ | ||||||
| 		ObjectLock olock(downtimes); | 		ObjectLock olock(downtimes); | ||||||
| 
 | 
 | ||||||
| 		String id; | 		BOOST_FOREACH(const Dictionary::Pair& kv, downtimes) { | ||||||
| 		BOOST_FOREACH(boost::tie(id, boost::tuples::ignore), downtimes) { | 			ids.push_back(kv.first); | ||||||
| 			ids.push_back(id); |  | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -180,9 +178,8 @@ void Service::TriggerDowntime(const String& id) | |||||||
| 
 | 
 | ||||||
| 	Dictionary::Ptr triggers = downtime->GetTriggers(); | 	Dictionary::Ptr triggers = downtime->GetTriggers(); | ||||||
| 	ObjectLock olock(triggers); | 	ObjectLock olock(triggers); | ||||||
| 	String tid; | 	BOOST_FOREACH(const Dictionary::Pair& kv, triggers) { | ||||||
| 	BOOST_FOREACH(boost::tie(tid, boost::tuples::ignore), triggers) { | 		TriggerDowntime(kv.first); | ||||||
| 		TriggerDowntime(tid); |  | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	OnDowntimeTriggered(owner, downtime); | 	OnDowntimeTriggered(owner, downtime); | ||||||
| @ -241,16 +238,16 @@ void Service::AddDowntimesToCache(void) | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(downtimes); | 	ObjectLock olock(downtimes); | ||||||
| 
 | 
 | ||||||
| 	String id; | 	BOOST_FOREACH(const Dictionary::Pair& kv, downtimes) { | ||||||
| 	Downtime::Ptr downtime; | 		Downtime::Ptr downtime = kv.second; | ||||||
| 	BOOST_FOREACH(boost::tie(id, downtime), downtimes) { | 
 | ||||||
| 		int legacy_id = downtime->GetLegacyId(); | 		int legacy_id = downtime->GetLegacyId(); | ||||||
| 
 | 
 | ||||||
| 		if (legacy_id >= l_NextDowntimeID) | 		if (legacy_id >= l_NextDowntimeID) | ||||||
| 			l_NextDowntimeID = legacy_id + 1; | 			l_NextDowntimeID = legacy_id + 1; | ||||||
| 
 | 
 | ||||||
| 		l_LegacyDowntimesCache[legacy_id] = id; | 		l_LegacyDowntimesCache[legacy_id] = kv.first; | ||||||
| 		l_DowntimesCache[id] = GetSelf(); | 		l_DowntimesCache[kv.first] = GetSelf(); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -263,11 +260,11 @@ void Service::RemoveExpiredDowntimes(void) | |||||||
| 	{ | 	{ | ||||||
| 		ObjectLock olock(downtimes); | 		ObjectLock olock(downtimes); | ||||||
| 
 | 
 | ||||||
| 		String id; | 		BOOST_FOREACH(const Dictionary::Pair& kv, downtimes) { | ||||||
| 		Downtime::Ptr downtime; | 			Downtime::Ptr downtime = kv.second; | ||||||
| 		BOOST_FOREACH(boost::tie(id, downtime), downtimes) { | 
 | ||||||
| 			if (downtime->IsExpired()) | 			if (downtime->IsExpired()) | ||||||
| 				expiredDowntimes.push_back(id); | 				expiredDowntimes.push_back(kv.first); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| @ -289,8 +286,9 @@ bool Service::IsInDowntime(void) const | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(downtimes); | 	ObjectLock olock(downtimes); | ||||||
| 
 | 
 | ||||||
| 	Downtime::Ptr downtime; | 	BOOST_FOREACH(const Dictionary::Pair& kv, downtimes) { | ||||||
| 	BOOST_FOREACH(boost::tie(boost::tuples::ignore, downtime), downtimes) { | 		Downtime::Ptr downtime = kv.second; | ||||||
|  | 
 | ||||||
| 		if (downtime->IsActive()) | 		if (downtime->IsActive()) | ||||||
| 			return true; | 			return true; | ||||||
| 	} | 	} | ||||||
| @ -305,8 +303,9 @@ int Service::GetDowntimeDepth(void) const | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(downtimes); | 	ObjectLock olock(downtimes); | ||||||
| 
 | 
 | ||||||
| 	Downtime::Ptr downtime; | 	BOOST_FOREACH(const Dictionary::Pair& kv, downtimes) { | ||||||
| 	BOOST_FOREACH(boost::tie(boost::tuples::ignore, downtime), downtimes) { | 		Downtime::Ptr downtime = kv.second; | ||||||
|  | 
 | ||||||
| 		if (downtime->IsActive()) | 		if (downtime->IsActive()) | ||||||
| 			downtime_depth++; | 			downtime_depth++; | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -25,7 +25,6 @@ | |||||||
| #include "base/timer.h" | #include "base/timer.h" | ||||||
| #include "base/utility.h" | #include "base/utility.h" | ||||||
| #include "base/convert.h" | #include "base/convert.h" | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
|  | |||||||
| @ -27,7 +27,6 @@ | |||||||
| #include "base/exception.h" | #include "base/exception.h" | ||||||
| #include "base/context.h" | #include "base/context.h" | ||||||
| #include "config/configitembuilder.h" | #include "config/configitembuilder.h" | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -110,16 +109,14 @@ void Service::UpdateSlaveNotifications(void) | |||||||
| 
 | 
 | ||||||
| 	ObjectLock olock(descs); | 	ObjectLock olock(descs); | ||||||
| 
 | 
 | ||||||
| 	String nfcname; | 	BOOST_FOREACH(const Dictionary::Pair& kv, descs) { | ||||||
| 	Value nfcdesc; |  | ||||||
| 	BOOST_FOREACH(boost::tie(nfcname, nfcdesc), descs) { |  | ||||||
| 		std::ostringstream namebuf; | 		std::ostringstream namebuf; | ||||||
| 		namebuf << GetName() << ":" << nfcname; | 		namebuf << GetName() << ":" << kv.first; | ||||||
| 		String name = namebuf.str(); | 		String name = namebuf.str(); | ||||||
| 
 | 
 | ||||||
| 		std::vector<String> path; | 		std::vector<String> path; | ||||||
| 		path.push_back("notifications"); | 		path.push_back("notifications"); | ||||||
| 		path.push_back(nfcname); | 		path.push_back(kv.first); | ||||||
| 
 | 
 | ||||||
| 		DebugInfo di; | 		DebugInfo di; | ||||||
| 		item->GetLinkedExpressionList()->FindDebugInfoPath(path, di); | 		item->GetLinkedExpressionList()->FindDebugInfoPath(path, di); | ||||||
| @ -133,10 +130,7 @@ void Service::UpdateSlaveNotifications(void) | |||||||
| 		builder->AddExpression("host", OperatorSet, GetHost()->GetName()); | 		builder->AddExpression("host", OperatorSet, GetHost()->GetName()); | ||||||
| 		builder->AddExpression("service", OperatorSet, GetShortName()); | 		builder->AddExpression("service", OperatorSet, GetShortName()); | ||||||
| 
 | 
 | ||||||
| 		if (!nfcdesc.IsObjectType<Dictionary>()) | 		Dictionary::Ptr notification = kv.second; | ||||||
| 			BOOST_THROW_EXCEPTION(std::invalid_argument("Notification description must be a dictionary.")); |  | ||||||
| 
 |  | ||||||
| 		Dictionary::Ptr notification = nfcdesc; |  | ||||||
| 
 | 
 | ||||||
| 		Array::Ptr templates = notification->Get("templates"); | 		Array::Ptr templates = notification->Get("templates"); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -26,7 +26,6 @@ | |||||||
| #include "base/debug.h" | #include "base/debug.h" | ||||||
| #include <boost/algorithm/string/split.hpp> | #include <boost/algorithm/string/split.hpp> | ||||||
| #include <boost/algorithm/string/classification.hpp> | #include <boost/algorithm/string/classification.hpp> | ||||||
| #include <boost/tuple/tuple.hpp> |  | ||||||
| #include <boost/foreach.hpp> | #include <boost/foreach.hpp> | ||||||
| 
 | 
 | ||||||
| using namespace icinga; | using namespace icinga; | ||||||
| @ -413,17 +412,15 @@ Array::Ptr LegacyTimePeriod::ScriptFunc(const TimePeriod::Ptr& tp, double begin, | |||||||
| #endif /* _MSC_VER */ | #endif /* _MSC_VER */ | ||||||
| 
 | 
 | ||||||
| 			ObjectLock olock(ranges); | 			ObjectLock olock(ranges); | ||||||
| 			String key; | 			BOOST_FOREACH(const Dictionary::Pair& kv, ranges) { | ||||||
| 			Value value; | 				if (!IsInDayDefinition(kv.first, &reference)) { | ||||||
| 			BOOST_FOREACH(boost::tie(key, value), ranges) { | 					Log(LogDebug, "icinga", "Not in day definition '" + kv.first + "'."); | ||||||
| 				if (!IsInDayDefinition(key, &reference)) { |  | ||||||
| 					Log(LogDebug, "icinga", "Not in day definition '" + key + "'."); |  | ||||||
| 					continue; | 					continue; | ||||||
| 				} | 				} | ||||||
| 
 | 
 | ||||||
| 				Log(LogDebug, "icinga", "In day definition '" + key + "'."); | 				Log(LogDebug, "icinga", "In day definition '" + kv.first + "'."); | ||||||
| 
 | 
 | ||||||
| 				ProcessTimeRanges(value, &reference, segments); | 				ProcessTimeRanges(kv.second, &reference, segments); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  | |||||||
| @ -82,23 +82,21 @@ BOOST_AUTO_TEST_CASE(foreach) | |||||||
| 
 | 
 | ||||||
| 	bool seen_test1 = false, seen_test2 = false; | 	bool seen_test1 = false, seen_test2 = false; | ||||||
| 
 | 
 | ||||||
| 	String key; | 	BOOST_FOREACH(const Dictionary::Pair& kv, dictionary) { | ||||||
| 	Value value; | 		BOOST_CHECK(kv.first == "test1" || kv.first == "test2"); | ||||||
| 	BOOST_FOREACH(boost::tie(key, value), dictionary) { |  | ||||||
| 		BOOST_CHECK(key == "test1" || key == "test2"); |  | ||||||
| 
 | 
 | ||||||
| 		if (key == "test1") { | 		if (kv.first == "test1") { | ||||||
| 			BOOST_CHECK(!seen_test1); | 			BOOST_CHECK(!seen_test1); | ||||||
| 			seen_test1 = true; | 			seen_test1 = true; | ||||||
| 
 | 
 | ||||||
| 			BOOST_CHECK(value == 7); | 			BOOST_CHECK(kv.second == 7); | ||||||
| 
 | 
 | ||||||
| 			continue; | 			continue; | ||||||
| 		} else if (key == "test2") { | 		} else if (kv.first == "test2") { | ||||||
| 			BOOST_CHECK(!seen_test2); | 			BOOST_CHECK(!seen_test2); | ||||||
| 			seen_test2 = true; | 			seen_test2 = true; | ||||||
| 
 | 
 | ||||||
| 			BOOST_CHECK(value == "hello world"); | 			BOOST_CHECK(kv.second == "hello world"); | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user