libicinga.la
libicinga_la_SOURCES = \
+ acknowledgement.h \
cib.cpp \
cib.h \
externalcommand.cpp \
--- /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 ACKNOWLEDGEMENT_H
+#define ACKNOWLEDGEMENT_H
+
+namespace icinga
+{
+
+/**
+ * The acknowledgement type of a host/service.
+ *
+ * @ingroup icinga
+ */
+enum AcknowledgementType
+{
+ AcknowledgementNone = 0,
+ AcknowledgementNormal = 1,
+ AcknowledgementSticky = 2
+};
+
+}
+
+#endif /* ACKNOWLEDGEMENT_H */
RegisterCommand("DISABLE_HOST_SVC_CHECKS", &ExternalCommand::DisableHostSvcChecks);
RegisterCommand("ACKNOWLEDGE_SVC_PROBLEM", &ExternalCommand::AcknowledgeSvcProblem);
RegisterCommand("ACKNOWLEDGE_SVC_PROBLEM_EXPIRE", &ExternalCommand::AcknowledgeSvcProblemExpire);
- RegisterCommand("REMOVE_SVC_ACKNOWLEDGEMENT", &ExternalCommand::RemoveSvcAcknowledgement);
+ RegisterCommand("REMOVE_SVC_ACKNOWLEDGEMENT", &ExternalCommand::RemoveHostAcknowledgement);
+ RegisterCommand("ACKNOWLEDGE_HOST_PROBLEM", &ExternalCommand::AcknowledgeHostProblem);
+ RegisterCommand("ACKNOWLEDGE_HOST_PROBLEM_EXPIRE", &ExternalCommand::AcknowledgeHostProblemExpire);
+ RegisterCommand("REMOVE_HOST_ACKNOWLEDGEMENT", &ExternalCommand::RemoveHostAcknowledgement);
RegisterCommand("ENABLE_HOSTGROUP_SVC_CHECKS", &ExternalCommand::EnableHostgroupSvcChecks);
RegisterCommand("DISABLE_HOSTGROUP_SVC_CHECKS", &ExternalCommand::DisableHostgroupSvcChecks);
RegisterCommand("ENABLE_SERVICEGROUP_SVC_CHECKS", &ExternalCommand::EnableServicegroupSvcChecks);
service->SetAcknowledgementExpiry(0);
}
+void ExternalCommand::AcknowledgeHostProblem(double time, const vector<String>& arguments)
+{
+ if (arguments.size() < 7)
+ throw_exception(invalid_argument("Expected 7 arguments."));
+
+ if (!Host::Exists(arguments[1]))
+ throw_exception(invalid_argument("The host '" + arguments[1] + "' does not exist."));
+
+ int sticky = arguments[2].ToDouble();
+
+ Host::Ptr host = Host::GetByName(arguments[1]);
+
+ if (host->IsUp())
+ throw_exception(invalid_argument("The host '" + arguments[1] + "' is OK."));
+
+ Logger::Write(LogInformation, "icinga", "Setting acknowledgement for host '" + host->GetName() + "'");
+ host->SetAcknowledgement(sticky ? AcknowledgementSticky : AcknowledgementNormal);
+ host->SetAcknowledgementExpiry(0);
+}
+
+void ExternalCommand::AcknowledgeHostProblemExpire(double time, const vector<String>& arguments)
+{
+ if (arguments.size() < 8)
+ throw_exception(invalid_argument("Expected 8 arguments."));
+
+ if (!Host::Exists(arguments[1]))
+ throw_exception(invalid_argument("The host '" + arguments[1] + "' does not exist."));
+
+ int sticky = arguments[2].ToDouble();
+ double timestamp = arguments[5].ToDouble();
+
+ Host::Ptr host = Host::GetByName(arguments[1]);
+
+ if (host->IsUp())
+ throw_exception(invalid_argument("The host '" + arguments[1] + "' is OK."));
+
+ Logger::Write(LogInformation, "icinga", "Setting timed acknowledgement for host '" + host->GetName() + "'");
+ host->SetAcknowledgement(sticky ? AcknowledgementSticky : AcknowledgementNormal);
+ host->SetAcknowledgementExpiry(timestamp);
+}
+
+void ExternalCommand::RemoveHostAcknowledgement(double time, const vector<String>& arguments)
+{
+ if (arguments.size() < 2)
+ throw_exception(invalid_argument("Expected 2 arguments."));
+
+ if (!Host::Exists(arguments[1]))
+ throw_exception(invalid_argument("The host '" + arguments[1] + "' does not exist."));
+
+ Host::Ptr host = Host::GetByName(arguments[1]);
+
+ Logger::Write(LogInformation, "icinga", "Removing acknowledgement for host '" + host->GetName() + "'");
+ host->SetAcknowledgement(AcknowledgementNone);
+ host->SetAcknowledgementExpiry(0);
+}
+
void ExternalCommand::EnableHostgroupSvcChecks(double time, const vector<String>& arguments)
{
if (arguments.size() < 1)
static void AcknowledgeSvcProblem(double time, const vector<String>& arguments);
static void AcknowledgeSvcProblemExpire(double time, const vector<String>& arguments);
static void RemoveSvcAcknowledgement(double time, const vector<String>& arguments);
+ static void AcknowledgeHostProblem(double time, const vector<String>& arguments);
+ static void AcknowledgeHostProblemExpire(double time, const vector<String>& arguments);
+ static void RemoveHostAcknowledgement(double time, const vector<String>& arguments);
static void EnableHostgroupSvcChecks(double time, const vector<String>& arguments);
static void DisableHostgroupSvcChecks(double time, const vector<String>& arguments);
static void EnableServicegroupSvcChecks(double time, const vector<String>& arguments);
static AttributeDescription hostAttributes[] = {
{ "alias", Attribute_Config },
- { "hostgroups", Attribute_Config }
+ { "hostgroups", Attribute_Config },
+ { "acknowledgement", Attribute_Replicated },
+ { "acknowledgement_expiry", Attribute_Replicated }
};
REGISTER_TYPE(Host, hostAttributes);
return services;
}
+AcknowledgementType Host::GetAcknowledgement(void)
+{
+ Value value = Get("acknowledgement");
+
+ if (value.IsEmpty())
+ return AcknowledgementNone;
+
+ int ivalue = static_cast<int>(value);
+ AcknowledgementType avalue = static_cast<AcknowledgementType>(ivalue);
+
+ if (avalue != AcknowledgementNone) {
+ double expiry = GetAcknowledgementExpiry();
+
+ if (expiry != 0 && expiry < Utility::GetTime()) {
+ avalue = AcknowledgementNone;
+ SetAcknowledgement(avalue);
+ SetAcknowledgementExpiry(0);
+ }
+ }
+
+ return avalue;
+}
+
+void Host::SetAcknowledgement(AcknowledgementType acknowledgement)
+{
+ Set("acknowledgement", static_cast<long>(acknowledgement));
+}
+
+double Host::GetAcknowledgementExpiry(void) const
+{
+ Value value = Get("acknowledgement_expiry");
+
+ if (value.IsEmpty())
+ return 0;
+
+ return static_cast<double>(value);
+}
+
+void Host::SetAcknowledgementExpiry(double timestamp)
+{
+ Set("acknowledgement_expiry", timestamp);
+}
+
void Host::InvalidateServicesCache(void)
{
m_ServicesCacheValid = false;
String GetAlias(void) const;
Dictionary::Ptr GetGroups(void) const;
+
set<Host::Ptr> GetParents(void);
Dictionary::Ptr GetMacros(void) const;
+ AcknowledgementType GetAcknowledgement(void);
+ void SetAcknowledgement(AcknowledgementType acknowledgement);
+
+ double GetAcknowledgementExpiry(void) const;
+ void SetAcknowledgementExpiry(double timestamp);
+
bool IsReachable(void);
bool IsUp(void);
#include "timeperiod.h"
+#include "acknowledgement.h"
+
#include "host.h"
#include "hostgroup.h"
#include "service.h"
<ClCompile Include="timeperiod.cpp" />
</ItemGroup>
<ItemGroup>
+ <ClInclude Include="acknowledgement.h" />
<ClInclude Include="cib.h" />
<ClInclude Include="externalcommand.h" />
<ClInclude Include="host.h" />
<ClInclude Include="externalcommand.h">
<Filter>Headerdateien</Filter>
</ClInclude>
+ <ClInclude Include="acknowledgement.h">
+ <Filter>Headerdateien</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<Filter Include="Headerdateien">
StateTypeHard
};
-/**
- * The acknowledgement type of a service.
- *
- * @ingroup icinga
- */
-enum AcknowledgementType
-{
- AcknowledgementNone = 0,
- AcknowledgementNormal = 1,
- AcknowledgementSticky = 2
-};
-
class CheckResultMessage;
class ServiceStatusMessage;