packages feed

lightstep-haskell-0.5.0: examples/wai/Main.hs

{-# LANGUAGE OverloadedStrings #-}

import qualified Data.ByteString.Lazy.Char8 as LBS
import GHC.Stats
import LightStep.Diagnostics
import LightStep.HighLevel.IO (getEnvConfig, withSingletonLightStep)
import Network.HTTP.Types
import Network.Wai
import Network.Wai.Handler.Warp (run)
import Network.Wai.Middleware.LightStep

robustScalableProductionReadyMicroservice :: Application
robustScalableProductionReadyMicroservice = \_req respond -> do
  rtsStats <- getRTSStats
  diagnostics <- getDiagnostics
  respond $
    responseLBS
      status200
      [("Content-Type", "text/plain")]
      ( LBS.pack $
          unlines
            [ "RAM usage: " <> show (max_live_bytes rtsStats `div` 1_000) <> " KB",
              "Reconnect count: " <> show (diagReconnectCount diagnostics),
              "Started span count: " <> show (diagStartedSpanCount diagnostics),
              "Finished span count: " <> show (diagFinishedSpanCount diagnostics),
              "Reported span count: " <> show (diagReportedSpanCount diagnostics),
              "Rejected span count: " <> show (diagRejectedSpanCount diagnostics),
              "Dropped span count: " <> show (diagDroppedSpanCount diagnostics)
            ]
      )

main :: IO ()
main = do
  Just lsConfig <- getEnvConfig
  let microserviceWithTracing = tracingMiddleware robustScalableProductionReadyMicroservice
  withSingletonLightStep lsConfig $
    run 8736 microserviceWithTracing