]> granicus.if.org Git - icinga2/blobdiff - lib/icinga/host.cpp
Remove the HostUnreachable state.
[icinga2] / lib / icinga / host.cpp
index 095066c89bf7c4aea40477fe907211977bc3c758..3723055bd7a4aeff21fb9f37cbf942fb377a5327 100644 (file)
@@ -134,11 +134,8 @@ Service::Ptr Host::GetServiceByShortName(const Value& name)
        }
 }
 
-HostState Host::CalculateState(ServiceState state, bool reachable)
+HostState Host::CalculateState(ServiceState state)
 {
-       if (!reachable)
-               return HostUnreachable;
-
        switch (state) {
                case StateOK:
                case StateWarning:
@@ -152,49 +149,21 @@ HostState Host::GetState(void) const
 {
        ASSERT(!OwnsLock());
 
-       if (!IsReachable())
-               return HostUnreachable;
-
-       switch (GetStateRaw()) {
-               case StateOK:
-               case StateWarning:
-                       return HostUp;
-               default:
-                       return HostDown;
-       }
-
+       return CalculateState(GetStateRaw());
 }
 
 HostState Host::GetLastState(void) const
 {
        ASSERT(!OwnsLock());
 
-       if (!IsReachable())
-               return HostUnreachable;
-
-       switch (GetLastStateRaw()) {
-               case StateOK:
-               case StateWarning:
-                       return HostUp;
-               default:
-                       return HostDown;
-       }
+       return CalculateState(GetLastStateRaw());
 }
 
 HostState Host::GetLastHardState(void) const
 {
        ASSERT(!OwnsLock());
 
-       if (!IsReachable())
-               return HostUnreachable;
-
-       switch (GetLastHardStateRaw()) {
-               case StateOK:
-               case StateWarning:
-                       return HostUp;
-               default:
-                       return HostDown;
-       }
+       return CalculateState(GetLastHardStateRaw());
 }
 
 double Host::GetLastStateUp(void) const
@@ -218,12 +187,8 @@ HostState Host::StateFromString(const String& state)
 {
        if (state == "UP")
                return HostUp;
-       else if (state == "DOWN")
-               return HostDown;
-       else if (state == "UNREACHABLE")
-               return HostUnreachable;
        else
-               return HostUnreachable;
+               return HostDown;
 }
 
 String Host::StateToString(HostState state)
@@ -233,8 +198,6 @@ String Host::StateToString(HostState state)
                        return "UP";
                case HostDown:
                        return "DOWN";
-               case HostUnreachable:
-                       return "UNREACHABLE";
                default:
                        return "INVALID";
        }
@@ -261,6 +224,39 @@ bool Host::ResolveMacro(const String& macro, const CheckResult::Ptr&, String *re
        String key;
        Dictionary::Ptr vars;
 
+       /* special treatment for address macros providing name fallback */
+       if (macro == "address" || macro == "address6") {
+               vars = GetVars();
+
+               String value;
+               if (vars && vars->Contains(macro))
+                       value = vars->Get(macro);
+
+               if (value.IsEmpty()) {
+                       *result = GetName();
+                       return true;
+               } else {
+                       *result = value;
+                       return true;
+               }
+       }
+       else if (macro == "host.vars.address" || macro == "host.vars.address6") {
+               key = macro.SubStr(10);
+               vars = GetVars();
+
+               String value;
+               if (vars && vars->Contains(key))
+                       value = vars->Get(key);
+
+               if (value.IsEmpty()) {
+                       *result = GetName();
+                       return true;
+               } else {
+                       *result = value;
+                       return true;
+               }
+       }
+
        /* require prefix for object macros */
        if (macro.SubStr(0, 5) == "host.") {
                key = macro.SubStr(5);
@@ -286,20 +282,7 @@ bool Host::ResolveMacro(const String& macro, const CheckResult::Ptr&, String *re
                CheckResult::Ptr cr = GetLastCheckResult();
 
                if (key == "state") {
-                       switch (GetState()) {
-                               case HostUnreachable:
-                                       *result = "UNREACHABLE";
-                                       break;
-                               case HostUp:
-                                       *result = "UP";
-                                       break;
-                               case HostDown:
-                                       *result = "DOWN";
-                                       break;
-                               default:
-                                       ASSERT(0);
-                       }
-
+                       *result = StateToString(GetState());
                        return true;
                } else if (key == "stateid") {
                        *result = Convert::ToString(GetState());