module Network.YAML.Balancer where import System.Random import qualified Data.ByteString.Char8 as BS type Server = (BS.ByteString, Int) -- | Select random server selectRandom :: [(BS.ByteString, Server, Int)] -- ^ [(Service name, (hostname, port number), priority)] -> BS.ByteString -- ^ Service name -> IO Server selectRandom lst service = do let lst' = concatMap (\(name,srv,p) -> replicate p (name, srv)) lst lst'' = map snd $ filter (\(name,srv) -> name==service) lst' n = length lst'' k <- randomRIO (0, n-1) return $ lst'' !! k