- -> m (String, Cluster.AllocSolution)
-processResults _ (_, _, []) = fail "No valid allocation solutions"
-processResults (Evacuate _) as@(fstats, successes, sols) =
- let best = fst $ head sols
- tfails = length fstats
- info = printf "for last allocation, successes %d, failures %d,\
- \ best score: %.8f" successes tfails best::String
- in return (info, as)
-
-processResults _ as@(fstats, successes, sols) =
- case sols of
- (best, (_, _, w)):[] ->
- let tfails = length fstats
- info = printf "successes %d, failures %d,\
- \ best score: %.8f for node(s) %s"
- successes tfails
- best (intercalate "/" . map Node.name $ w)::String
- in return (info, as)
+ -> m Cluster.AllocSolution
+processResults _ (Cluster.AllocSolution { Cluster.asSolutions = [],
+ Cluster.asLog = msgs }) =
+ fail $ intercalate ", " msgs
+
+processResults (Evacuate _) as = return as
+
+processResults _ as =
+ case Cluster.asSolutions as of
+ _:[] -> return as