From 0915b3ef56dfac3113cce55a59a5765dc94976be Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 28 Apr 2024 14:34:54 +0200 Subject: Adding upstream version 2.13.6. Signed-off-by: Daniel Baumann --- lib/base/configobject.hpp | 101 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 lib/base/configobject.hpp (limited to 'lib/base/configobject.hpp') diff --git a/lib/base/configobject.hpp b/lib/base/configobject.hpp new file mode 100644 index 0000000..5596363 --- /dev/null +++ b/lib/base/configobject.hpp @@ -0,0 +1,101 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#ifndef CONFIGOBJECT_H +#define CONFIGOBJECT_H + +#include "base/i2-base.hpp" +#include "base/configobject-ti.hpp" +#include "base/object.hpp" +#include "base/type.hpp" +#include "base/dictionary.hpp" +#include + +namespace icinga +{ + +class ConfigType; + +/** + * A dynamic object that can be instantiated from the configuration file. + * + * @ingroup base + */ +class ConfigObject : public ObjectImpl +{ +public: + DECLARE_OBJECT(ConfigObject); + + static boost::signals2::signal OnStateChanged; + + bool IsActive() const; + bool IsPaused() const; + + void SetExtension(const String& key, const Value& value); + Value GetExtension(const String& key); + void ClearExtension(const String& key); + + ConfigObject::Ptr GetZone() const; + + void ModifyAttribute(const String& attr, const Value& value, bool updateVersion = true); + void RestoreAttribute(const String& attr, bool updateVersion = true); + bool IsAttributeModified(const String& attr) const; + + void Register(); + void Unregister(); + + void PreActivate(); + void Activate(bool runtimeCreated = false, const Value& cookie = Empty); + void Deactivate(bool runtimeRemoved = false, const Value& cookie = Empty); + void SetAuthority(bool authority); + + void Start(bool runtimeCreated = false) override; + void Stop(bool runtimeRemoved = false) override; + + virtual void Pause(); + virtual void Resume(); + + virtual void OnConfigLoaded(); + virtual void CreateChildObjects(const Type::Ptr& childType); + virtual void OnAllConfigLoaded(); + virtual void OnStateLoaded(); + + Dictionary::Ptr GetSourceLocation() const override; + + template + static intrusive_ptr GetObject(const String& name) + { + typedef TypeImpl ObjType; + auto *ptype = static_cast(T::TypeInstance.get()); + return static_pointer_cast(ptype->GetObject(name)); + } + + static ConfigObject::Ptr GetObject(const String& type, const String& name); + + static void DumpObjects(const String& filename, int attributeTypes = FAState); + static void RestoreObjects(const String& filename, int attributeTypes = FAState); + static void StopObjects(); + + static void DumpModifiedAttributes(const std::function& callback); + + static Object::Ptr GetPrototype(); + +private: + ConfigObject::Ptr m_Zone; + + static void RestoreObject(const String& message, int attributeTypes); +}; + +#define DECLARE_OBJECTNAME(klass) \ + inline static String GetTypeName() \ + { \ + return #klass; \ + } \ + \ + inline static intrusive_ptr GetByName(const String& name) \ + { \ + return ConfigObject::GetObject(name); \ + } + +} + +#endif /* CONFIGOBJECT_H */ -- cgit v1.2.3