- let ex_nodes' = map (stripSuffix $ length csf) ex_nodes
- ex_idex <- mapM (Container.findByName map_n) ex_nodes'
- return $ Relocate ridx req_nodes ex_idex
- other -> fail $ ("Invalid request type '" ++ other ++ "'")
- return $ Request rqtype map_n map_i csf
+ ex_idex <- mapM (Container.findByName map_n) ex_nodes
+ return $ Relocate ridx req_nodes (map Node.idx ex_idex)
+ "multi-evacuate" ->
+ do
+ ex_names <- fromObj "evac_nodes" request
+ ex_nodes <- mapM (Container.findByName map_n) ex_names
+ let ex_ndx = map Node.idx ex_nodes
+ return $ Evacuate ex_ndx
+ other -> fail ("Invalid request type '" ++ other ++ "'")
+ return $ Request rqtype map_n map_i ptags
+
+-- | Format the result
+formatRVal :: RqType -> [Node.AllocElement] -> JSValue
+formatRVal _ [] = JSArray []
+
+formatRVal (Evacuate _) elems =
+ let sols = map (\(_, inst, nl) -> Instance.name inst : map Node.name nl)
+ elems
+ jsols = map (JSArray . map (JSString . toJSString)) sols
+ in JSArray jsols
+
+formatRVal _ elems =
+ let (_, _, nodes) = head elems
+ nodes' = map Node.name nodes
+ in JSArray $ map (JSString . toJSString) nodes'