Revision 4b77c2a2 htools/Ganeti/HTools/Program/Hcheck.hs

b/htools/Ganeti/HTools/Program/Hcheck.hs
180 180
  let prefix = phaseLevelDescr phase level name
181 181
      descr = descrData level
182 182
  unless (verbose == 0) $ do
183
    printf "\n%s" prefix :: IO ()
183
    putStrLn ""
184
    putStr prefix
184 185
    mapM_ (\(a,b) -> printf "    %s: %s\n" a b) (zip descr values)
185 186

  
186 187
-- | Extract name or idx from group.
......
199 200
  map show stats ++ map (printBool machineread) bstats
200 201

  
201 202
-- | Print all the statistics on a group level.
202
printGroupStats :: Int -> Bool -> Phase -> Group.Group -> [Int] -> Double
203
printGroupStats :: Int -> Bool -> Phase -> ((Group.Group, Double), [Int])
203 204
                -> IO ()
204
printGroupStats verbose machineread phase grp stats score = do
205
printGroupStats verbose machineread phase ((grp, score), stats) = do
205 206
  let values = prepareGroupValues stats score
206 207
      extradata = extractGroupData machineread grp
207 208
  printStats verbose machineread GroupLvl phase values (Just extradata)
......
220 221
instances residing on offline nodes.
221 222

  
222 223
-}
223
perGroupChecks :: Int -> Bool -> Phase -> Group.List
224
               -> (Gdx, (Node.List, Instance.List)) -> IO ([Int])
225
perGroupChecks verbose machineread phase gl (gidx, (nl, il)) = do
224
perGroupChecks :: Group.List
225
               -> (Gdx, (Node.List, Instance.List))
226
               -> ((Group.Group, Double), [Int])
227
perGroupChecks gl (gidx, (nl, il)) =
226 228
  let grp = Container.find gidx gl
227 229
      offnl = filter Node.offline (Container.elems nl)
228 230
      n1violated = length $ fst $ Cluster.computeBadItems nl il
......
236 238
                   , offline_pri
237 239
                   , offline_sec
238 240
                   ]
239
  printGroupStats verbose machineread phase grp groupstats score
240
  return groupstats
241
  in ((grp, score), groupstats)
241 242

  
242 243
-- | Use Hbal's iterateDepth to simulate group rebalance.
243 244
executeSimulation :: Options -> Cluster.Table -> Double
......
300 301

  
301 302
  when machineread $ printGroupsMappings gl
302 303

  
303
  groupsstats <- mapM (perGroupChecks verbose machineread Initial gl)
304
                 splitcluster
305
  let clusterstats = map sum (transpose groupsstats) :: [Int]
304
  let groupsstats = map (perGroupChecks gl) splitcluster
305
      clusterstats = map sum . transpose . map snd $ groupsstats
306 306
      needrebalance = clusterNeedsRebalance clusterstats
307
  printClusterStats verbose machineread Initial clusterstats needrebalance
308 307

  
309
  when nosimulation $ do
310
    unless (verbose == 0 || machineread) $
311
      putStrLn "Running in no-simulation mode. Exiting."
308
  unless (verbose == 0 || machineread) $
309
    if nosimulation
310
      then putStrLn "Running in no-simulation mode."
311
      else if needrebalance
312
             then putStrLn "Cluster needs rebalancing."
313
             else putStrLn "No need to rebalance cluster, no problems found."
314

  
315
  mapM_ (printGroupStats verbose machineread Initial) groupsstats
312 316

  
313
  unless needrebalance $ do
314
    unless (verbose == 0 || machineread) $
315
      putStrLn "No need to rebalance cluster, no problems found. Exiting."
317
  printClusterStats verbose machineread Initial clusterstats needrebalance
316 318

  
317 319
  let exitOK = nosimulation || not needrebalance
318 320
      simulate = not nosimulation && needrebalance
......
320 322
  rebalancedcluster <- maybeSimulateRebalance simulate opts splitcluster
321 323

  
322 324
  when (simulate || machineread) $ do
323
    newgroupstats <- mapM (perGroupChecks verbose machineread Rebalanced gl)
324
                     rebalancedcluster
325
    let newclusterstats = map sum (transpose newgroupstats) :: [Int]
325
    let newgroupstats = map (perGroupChecks gl) rebalancedcluster
326
        newclusterstats = map sum . transpose . map snd $ newgroupstats
326 327
        newneedrebalance = clusterNeedsRebalance clusterstats
327 328

  
329
    mapM_ (printGroupStats verbose machineread Rebalanced) newgroupstats
330

  
328 331
    printClusterStats verbose machineread Rebalanced newclusterstats
329 332
                           newneedrebalance
330 333

  

Also available in: Unified diff