Compute the actual state of the instance and export it.

Signed-off-by: Michele Tartara <[email protected]>
---
 src/Ganeti/DataCollectors/InstStatus.hs      | 11 +++++++++++
 src/Ganeti/DataCollectors/InstStatusTypes.hs |  2 ++
 2 files changed, 13 insertions(+)

diff --git a/src/Ganeti/DataCollectors/InstStatus.hs 
b/src/Ganeti/DataCollectors/InstStatus.hs
index 3209f75..acd459b 100644
--- a/src/Ganeti/DataCollectors/InstStatus.hs
+++ b/src/Ganeti/DataCollectors/InstStatus.hs
@@ -42,6 +42,7 @@ import Ganeti.Common
 import Ganeti.DataCollectors.CLI
 import Ganeti.DataCollectors.InstStatusTypes
 import Ganeti.Hypervisor.Xen
+import Ganeti.Hypervisor.Xen.Types
 import Ganeti.Objects
 import Ganeti.Utils
 
@@ -89,11 +90,21 @@ buildStatus domains uptimes inst = do
       currUInfo = idNum >>= (`Map.lookup` uptimes)
       uptime = fmap uInfoUptime currUInfo
       adminState = instAdminState inst
+      actualState =
+        if adminState == AdminDown && isNothing currDomain
+          then ActualShutdown
+          else case currDomain of
+            (Just dom@(Domain _ _ _ _ (Just isHung))) ->
+              if isHung
+                then ActualHung
+                else domState dom
+            _ -> ActualUnknown
   return $
     InstStatus
       name
       (instUuid inst)
       adminState
+      actualState
       uptime
       (instMtime inst)
 
diff --git a/src/Ganeti/DataCollectors/InstStatusTypes.hs 
b/src/Ganeti/DataCollectors/InstStatusTypes.hs
index 5eabd3c..b26578c 100644
--- a/src/Ganeti/DataCollectors/InstStatusTypes.hs
+++ b/src/Ganeti/DataCollectors/InstStatusTypes.hs
@@ -29,6 +29,7 @@ module Ganeti.DataCollectors.InstStatusTypes
   ) where
 
 
+import Ganeti.Hypervisor.Xen.Types
 import Ganeti.Objects
 import Ganeti.THH
 
@@ -37,6 +38,7 @@ $(buildObject "InstStatus" "iStat"
   [ simpleField "name"         [t| String |]
   , simpleField "uuid"         [t| String |]
   , simpleField "adminState"   [t| AdminState |]
+  , simpleField "actualState"  [t| ActualState |]
   , optionalNullSerField $
     simpleField "uptime"       [t| String |]
   , simpleField "mtime"        [t| Double |]
-- 
1.8.2.1

Reply via email to