From: Michael Friedrich Date: Thu, 6 Feb 2014 14:27:50 +0000 (+0100) Subject: Add IcingaNodeName script variable, set as check source (WIP). X-Git-Tag: v0.0.8~70 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1e0a11c7f22902979b0c6cab468c2df0bc3a0889;p=icinga2 Add IcingaNodeName script variable, set as check source (WIP). Fixes #5471 Fixes #5473 --- diff --git a/doc/4.2-global-variables.md b/doc/4.2-global-variables.md index d550b8743..98c82c856 100644 --- a/doc/4.2-global-variables.md +++ b/doc/4.2-global-variables.md @@ -11,6 +11,7 @@ IcingaPkgDataDir |**Read-only.** Contains the path of the package data IcingaStatePath |**Read-write.** Contains the path of the Icinga 2 state file. Defaults to IcingaLocalStateDir + "/lib/icinga2/icinga2.state". IcingaPidPath |**Read-write.** Contains the path of the Icinga 2 PID file. Defaults to IcingaLocalStateDir + "/run/icinga2/icinga2.pid". IcingaMacros |**Read-write.** Contains a dictionary with global macros. Not set by default. +IcingaNodeName |**Read-write.** Contains the cluster node name. Set to the local hostname by default. ApplicationType |**Read-write.** Contains the name of the Application type. Defaults to "icinga/IcingaApplication". IcingaEnableNotifications |**Read-write.** Whether notifications are globally enabled. Defaults to true. IcingaEnableEventHandlers |**Read-write.** Whether event handlers are globally enabled. Defaults to true. diff --git a/lib/base/utility.cpp b/lib/base/utility.cpp index de010ac4d..d8025d6d0 100644 --- a/lib/base/utility.cpp +++ b/lib/base/utility.cpp @@ -755,6 +755,16 @@ int Utility::CompareVersion(const String& v1, const String& v2) return 0; } +String Utility::GetHostName(void) +{ + char name[255]; + + if (gethostname(name, sizeof(name)) < 0) + strcpy(name, ""); + + return String(name); +} + int Utility::Random(void) { #ifdef _WIN32 diff --git a/lib/base/utility.h b/lib/base/utility.h index 6ae981e1f..c0354f534 100644 --- a/lib/base/utility.h +++ b/lib/base/utility.h @@ -108,6 +108,8 @@ public: static int Random(void); + static String GetHostName(void); + static tm LocalTime(time_t ts); private: diff --git a/lib/icinga/icingaapplication.cpp b/lib/icinga/icingaapplication.cpp index 2a566091c..cef46b726 100644 --- a/lib/icinga/icingaapplication.cpp +++ b/lib/icinga/icingaapplication.cpp @@ -42,6 +42,7 @@ void IcingaApplication::StaticInitialize(void) ScriptVariable::Set("IcingaEnableFlapping", true); ScriptVariable::Set("IcingaEnableChecks", true); ScriptVariable::Set("IcingaEnablePerfdata", true); + ScriptVariable::Set("IcingaNodeName", Utility::GetHostName()); } /** @@ -93,6 +94,11 @@ Dictionary::Ptr IcingaApplication::GetMacros(void) const return ScriptVariable::Get("IcingaMacros"); } +String IcingaApplication::GetIcingaNodeName(void) const +{ + return ScriptVariable::Get("IcingaNodeName"); +} + bool IcingaApplication::ResolveMacro(const String& macro, const CheckResult::Ptr&, String *result) const { double now = Utility::GetTime(); diff --git a/lib/icinga/icingaapplication.h b/lib/icinga/icingaapplication.h index 02e85c29f..c8b6be81c 100644 --- a/lib/icinga/icingaapplication.h +++ b/lib/icinga/icingaapplication.h @@ -46,6 +46,7 @@ public: String GetPidPath(void) const; Dictionary::Ptr GetMacros(void) const; + String GetIcingaNodeName(void) const; virtual bool ResolveMacro(const String& macro, const CheckResult::Ptr& cr, String *result) const; diff --git a/lib/methods/icingachecktask.cpp b/lib/methods/icingachecktask.cpp index afee0ba3d..a165d2133 100644 --- a/lib/methods/icingachecktask.cpp +++ b/lib/methods/icingachecktask.cpp @@ -20,6 +20,7 @@ #include "methods/icingachecktask.h" #include "icinga/cib.h" #include "icinga/service.h" +#include "icinga/icingaapplication.h" #include "base/application.h" #include "base/utility.h" #include "base/scriptfunction.h" @@ -64,6 +65,7 @@ CheckResult::Ptr IcingaCheckTask::ScriptFunc(const Service::Ptr&) cr->SetOutput("Icinga 2 is running."); cr->SetPerformanceData(perfdata); cr->SetState(StateOK); + cr->SetCheckSource(IcingaApplication::GetInstance()->GetIcingaNodeName()); return cr; } diff --git a/lib/methods/pluginchecktask.cpp b/lib/methods/pluginchecktask.cpp index 2bf0b0397..0456cc31c 100644 --- a/lib/methods/pluginchecktask.cpp +++ b/lib/methods/pluginchecktask.cpp @@ -79,6 +79,7 @@ CheckResult::Ptr PluginCheckTask::ScriptFunc(const Service::Ptr& service) result->SetExitStatus(pr.ExitStatus); result->SetExecutionStart(pr.ExecutionStart); result->SetExecutionEnd(pr.ExecutionEnd); + result->SetCheckSource(IcingaApplication::GetInstance()->GetIcingaNodeName()); return result; } diff --git a/lib/methods/randomchecktask.cpp b/lib/methods/randomchecktask.cpp index 561d67cb7..16e4f9eee 100644 --- a/lib/methods/randomchecktask.cpp +++ b/lib/methods/randomchecktask.cpp @@ -20,6 +20,7 @@ #ifndef _WIN32 # include #endif /* _WIN32 */ +#include "icinga/icingaapplication.h" #include "methods/randomchecktask.h" #include "base/utility.h" #include "base/convert.h" @@ -47,6 +48,7 @@ CheckResult::Ptr RandomCheckTask::ScriptFunc(const Service::Ptr&) cr->SetOutput(output); cr->SetPerformanceData(perfdata); cr->SetState(static_cast(Utility::Random() % 4)); + cr->SetCheckSource(IcingaApplication::GetInstance()->GetIcingaNodeName()); return cr; }