{-# LANGUAGE OverloadedStrings #-} import Data.Maybe (fromMaybe) import System.Environment import System.Exit import LightStep.HighLevel.IO (LightStepConfig (..), withSingletonLightStep) import Network.Wai.Middleware.LightStep import Network.Wai import Network.HTTP.Types import Network.Wai.Handler.Warp (run) import qualified Data.Text as T robustScalableProductionReadyMicroservice :: Application robustScalableProductionReadyMicroservice = \_req respond -> do putStrLn "Disrupting the industry" respond $ responseLBS status200 [("Content-Type", "text/plain")] "It's all data!" main :: IO () main = do token <- lookupEnv "LIGHTSTEP_TOKEN" >>= \case Just t -> pure $ T.pack t Nothing -> do putStrLn "LIGHTSTEP_TOKEN environment variable not defined" exitFailure host <- fromMaybe "ingest.lightstep.com" <$> lookupEnv "LIGHTSTEP_HOST" port <- maybe 443 read <$> lookupEnv "LIGHTSTEP_PORT" let lsConfig = LightStepConfig host port token "example-wai-service" 5 microserviceWithTracing = tracingMiddleware robustScalableProductionReadyMicroservice withSingletonLightStep lsConfig $ run 8736 microserviceWithTracing