}
}
+ /**
+ * Checks whether the task is finished.
+ */
+ bool IsFinished(void) const
+ {
+ return m_Finished;
+ }
+
/**
* Retrieves the result of the task. Throws an exception if one is stored in
* the AsyncTask object.
static boost::signal<void (const DynamicObject::Ptr&)> OnUnregistered;
static boost::signal<void (const set<DynamicObject::Ptr>&)> OnTransactionClosing;
+ /**
+ * Synchronously invokes a method. The method must not return before it's finished.
+ *
+ * @param method The name of the method.
+ * @param arguments Arguments for the method.
+ */
+ template<typename T>
+ T InvokeMethodSync(const String& method, const vector<Value>& arguments)
+ {
+ ScriptTask::Ptr task = InvokeMethod(method, arguments, ScriptTask::CompletionCallback());
+ assert(task->IsFinished());
+ return task->GetResult();
+ }
+
ScriptTask::Ptr InvokeMethod(const String& method,
const vector<Value>& arguments, ScriptTask::CompletionCallback callback);
servicegroup.h \
service.h \
servicestatechangemessage.cpp \
- servicestatechangemessage.h
+ servicestatechangemessage.h \
+ timeperiod.cpp \
+ timeperiod.h
libicinga_la_CPPFLAGS = \
-DI2_ICINGA_BUILD \
#include "endpointmanager.h"
#include "icingaapplication.h"
+#include "timeperiod.h"
+
#include "host.h"
#include "hostgroup.h"
#include "service.h"
<ClCompile Include="service.cpp" />
<ClCompile Include="servicegroup.cpp" />
<ClCompile Include="servicestatechangemessage.cpp" />
+ <ClCompile Include="timeperiod.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="cib.h" />
<ClInclude Include="service.h" />
<ClInclude Include="servicegroup.h" />
<ClInclude Include="servicestatechangemessage.h" />
+ <ClInclude Include="timeperiod.h" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{C1FC77E1-04A4-481B-A78B-2F7AF489C2F8}</ProjectGuid>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
+</Project>
\ No newline at end of file
<ClCompile Include="pluginchecktask.cpp">
<Filter>Quelldateien</Filter>
</ClCompile>
+ <ClCompile Include="timeperiod.cpp">
+ <Filter>Quelldateien</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="i2-icinga.h">
<ClInclude Include="pluginchecktask.h">
<Filter>Headerdateien</Filter>
</ClInclude>
+ <ClInclude Include="timeperiod.h">
+ <Filter>Headerdateien</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="Headerdateien">
--- /dev/null
+/******************************************************************************
+ * Icinga 2 *
+ * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU General Public License *
+ * as published by the Free Software Foundation; either version 2 *
+ * of the License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software Foundation *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ******************************************************************************/
+
+#include "i2-icinga.h"
+
+using namespace icinga;
+
+static AttributeDescription timePeriodAttributes[] = {
+ { "alias", Attribute_Config },
+ { "cached_state", Attribute_Transient },
+ { "cached_next_change", Attribute_Transient }
+};
+
+REGISTER_TYPE(TimePeriod, timePeriodAttributes);
+
+String TimePeriod::GetAlias(void) const
+{
+ String value = Get("alias");
+
+ if (!value.IsEmpty())
+ return value;
+ else
+ return GetName();
+}
+
+bool TimePeriod::Exists(const String& name)
+{
+ return (DynamicObject::GetObject("TimePeriod", name));
+}
+
+TimePeriod::Ptr TimePeriod::GetByName(const String& name)
+{
+ DynamicObject::Ptr configObject = DynamicObject::GetObject("TimePeriod", name);
+
+ if (!configObject)
+ throw_exception(invalid_argument("TimePeriod '" + name + "' does not exist."));
+
+ return dynamic_pointer_cast<TimePeriod>(configObject);
+}
+
+bool TimePeriod::IsActive(void) {
+ if (GetNextChange() > Utility::GetTime()) {
+ vector<Value> args;
+ args.push_back(static_cast<TimePeriod::Ptr>(GetSelf()));
+ return InvokeMethodSync<bool>("is_active", args);
+ } else {
+ return Get("cached_state");
+ }
+}
+
+double TimePeriod::GetNextChange(void) {
+ double next_change = Get("cached_next_change");
+
+ if (next_change < Utility::GetTime()) {
+ vector<Value> args;
+ args.push_back(static_cast<TimePeriod::Ptr>(GetSelf()));
+ next_change = InvokeMethodSync<bool>("is_active", args);
+ // TODO: figure out next_change by calling method
+
+ Set("cached_next_change", next_change);
+ }
+
+ return next_change;
+}
--- /dev/null
+/******************************************************************************
+ * Icinga 2 *
+ * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) *
+ * *
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of the GNU General Public License *
+ * as published by the Free Software Foundation; either version 2 *
+ * of the License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software Foundation *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
+ ******************************************************************************/
+
+#ifndef TIMEPERIOD_H
+#define TIMEPERIOD_H
+
+namespace icinga
+{
+
+class TimePeriod : public DynamicObject {
+public:
+ typedef shared_ptr<TimePeriod> Ptr;
+ typedef weak_ptr<TimePeriod> WeakPtr;
+
+ TimePeriod(const Dictionary::Ptr& properties)
+ : DynamicObject(properties)
+ { }
+
+ static bool Exists(const String& name);
+ static TimePeriod::Ptr GetByName(const String& name);
+
+ String GetAlias(void) const;
+
+ bool IsActive(void);
+ double GetNextChange(void);
+};
+
+}
+
+#endif /* TIMEPERIOD_H */
\ No newline at end of file