instana-haskell-trace-sdk-0.1.0.0: test/agent-stub/Instana/SDK/AgentStub/Main.hs
{-# LANGUAGE OverloadedStrings #-}
module Instana.SDK.AgentStub.Main where
import Control.Concurrent (threadDelay)
import Control.Monad (when)
import qualified Control.Monad.ST as ST
import Data.Time.Clock.POSIX (getPOSIXTime)
import qualified Network.Wai as Wai
import qualified Network.Wai.Handler.Warp as Warp
import qualified Servant
import System.Log.Logger (infoM)
import qualified Instana.SDK.AgentStub.API as API
import Instana.SDK.AgentStub.Config (AgentStubConfig)
import qualified Instana.SDK.AgentStub.Config as Config
import Instana.SDK.AgentStub.Logging (agentStubLogger)
import qualified Instana.SDK.AgentStub.Logging as Logging
import Instana.SDK.AgentStub.Recorders (Recorders)
import qualified Instana.SDK.AgentStub.Recorders as Recorders
import qualified Instana.SDK.AgentStub.Server as Server
main :: IO ()
main = do
Logging.initLogging
config <- Config.readConfig
recorders <- ST.stToIO $ Recorders.mkRecorders
startupTime <- round . (* 1000) <$> getPOSIXTime
let
host = Config.bindHost config
port = Config.bindPort config
startupDelay = Config.startupDelay config
serverSettings =
Warp.setHost host $
Warp.setPort port $
Warp.defaultSettings
infoM agentStubLogger $ "Starting agent stub bound to " ++
(show $ Warp.getHost serverSettings) ++ " and port " ++
(show $ Warp.getPort serverSettings)
when
(startupDelay > 0)
( do
infoM agentStubLogger $
"Artificial startup delay: " ++ show startupDelay ++ "ms, pausing."
threadDelay $ startupDelay * 1000
infoM agentStubLogger $
"Artificial startup delay has passed, resuming startup."
)
Warp.runSettings serverSettings $
app config startupTime recorders
app ::
AgentStubConfig
-> Int
-> Recorders
-> Wai.Application
app config startupTime recorders =
Servant.serve
API.proxyApi
(Server.mainServer
config
startupTime
recorders
)