diff --git a/src/Ganeti/DataCollectors/Drbd.hs b/src/Ganeti/DataCollectors/Drbd.hs index b52e2ce5672909f954dfeee523159f1d37eef1e9..7f2855fad6d89cde9758864435bee45cad80a58c 100644 --- a/src/Ganeti/DataCollectors/Drbd.hs +++ b/src/Ganeti/DataCollectors/Drbd.hs @@ -32,6 +32,7 @@ module Ganeti.DataCollectors.Drbd , dcFormatVersion , dcCategory , dcKind + , dcData ) where @@ -87,6 +88,10 @@ dcCategory = Just DCStorage dcKind :: DCKind dcKind = DCKStatus +-- | The data exported by the data collector, taken from the default location. +dcData :: IO J.JSValue +dcData = buildJsonReport defaultFile Nothing + -- * Command line options options :: IO [OptType] @@ -121,21 +126,19 @@ getPairingInfo (Just filename) = do J.Ok instMinor -> BT.Ok instMinor J.Error msg -> BT.Bad msg --- | This function builds a report with the DRBD status. -buildDRBDReport :: FilePath -> Maybe FilePath -> IO DCReport -buildDRBDReport statusFile pairingFile = do +-- | This function computes the JSON representation of the DRBD status. +buildJsonReport :: FilePath -> Maybe FilePath -> IO J.JSValue +buildJsonReport statusFile pairingFile = do contents <- ((E.try $ readFile statusFile) :: IO (Either IOError String)) >>= exitIfBad "reading from file" . either (BT.Bad . show) BT.Ok pairingResult <- getPairingInfo pairingFile pairing <- exitIfBad "Can't get pairing info" pairingResult - jsonData <- - case A.parse (drbdStatusParser pairing) $ pack contents of - A.Fail unparsedText contexts errorMessage -> exitErr $ - show (Prelude.take defaultCharNum $ unpack unparsedText) ++ "\n" - ++ show contexts ++ "\n" ++ errorMessage - A.Done _ drbdStatus -> return $ J.showJSON drbdStatus - buildReport dcName dcVersion dcFormatVersion dcCategory dcKind jsonData + case A.parse (drbdStatusParser pairing) $ pack contents of + A.Fail unparsedText contexts errorMessage -> exitErr $ + show (Prelude.take defaultCharNum $ unpack unparsedText) ++ "\n" + ++ show contexts ++ "\n" ++ errorMessage + A.Done _ drbdStatus -> return $ J.showJSON drbdStatus -- | Main function. main :: Options -> [String] -> IO () @@ -144,5 +147,6 @@ main opts args = do pairingFile = optDrbdPairing opts unless (null args) . exitErr $ "This program takes exactly zero" ++ " arguments, got '" ++ unwords args ++ "'" - report <- buildDRBDReport statusFile pairingFile + report <- buildJsonReport statusFile pairingFile >>= + buildReport dcName dcVersion dcFormatVersion dcCategory dcKind putStrLn $ J.encode report