-{-| External data loader
+{-| External data loader.
This module holds the external data loading, and thus is the only one
depending (via the specialized Text\/Rapi\/Luxi modules) on the actual
, maybeSaveData
) where
+import Control.Monad
import Data.Maybe (isJust, fromJust)
-import Monad
import System.FilePath
import System.IO
import System
import Ganeti.HTools.CLI
import Ganeti.HTools.Utils (sepSplit, tryRead)
--- | Error beautifier
+-- | Error beautifier.
wrapIO :: IO (Result a) -> IO (Result a)
wrapIO = flip catch (return . Bad . show)
parseUtilisation :: String -> Result (String, DynUtil)
parseUtilisation line =
- let columns = sepSplit ' ' line
- in case columns of
- [name, cpu, mem, dsk, net] -> do
- rcpu <- tryRead name cpu
- rmem <- tryRead name mem
- rdsk <- tryRead name dsk
- rnet <- tryRead name net
- let du = DynUtil { cpuWeight = rcpu, memWeight = rmem
- , dskWeight = rdsk, netWeight = rnet }
- return (name, du)
- _ -> Bad $ "Cannot parse line " ++ line
+ case sepSplit ' ' line of
+ [name, cpu, mem, dsk, net] ->
+ do
+ rcpu <- tryRead name cpu
+ rmem <- tryRead name mem
+ rdsk <- tryRead name dsk
+ rnet <- tryRead name net
+ let du = DynUtil { cpuWeight = rcpu, memWeight = rmem
+ , dskWeight = rdsk, netWeight = rnet }
+ return (name, du)
+ _ -> Bad $ "Cannot parse line " ++ line
-- | External tool data loader from a variety of sources.
loadExternalData :: Options
exTags = case optExTags opts of
Nothing -> []
Just etl -> map (++ ":") etl
+ selInsts = optSelInst opts
exInsts = optExInst opts
when (length allSet > 1) $
| setFile -> wrapIO $ Text.loadData $ fromJust tfile
| otherwise -> return $ Bad "No backend selected! Exiting."
- let ldresult = input_data >>= mergeData util_data' exTags exInsts
+ let ldresult = input_data >>= mergeData util_data' exTags selInsts exInsts
cdata <-
(case ldresult of
Ok x -> return x