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