diff --git a/hscan.hs b/hscan.hs index b2a4a9f7def9022f98eebb45510787c93f7508b5..c14846f21c05945aaace0533a4de71f385cc6c13 100644 --- a/hscan.hs +++ b/hscan.hs @@ -6,7 +6,7 @@ {- -Copyright (C) 2009, 2010 Google Inc. +Copyright (C) 2009, 2010, 2011 Google Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -89,9 +89,9 @@ fixSlash = map (\x -> if x == '/' then '_' else x) -- | Generates serialized data from loader input. -processData :: Result ClusterData -> Result ClusterData +processData :: ClusterData -> Result ClusterData processData input_data = do - cdata@(ClusterData _ nl il _) <- input_data >>= mergeData [] [] [] + cdata@(ClusterData _ nl il _) <- mergeData [] [] [] input_data let (_, fix_nl) = checkData nl il return cdata { cdNodes = fix_nl } @@ -106,7 +106,20 @@ writeData _ name _ (Bad err) = return False writeData nlen name opts (Ok cdata) = do - let (ClusterData _ nl il _) = cdata + let fixdata = processData cdata + case fixdata of + Bad err -> printf "\nError for %s: failed to process data. Details:\n%s\n" + name err >> return False + Ok processed -> writeDataInner nlen name opts cdata processed + +writeDataInner :: Int + -> String + -> Options + -> ClusterData + -> ClusterData + -> IO Bool +writeDataInner nlen name opts cdata fixdata = do + let (ClusterData _ nl il _) = fixdata printf "%-*s " nlen name :: IO () hFlush stdout let shownodes = optShowNodes opts @@ -139,14 +152,14 @@ main = do let lsock = fromMaybe defaultLuxiSocket (optLuxi opts) let name = local input_data <- Luxi.loadData lsock - result <- writeData nlen name opts (processData input_data) + result <- writeData nlen name opts input_data when (not result) $ exitWith $ ExitFailure 2 #ifndef NO_CURL results <- mapM (\ name -> do input_data <- Rapi.loadData name - writeData nlen name opts (processData input_data) + writeData nlen name opts input_data ) clusters when (not $ all id results) $ exitWith (ExitFailure 2) #else