Revision e71c47d3

b/src/Ganeti/DataCollectors/Drbd.hs
46 46
import Ganeti.Confd.Client
47 47
import Ganeti.Confd.Types
48 48
import Ganeti.DataCollectors.CLI
49
import Ganeti.DataCollectors.Types
49 50
import Ganeti.Utils
50 51

  
51 52

  
......
61 62
defaultCharNum :: Int
62 63
defaultCharNum = 80*20
63 64

  
65
-- | The name of this data collector.
66
dcName :: String
67
dcName = "drbd"
68

  
69
-- | The version number for the data format of this data collector.
70
dcFormatVersion :: Int
71
dcFormatVersion = 1
72

  
64 73
options :: IO [OptType]
65 74
options =
66 75
  return
......
95 104
      J.Ok instMinor -> BT.Ok instMinor
96 105
      J.Error msg -> BT.Bad msg
97 106

  
98
-- | Main function.
99
main :: Options -> [String] -> IO ()
100
main opts args = do
101
  let proc_drbd = fromMaybe defaultFile $ optDrbdStatus opts
102
      instMinor = optDrbdPairing opts
103
  unless (null args) . exitErr $ "This program takes exactly zero" ++
104
                                  " arguments, got '" ++ unwords args ++ "'"
107
-- | This function builds a report with the DRBD status.
108
buildDRBDReport :: FilePath -> Maybe FilePath -> IO DCReport
109
buildDRBDReport statusFile pairingFile = do
105 110
  contents <-
106
    ((E.try $ readFile proc_drbd) :: IO (Either IOError String)) >>=
111
    ((E.try $ readFile statusFile) :: IO (Either IOError String)) >>=
107 112
      exitIfBad "reading from file" . either (BT.Bad . show) BT.Ok
108
  pairingResult <- getPairingInfo instMinor
113
  pairingResult <- getPairingInfo pairingFile
109 114
  pairing <- exitIfBad "Can't get pairing info" pairingResult
110
  output <-
115
  jsonData <-
111 116
    case A.parse (drbdStatusParser pairing) $ pack contents of
112 117
      A.Fail unparsedText contexts errorMessage -> exitErr $
113 118
        show (Prelude.take defaultCharNum $ unpack unparsedText) ++ "\n"
114 119
          ++ show contexts ++ "\n" ++ errorMessage
115
      A.Done _ drbdStatus -> return $ J.encode drbdStatus
116
  putStrLn output
120
      A.Done _ drbdStatus -> return $ J.showJSON drbdStatus
121
  buildReport dcName Nothing dcFormatVersion jsonData
122

  
123
-- | Main function.
124
main :: Options -> [String] -> IO ()
125
main opts args = do
126
  let statusFile = fromMaybe defaultFile $ optDrbdStatus opts
127
      pairingFile = optDrbdPairing opts
128
  unless (null args) . exitErr $ "This program takes exactly zero" ++
129
                                  " arguments, got '" ++ unwords args ++ "'"
130
  report <- buildDRBDReport statusFile pairingFile
131
  putStrLn $ J.encode report

Also available in: Unified diff