Revision 8c5419ee src/Ganeti/DataCollectors/Drbd.hs

b/src/Ganeti/DataCollectors/Drbd.hs
32 32
  , dcFormatVersion
33 33
  , dcCategory
34 34
  , dcKind
35
  , dcData
35 36
  ) where
36 37

  
37 38

  
......
87 88
dcKind :: DCKind
88 89
dcKind = DCKStatus
89 90

  
91
-- | The data exported by the data collector, taken from the default location.
92
dcData :: IO J.JSValue
93
dcData = buildJsonReport defaultFile Nothing
94

  
90 95
-- * Command line options
91 96

  
92 97
options :: IO [OptType]
......
121 126
      J.Ok instMinor -> BT.Ok instMinor
122 127
      J.Error msg -> BT.Bad msg
123 128

  
124
-- | This function builds a report with the DRBD status.
125
buildDRBDReport :: FilePath -> Maybe FilePath -> IO DCReport
126
buildDRBDReport statusFile pairingFile = do
129
-- | This function computes the JSON representation of the DRBD status.
130
buildJsonReport :: FilePath -> Maybe FilePath -> IO J.JSValue
131
buildJsonReport statusFile pairingFile = do
127 132
  contents <-
128 133
    ((E.try $ readFile statusFile) :: IO (Either IOError String)) >>=
129 134
      exitIfBad "reading from file" . either (BT.Bad . show) BT.Ok
130 135
  pairingResult <- getPairingInfo pairingFile
131 136
  pairing <- exitIfBad "Can't get pairing info" pairingResult
132
  jsonData <-
133
    case A.parse (drbdStatusParser pairing) $ pack contents of
134
      A.Fail unparsedText contexts errorMessage -> exitErr $
135
        show (Prelude.take defaultCharNum $ unpack unparsedText) ++ "\n"
136
          ++ show contexts ++ "\n" ++ errorMessage
137
      A.Done _ drbdStatus -> return $ J.showJSON drbdStatus
138
  buildReport dcName dcVersion dcFormatVersion dcCategory dcKind jsonData
137
  case A.parse (drbdStatusParser pairing) $ pack contents of
138
    A.Fail unparsedText contexts errorMessage -> exitErr $
139
      show (Prelude.take defaultCharNum $ unpack unparsedText) ++ "\n"
140
        ++ show contexts ++ "\n" ++ errorMessage
141
    A.Done _ drbdStatus -> return $ J.showJSON drbdStatus
139 142

  
140 143
-- | Main function.
141 144
main :: Options -> [String] -> IO ()
......
144 147
      pairingFile = optDrbdPairing opts
145 148
  unless (null args) . exitErr $ "This program takes exactly zero" ++
146 149
                                  " arguments, got '" ++ unwords args ++ "'"
147
  report <- buildDRBDReport statusFile pairingFile
150
  report <- buildJsonReport statusFile pairingFile >>=
151
    buildReport dcName dcVersion dcFormatVersion dcCategory dcKind
148 152
  putStrLn $ J.encode report

Also available in: Unified diff