]> granicus.if.org Git - icinga2/commitdiff
Fix state file functionality.
authorGunnar Beutner <gunnar.beutner@netways.de>
Thu, 29 Aug 2013 08:40:43 +0000 (10:40 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Thu, 29 Aug 2013 08:40:43 +0000 (10:40 +0200)
14 files changed:
components/cluster/endpoint.cpp
components/cluster/endpoint.h
icinga-app/icinga.cpp
lib/base/dynamicobject.h
lib/base/dynamictype.cpp
lib/base/filelogger.cpp
lib/base/logger.cpp
lib/base/script.cpp
lib/config/configitem.cpp
lib/icinga/icinga-type.conf
lib/icinga/notification.cpp
lib/icinga/service.cpp
lib/icinga/timeperiod.cpp
lib/icinga/user.cpp

index 5194837e28b152a9e8f5c97e152e84eef5854897..7c51e6dc5ae638e74dcf9562edd131a4b67f2cc4 100644 (file)
@@ -131,7 +131,6 @@ void Endpoint::InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes)
        DynamicObject::InternalSerialize(bag, attributeTypes);
 
        if (attributeTypes & Attribute_Config) {
-               bag->Set("local", m_Local);
                bag->Set("host", m_Host);
                bag->Set("port", m_Port);
        }
@@ -142,7 +141,6 @@ void Endpoint::InternalDeserialize(const Dictionary::Ptr& bag, int attributeType
        DynamicObject::InternalDeserialize(bag, attributeTypes);
 
        if (attributeTypes & Attribute_Config) {
-               m_Local = bag->Get("local");
                m_Host = bag->Get("host");
                m_Port = bag->Get("port");
        }
index 834ae0b593d581c979d7da1c8971ca1e7685f8be..a7344e7006e202d6da59b1099ec528942d402a52 100644 (file)
@@ -58,7 +58,6 @@ protected:
        virtual void InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes);
 
 private:
-       bool m_Local;
        Dictionary::Ptr m_Subscriptions;
        String m_Host;
        String m_Port;
index 72bec2ae1995fcaff623aacc0c66265a3baa6efe..9007c83d3aa00b679ab443dbdad81fadd23f22b4 100644 (file)
@@ -85,9 +85,6 @@ static bool LoadConfigFiles(bool validateOnly)
        if (validateOnly)
                return true;
 
-       /* restore the previous program state */
-       DynamicObject::RestoreObjects(Application::GetStatePath());
-
        ConfigItem::ActivateItems();
 
        ConfigItem::DiscardItems();
index 8412844dca32d7612a37c34f208fb6763849ecbd..048fd5deb49422c8c99c1d45b351b2f5ac703ebd 100644 (file)
@@ -39,18 +39,8 @@ class DynamicType;
  */
 enum AttributeType
 {
-       Attribute_Transient = 1,
-
-       /* Unlike transient attributes local attributes are persisted
-        * in the program state file. */
-       Attribute_Local = 2,
-
-       /* Attributes read from the config file are implicitly marked
-        * as config attributes. */
-       Attribute_Config = 4,
-
-       /* Combination of all attribute types */
-       Attribute_All = Attribute_Transient | Attribute_Local | Attribute_Config
+       Attribute_State = 1,
+       Attribute_Config = 2,
 };
 
 /**
@@ -100,8 +90,8 @@ public:
                return dynamic_pointer_cast<T>(object);
        }
 
-       static void DumpObjects(const String& filename, int attributeTypes = Attribute_Local);
-       static void RestoreObjects(const String& filename, int attributeTypes = Attribute_Local);
+       static void DumpObjects(const String& filename, int attributeTypes = Attribute_State);
+       static void RestoreObjects(const String& filename, int attributeTypes = Attribute_State);
        static void StopObjects(void);
 
        Dictionary::Ptr GetCustom(void) const;
index 8a607ef42aaa71c3c7ef58328f31a4fe7e28b26e..9a3bc5a8b6c0c86209c061090d2ef81f05ee5439 100644 (file)
@@ -138,7 +138,7 @@ DynamicObject::Ptr DynamicType::CreateObject(const Dictionary::Ptr& serializedUp
 
        DynamicObject::Ptr object = factory();
 
-       object->Deserialize(serializedUpdate, Attribute_All);
+       object->Deserialize(serializedUpdate, Attribute_Config);
 
        return object;
 }
index 00056ec133a83299ced59ed775e15520b39c2e7b..6dac6878f0997b3240d82572d2acf591f6a4d785 100644 (file)
@@ -53,7 +53,8 @@ void FileLogger::InternalSerialize(const Dictionary::Ptr& bag, int attributeType
 {
        StreamLogger::InternalSerialize(bag, attributeTypes);
 
-       bag->Set("path", m_Path);
+       if (attributeTypes & Attribute_Config)
+               bag->Set("path", m_Path);
 }
 
 void FileLogger::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes)
index cfdae35781d78532a9b28101f4e8646bef701e36..e714074fd19634c6952d53985a7a2b4982f253b2 100644 (file)
@@ -156,7 +156,8 @@ void Logger::InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) c
 {
        DynamicObject::InternalSerialize(bag, attributeTypes);
 
-       bag->Set("severity", m_Severity);
+       if (attributeTypes & Attribute_Config)
+               bag->Set("severity", m_Severity);
 }
 
 void Logger::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes)
index 9f82c555e951e9de45b0c323c417dda3ad4809a7..8e48c49e4dc672e27ed89a250e9b8b4fbb0fcbae 100644 (file)
@@ -63,15 +63,18 @@ void Script::InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) c
 {
        DynamicObject::InternalSerialize(bag, attributeTypes);
 
-       bag->Set("language", m_Language);
-       bag->Set("code", m_Code);
+       if (attributeTypes & Attribute_Config) {
+               bag->Set("language", m_Language);
+               bag->Set("code", m_Code);
+       }
 }
 
 void Script::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes)
 {
        DynamicObject::InternalDeserialize(bag, attributeTypes);
 
-       m_Language = bag->Get("language");
-       m_Code = bag->Get("code");
-
+       if (attributeTypes & Attribute_Config) {
+               m_Language = bag->Get("language");
+               m_Code = bag->Get("code");
+       }
 }
index 052e7b855dec3925b113671a9b6e62f03b9b53ba..ebca955d93b700f1888e77babeb61539e30ba877 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "config/configitem.h"
 #include "config/configcompilercontext.h"
+#include "base/application.h"
 #include "base/dynamictype.h"
 #include "base/objectlock.h"
 #include "base/logger_fwd.h"
@@ -274,6 +275,9 @@ void ConfigItem::ActivateItems(void)
                        objects.push_back(object);
        }
 
+       /* restore the previous program state */
+       DynamicObject::RestoreObjects(Application::GetStatePath());
+
        BOOST_FOREACH(const DynamicObject::Ptr& object, objects) {
                Log(LogDebug, "config", "Activating object '" + object->GetName() + "' of type '" + object->GetType()->GetName() + "'");
                object->Start();
index 63b5a10799bb675ea6a296e5cf2104c34acfbce5..3962611f470c5dd5450342e2e6da2a958a09ea95 100644 (file)
@@ -184,7 +184,6 @@ type HostGroup {
 
 type IcingaApplication {
        %attribute string "pid_path",
-       %attribute string "state_path",
        %attribute dictionary "macros" {
                %attribute string "*"
        }
index 8b19d22038bc8da430f0bdd4c4a22aae7cf4b4a4..7da0ce79a637bb32357e871897e6cc5608c6ce1e 100644 (file)
@@ -370,40 +370,50 @@ void Notification::InternalSerialize(const Dictionary::Ptr& bag, int attributeTy
 {
        DynamicObject::InternalSerialize(bag, attributeTypes);
 
-       bag->Set("notification_command", m_NotificationCommand);
-       bag->Set("notification_interval", m_NotificationInterval);
-       bag->Set("notification_period", m_NotificationPeriod);
-       bag->Set("last_notification", m_LastNotification);
-       bag->Set("next_notification", m_NextNotification);
-       bag->Set("notification_number", m_NotificationNumber);
-       bag->Set("macros", m_Macros);
-       bag->Set("users", m_Users);
-       bag->Set("groups", m_Groups);
-       bag->Set("times", m_Times);
-       bag->Set("notification_type_filter", m_NotificationTypeFilter);
-       bag->Set("notification_state_filter", m_NotificationStateFilter);
-       bag->Set("host_name", m_HostName);
-       bag->Set("export_macros", m_ExportMacros);
-       bag->Set("service", m_Service);
+       if (attributeTypes & Attribute_Config) {
+               bag->Set("notification_command", m_NotificationCommand);
+               bag->Set("notification_interval", m_NotificationInterval);
+               bag->Set("notification_period", m_NotificationPeriod);
+               bag->Set("macros", m_Macros);
+               bag->Set("users", m_Users);
+               bag->Set("groups", m_Groups);
+               bag->Set("times", m_Times);
+               bag->Set("notification_type_filter", m_NotificationTypeFilter);
+               bag->Set("notification_state_filter", m_NotificationStateFilter);
+               bag->Set("host_name", m_HostName);
+               bag->Set("export_macros", m_ExportMacros);
+               bag->Set("service", m_Service);
+       }
+
+       if (attributeTypes & Attribute_State) {
+               bag->Set("last_notification", m_LastNotification);
+               bag->Set("next_notification", m_NextNotification);
+               bag->Set("notification_number", m_NotificationNumber);
+       }
 }
 
 void Notification::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes)
 {
        DynamicObject::InternalDeserialize(bag, attributeTypes);
 
-       m_NotificationCommand = bag->Get("notification_command");
-       m_NotificationInterval = bag->Get("notification_interval");
-       m_NotificationPeriod = bag->Get("notification_period");
-       m_LastNotification = bag->Get("last_notification");
-       m_NextNotification = bag->Get("next_notification");
-       m_NotificationNumber = bag->Get("notification_number");
-       m_Macros = bag->Get("macros");
-       m_Users = bag->Get("users");
-       m_Groups = bag->Get("groups");
-       m_Times = bag->Get("times");
-       m_NotificationTypeFilter = bag->Get("notification_type_filter");
-       m_NotificationStateFilter = bag->Get("notification_state_filter");
-       m_HostName = bag->Get("host_name");
-       m_ExportMacros = bag->Get("export_macros");
-       m_Service = bag->Get("service");
+       if (attributeTypes & Attribute_Config) {
+               m_NotificationCommand = bag->Get("notification_command");
+               m_NotificationInterval = bag->Get("notification_interval");
+               m_NotificationPeriod = bag->Get("notification_period");
+               m_Macros = bag->Get("macros");
+               m_Users = bag->Get("users");
+               m_Groups = bag->Get("groups");
+               m_Times = bag->Get("times");
+               m_NotificationTypeFilter = bag->Get("notification_type_filter");
+               m_NotificationStateFilter = bag->Get("notification_state_filter");
+               m_HostName = bag->Get("host_name");
+               m_ExportMacros = bag->Get("export_macros");
+               m_Service = bag->Get("service");
+       }
+
+       if (attributeTypes & Attribute_State) {
+               m_LastNotification = bag->Get("last_notification");
+               m_NextNotification = bag->Get("next_notification");
+               m_NotificationNumber = bag->Get("notification_number");
+       }
 }
index efa2139999eafb4da9b2f404e2f0f6085486c731..c9102d032fa04de52d821133efd52fb24a343bb9 100644 (file)
@@ -418,37 +418,39 @@ void Service::InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes)
                bag->Set("notifications", m_NotificationDescriptions);
        }
 
-       bag->Set("next_check", m_NextCheck);
-       bag->Set("current_checker", m_CurrentChecker);
-       bag->Set("check_attempt", m_CheckAttempt);
-       bag->Set("state", m_State);
-       bag->Set("state_type", m_StateType);
-       bag->Set("last_state", m_LastState);
-       bag->Set("last_hard_state", m_LastHardState);
-       bag->Set("last_state_type", m_LastStateType);
-       bag->Set("last_reachable", m_LastReachable);
-       bag->Set("last_result", m_LastResult);
-       bag->Set("last_state_change", m_LastStateChange);
-       bag->Set("last_hard_state_change", m_LastHardStateChange);
-       bag->Set("last_state_ok", m_LastStateOK);
-       bag->Set("last_state_warning", m_LastStateWarning);
-       bag->Set("last_state_critical", m_LastStateCritical);
-       bag->Set("last_state_unknown", m_LastStateUnknown);
-       bag->Set("last_state_unreachable", m_LastStateUnreachable);
-       bag->Set("last_in_downtime", m_LastInDowntime);
-       bag->Set("enable_active_checks", m_EnableActiveChecks);
-       bag->Set("enable_passive_checks", m_EnablePassiveChecks);
-       bag->Set("force_next_check", m_ForceNextCheck);
-       bag->Set("acknowledgement", m_Acknowledgement);
-       bag->Set("acknowledgement_expiry", m_AcknowledgementExpiry);
-       bag->Set("comments", m_Comments);
-       bag->Set("downtimes", m_Downtimes);
-       bag->Set("enable_notifications", m_EnableNotifications);
-       bag->Set("force_next_notification", m_ForceNextNotification);
-       bag->Set("flapping_positive", m_FlappingPositive);
-       bag->Set("flapping_negative", m_FlappingNegative);
-       bag->Set("flapping_lastchange", m_FlappingLastChange);
-       bag->Set("enable_flapping", m_EnableFlapping);
+       if (attributeTypes & Attribute_State) {
+               bag->Set("next_check", m_NextCheck);
+               bag->Set("current_checker", m_CurrentChecker);
+               bag->Set("check_attempt", m_CheckAttempt);
+               bag->Set("state", m_State);
+               bag->Set("state_type", m_StateType);
+               bag->Set("last_state", m_LastState);
+               bag->Set("last_hard_state", m_LastHardState);
+               bag->Set("last_state_type", m_LastStateType);
+               bag->Set("last_reachable", m_LastReachable);
+               bag->Set("last_result", m_LastResult);
+               bag->Set("last_state_change", m_LastStateChange);
+               bag->Set("last_hard_state_change", m_LastHardStateChange);
+               bag->Set("last_state_ok", m_LastStateOK);
+               bag->Set("last_state_warning", m_LastStateWarning);
+               bag->Set("last_state_critical", m_LastStateCritical);
+               bag->Set("last_state_unknown", m_LastStateUnknown);
+               bag->Set("last_state_unreachable", m_LastStateUnreachable);
+               bag->Set("last_in_downtime", m_LastInDowntime);
+               bag->Set("enable_active_checks", m_EnableActiveChecks);
+               bag->Set("enable_passive_checks", m_EnablePassiveChecks);
+               bag->Set("force_next_check", m_ForceNextCheck);
+               bag->Set("acknowledgement", m_Acknowledgement);
+               bag->Set("acknowledgement_expiry", m_AcknowledgementExpiry);
+               bag->Set("comments", m_Comments);
+               bag->Set("downtimes", m_Downtimes);
+               bag->Set("enable_notifications", m_EnableNotifications);
+               bag->Set("force_next_notification", m_ForceNextNotification);
+               bag->Set("flapping_positive", m_FlappingPositive);
+               bag->Set("flapping_negative", m_FlappingNegative);
+               bag->Set("flapping_lastchange", m_FlappingLastChange);
+               bag->Set("enable_flapping", m_EnableFlapping);
+       }
 }
 
 void Service::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes)
@@ -475,35 +477,37 @@ void Service::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes
                m_NotificationDescriptions = bag->Get("notifications");
        }
 
-       m_NextCheck = bag->Get("next_check");
-       m_CurrentChecker = bag->Get("current_checker");
-       m_CheckAttempt = bag->Get("check_attempt");
-       m_State = bag->Get("state");
-       m_StateType = bag->Get("state_type");
-       m_LastState = bag->Get("last_state");
-       m_LastHardState = bag->Get("last_hard_state");
-       m_LastStateType = bag->Get("last_state_type");
-       m_LastReachable = bag->Get("last_reachable");
-       m_LastResult = bag->Get("last_result");
-       m_LastStateChange = bag->Get("last_state_change");
-       m_LastHardStateChange = bag->Get("last_hard_state_change");
-       m_LastStateOK = bag->Get("last_state_ok");
-       m_LastStateWarning = bag->Get("last_state_warning");
-       m_LastStateCritical = bag->Get("last_state_critical");
-       m_LastStateUnknown = bag->Get("last_state_unknown");
-       m_LastStateUnreachable = bag->Get("last_state_unreachable");
-       m_LastInDowntime = bag->Get("last_in_downtime");
-       m_EnableActiveChecks = bag->Get("enable_active_checks");
-       m_EnablePassiveChecks = bag->Get("enable_passive_checks");
-       m_ForceNextCheck = bag->Get("force_next_check");
-       m_Acknowledgement = bag->Get("acknowledgement");
-       m_AcknowledgementExpiry = bag->Get("acknowledgement_expiry");
-       m_Comments = bag->Get("comments");
-       m_Downtimes = bag->Get("downtimes");
-       m_EnableNotifications = bag->Get("enable_notifications");
-       m_ForceNextNotification = bag->Get("force_next_notification");
-       m_FlappingPositive = bag->Get("flapping_positive");
-       m_FlappingNegative = bag->Get("flapping_negative");
-       m_FlappingLastChange = bag->Get("flapping_lastchange");
-       m_EnableFlapping = bag->Get("enable_flapping");
+       if (attributeTypes & Attribute_State) {
+               m_NextCheck = bag->Get("next_check");
+               m_CurrentChecker = bag->Get("current_checker");
+               m_CheckAttempt = bag->Get("check_attempt");
+               m_State = bag->Get("state");
+               m_StateType = bag->Get("state_type");
+               m_LastState = bag->Get("last_state");
+               m_LastHardState = bag->Get("last_hard_state");
+               m_LastStateType = bag->Get("last_state_type");
+               m_LastReachable = bag->Get("last_reachable");
+               m_LastResult = bag->Get("last_result");
+               m_LastStateChange = bag->Get("last_state_change");
+               m_LastHardStateChange = bag->Get("last_hard_state_change");
+               m_LastStateOK = bag->Get("last_state_ok");
+               m_LastStateWarning = bag->Get("last_state_warning");
+               m_LastStateCritical = bag->Get("last_state_critical");
+               m_LastStateUnknown = bag->Get("last_state_unknown");
+               m_LastStateUnreachable = bag->Get("last_state_unreachable");
+               m_LastInDowntime = bag->Get("last_in_downtime");
+               m_EnableActiveChecks = bag->Get("enable_active_checks");
+               m_EnablePassiveChecks = bag->Get("enable_passive_checks");
+               m_ForceNextCheck = bag->Get("force_next_check");
+               m_Acknowledgement = bag->Get("acknowledgement");
+               m_AcknowledgementExpiry = bag->Get("acknowledgement_expiry");
+               m_Comments = bag->Get("comments");
+               m_Downtimes = bag->Get("downtimes");
+               m_EnableNotifications = bag->Get("enable_notifications");
+               m_ForceNextNotification = bag->Get("force_next_notification");
+               m_FlappingPositive = bag->Get("flapping_positive");
+               m_FlappingNegative = bag->Get("flapping_negative");
+               m_FlappingLastChange = bag->Get("flapping_lastchange");
+               m_EnableFlapping = bag->Get("enable_flapping");
+       }
 }
index 999dce9fdad1fb6c9c928b0480f30bed83419645..25e803dee71de16d58563508edbf7066ef884f88 100644 (file)
@@ -332,9 +332,11 @@ void TimePeriod::InternalSerialize(const Dictionary::Ptr& bag, int attributeType
                bag->Set("ranges", m_Ranges);
        }
 
-       bag->Set("valid_begin", m_ValidBegin);
-       bag->Set("valid_end", m_ValidEnd);
-       bag->Set("segments", m_Segments);
+       if (attributeTypes & Attribute_State) {
+               bag->Set("valid_begin", m_ValidBegin);
+               bag->Set("valid_end", m_ValidEnd);
+               bag->Set("segments", m_Segments);
+       }
 }
 
 void TimePeriod::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes)
@@ -346,7 +348,9 @@ void TimePeriod::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTy
                m_Ranges = bag->Get("ranges");
        }
 
-       m_ValidBegin = bag->Get("valid_begin");
-       m_ValidEnd = bag->Get("valid_end");
-       m_Segments = bag->Get("segments");
+       if (attributeTypes & Attribute_State) {
+               m_ValidBegin = bag->Get("valid_begin");
+               m_ValidEnd = bag->Get("valid_end");
+               m_Segments = bag->Get("segments");
+       }
 }
index 47ec2110a5307f2937c1afce5189eb206abdceac..b4dcb24d52babacfa4ee0de9e6411a72f24725d3 100644 (file)
@@ -154,8 +154,10 @@ void User::InternalSerialize(const Dictionary::Ptr& bag, int attributeTypes) con
                bag->Set("notification_state_filter", m_NotificationStateFilter);
        }
 
-       bag->Set("enable_notifications", m_EnableNotifications);
-       bag->Set("last_notification", m_LastNotification);
+       if (attributeTypes & Attribute_State) {
+               bag->Set("enable_notifications", m_EnableNotifications);
+               bag->Set("last_notification", m_LastNotification);
+       }
 }
 
 void User::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes)
@@ -171,6 +173,8 @@ void User::InternalDeserialize(const Dictionary::Ptr& bag, int attributeTypes)
                m_NotificationStateFilter = bag->Get("notification_state_filter");
        }
 
-       m_EnableNotifications = bag->Get("enable_notifications");
-       m_LastNotification = bag->Get("last_notification");
+       if (attributeTypes & Attribute_State) {
+               m_EnableNotifications = bag->Get("enable_notifications");
+               m_LastNotification = bag->Get("last_notification");
+       }
 }