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