module API.Federator where import Data.Function import GHC.Stack import qualified Network.HTTP.Client as HTTP import Testlib.Prelude getMetrics :: (HasCallStack, MakesValue domain) => domain -> (ServiceMap -> HostPort) -> App Response getMetrics :: forall domain. (HasCallStack, MakesValue domain) => domain -> (ServiceMap -> HostPort) -> App Response getMetrics domain domain ServiceMap -> HostPort service = do Request req <- domain -> (ServiceMap -> HostPort) -> String -> App Request forall domain. (HasCallStack, MakesValue domain) => domain -> (ServiceMap -> HostPort) -> String -> App Request rawBaseRequestF domain domain ServiceMap -> HostPort service String "i/metrics" String -> Request -> App Response submit String "GET" Request req rawBaseRequestF :: (HasCallStack, MakesValue domain) => domain -> (ServiceMap -> HostPort) -> String -> App HTTP.Request rawBaseRequestF :: forall domain. (HasCallStack, MakesValue domain) => domain -> (ServiceMap -> HostPort) -> String -> App Request rawBaseRequestF domain domain ServiceMap -> HostPort getService String path = do String domainV <- domain -> App String forall a. (HasCallStack, MakesValue a) => a -> App String objDomain domain domain ServiceMap serviceMap <- HasCallStack => String -> App ServiceMap String -> App ServiceMap getServiceMap String domainV IO Request -> App Request forall a. IO a -> App a forall (m :: * -> *) a. MonadIO m => IO a -> m a liftIO (IO Request -> App Request) -> (String -> IO Request) -> String -> App Request forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> IO Request forall (m :: * -> *). MonadThrow m => String -> m Request HTTP.parseRequest (String -> App Request) -> String -> App Request forall a b. (a -> b) -> a -> b $ let HostPort String h Word16 p = ServiceMap -> HostPort getService ServiceMap serviceMap in String "http://" String -> String -> String forall a. Semigroup a => a -> a -> a <> String h String -> String -> String forall a. Semigroup a => a -> a -> a <> String ":" String -> String -> String forall a. Semigroup a => a -> a -> a <> Word16 -> String forall a. Show a => a -> String show Word16 p String -> String -> String forall a. Semigroup a => a -> a -> a <> (String "/" String -> String -> String forall a. Semigroup a => a -> a -> a <> [String] -> String joinHttpPath (String -> [String] splitHttpPath String path))