yam-0.5.0: src/Yam/Trace.hs
module Yam.Trace where
import qualified Data.Vault.Lazy as L
import Network.Wai
import System.IO.Unsafe (unsafePerformIO)
import Yam.Types
type TraceLog = Text
{-# NOINLINE traceKey #-}
traceKey :: Key TraceLog
traceKey = unsafePerformIO newKey
traceMw :: Middleware
traceMw app req resH = do
traceId <- randomString 12
let h = ("X-TRACE-ID",encodeUtf8 traceId)
app req {vault = L.insert traceKey traceId (vault req)} (resH . mapResponseHeaders (h:))
traceMiddleware :: Bool -> AppMiddleware
traceMiddleware enabled = simpleWebMiddleware (enabled, "Trace") traceMw