Revision fc4be2bf

b/src/Ganeti/DataCollectors/InstStatus.hs
41 41
import Ganeti.Common
42 42
import Ganeti.DataCollectors.CLI
43 43
import Ganeti.DataCollectors.InstStatusTypes
44
import Ganeti.DataCollectors.Types
44 45
import Ganeti.Hypervisor.Xen
45 46
import Ganeti.Hypervisor.Xen.Types
46 47
import Ganeti.Objects
......
78 79
      Just (J.Error msg) -> BT.Bad msg
79 80
      Nothing -> BT.Bad "No answer from the Confd server"
80 81

  
82
-- | Determine the value of the status field for the report of one instance
83
computeStatusField :: AdminState -> ActualState -> DCStatus
84
computeStatusField AdminDown actualState =
85
  if actualState `notElem` [ActualShutdown, ActualDying]
86
    then DCStatus DCSCBad "The instance is not stopped as it should be"
87
    else DCStatus DCSCOk ""
88
computeStatusField AdminUp ActualHung =
89
  DCStatus DCSCUnknown "Instance marked as running, but it appears to be hung"
90
computeStatusField AdminUp actualState =
91
  if actualState `notElem` [ActualRunning, ActualBlocked]
92
    then DCStatus DCSCBad "The instance is not running as it should be"
93
    else DCStatus DCSCOk ""
94
computeStatusField AdminOffline _ =
95
  -- FIXME: The "offline" status seems not to be used anywhere in the source
96
  -- code, but it is defined, so we have to consider it anyway here.
97
  DCStatus DCSCUnknown "The instance is marked as offline"
98

  
81 99
-- Builds the status of an instance using runtime information about the Xen
82 100
-- Domains, their uptime information and the static information provided by
83 101
-- the ConfD server.
......
99 117
                then ActualHung
100 118
                else domState dom
101 119
            _ -> ActualUnknown
120
      status = computeStatusField adminState actualState
102 121
  return $
103 122
    InstStatus
104 123
      name
......
107 126
      actualState
108 127
      uptime
109 128
      (instMtime inst)
129
      status
110 130

  
111 131
-- | Main function.
112 132
main :: Options -> [String] -> IO ()
b/src/Ganeti/DataCollectors/InstStatusTypes.hs
29 29
  ) where
30 30

  
31 31

  
32
import Ganeti.DataCollectors.Types
32 33
import Ganeti.Hypervisor.Xen.Types
33 34
import Ganeti.Objects
34 35
import Ganeti.THH
......
42 43
  , optionalNullSerField $
43 44
    simpleField "uptime"       [t| String |]
44 45
  , simpleField "mtime"        [t| Double |]
46
  , simpleField "status"       [t| DCStatus |]
45 47
  ])

Also available in: Unified diff