diff --git a/examples/yesod-subsite/src/Subsite.hs b/examples/yesod-subsite/src/Subsite.hs index 62c6ba6f..92e49dff 100644 --- a/examples/yesod-subsite/src/Subsite.hs +++ b/examples/yesod-subsite/src/Subsite.hs @@ -2,7 +2,6 @@ {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} - -- an option for Template Haskell stage restriction {-# OPTIONS_GHC -Wno-orphans #-} @@ -11,15 +10,18 @@ module Subsite ( ) where import Subsite.Data ( - Subsite(Subsite), - getSubHomeR, + Route (FooR, SubHomeR), + Subsite (Subsite), getFooR, + getSubHomeR, + resourcesSubsite, routeToPattern, routeToRenderer, - resourcesSubsite, - Route(FooR,SubHomeR)) -import Yesod.Core - ( mkYesodSubDispatch, YesodSubDispatch(yesodSubDispatch ), ) + ) +import Yesod.Core ( + YesodSubDispatch (yesodSubDispatch), + mkYesodSubDispatch, + ) instance YesodSubDispatch Subsite master where diff --git a/examples/yesod-subsite/src/Subsite/Data.hs b/examples/yesod-subsite/src/Subsite/Data.hs index 4bb71f62..c76af2d5 100644 --- a/examples/yesod-subsite/src/Subsite/Data.hs +++ b/examples/yesod-subsite/src/Subsite/Data.hs @@ -4,22 +4,26 @@ {-# LANGUAGE TypeFamilies #-} module Subsite.Data ( - Subsite(Subsite), + Subsite (Subsite), getSubHomeR, getFooR, routeToPattern, routeToRenderer, resourcesSubsite, - Route(FooR,SubHomeR))where + Route (FooR, SubHomeR), +) where import Data.Text (Text) -import OpenTelemetry.Instrumentation.Yesod - ( mkRouteToPattern, mkRouteToRenderer ) -import Yesod.Core - ( mkYesodSubData, - parseRoutes, - SubHandlerFor, - RenderRoute(renderRoute) ) +import OpenTelemetry.Instrumentation.Yesod ( + mkRouteToPattern, + mkRouteToRenderer, + ) +import Yesod.Core ( + RenderRoute (renderRoute), + SubHandlerFor, + mkYesodSubData, + parseRoutes, + ) import Yesod.Core.Types (Route) diff --git a/examples/yesod-subsite/src/main.hs b/examples/yesod-subsite/src/main.hs index 194a5e11..5acee306 100644 --- a/examples/yesod-subsite/src/main.hs +++ b/examples/yesod-subsite/src/main.hs @@ -1,43 +1,45 @@ {-# LANGUAGE DataKinds #-} +{-# LANGUAGE InstanceSigs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE InstanceSigs #-} - -- an option for Template Haskell {-# OPTIONS_GHC -Wno-unused-top-binds #-} import qualified Data.Map as M import Data.Text (Text, pack) import Network.Wai.Handler.Warp (run) -import OpenTelemetry.Instrumentation.Wai ( newOpenTelemetryWaiMiddleware' ) -import OpenTelemetry.Instrumentation.Yesod - ( mkRouteToPattern, - mkRouteToRenderer, - openTelemetryYesodMiddleware, - RouteRenderer(RouteRenderer), - YesodOpenTelemetryTrace(getTracerProvider) ) -import OpenTelemetry.Trace - ( TracerProvider, - shutdownTracerProvider, - initializeTracerProvider ) +import OpenTelemetry.Instrumentation.Wai (newOpenTelemetryWaiMiddleware') +import OpenTelemetry.Instrumentation.Yesod ( + RouteRenderer (RouteRenderer), + YesodOpenTelemetryTrace (getTracerProvider), + mkRouteToPattern, + mkRouteToRenderer, + openTelemetryYesodMiddleware, + ) +import OpenTelemetry.Trace ( + TracerProvider, + initializeTracerProvider, + shutdownTracerProvider, + ) import Subsite (Subsite (Subsite)) import qualified Subsite -import UnliftIO ( bracket ) +import UnliftIO (bracket) import Yesod.Core ( RenderRoute (renderRoute), - Yesod (yesodMiddleware,errorHandler), + Yesod (errorHandler, yesodMiddleware), defaultYesodMiddleware, mkYesod, parseRoutes, toWaiApp, ) -import Yesod.Core.Handler ( provideRep, selectRep ) +import Yesod.Core.Handler (provideRep, selectRep) import Yesod.Routes.TH.Types (ResourceTree) + -- | This is my data type. There are many like it, but this one is mine. data Site = Site { tracerProvider :: TracerProvider @@ -66,7 +68,6 @@ instance Yesod Site where errorHandler err = selectRep $ provideRep $ pure $ pack $ show err - instance YesodOpenTelemetryTrace Site where getTracerProvider = tracerProvider @@ -75,7 +76,6 @@ getRootR :: Handler Text getRootR = pure "GET /" - main :: IO () main = do bracket diff --git a/instrumentation/yesod/src/OpenTelemetry/Instrumentation/Yesod.hs b/instrumentation/yesod/src/OpenTelemetry/Instrumentation/Yesod.hs index d777945d..a2f74d71 100644 --- a/instrumentation/yesod/src/OpenTelemetry/Instrumentation/Yesod.hs +++ b/instrumentation/yesod/src/OpenTelemetry/Instrumentation/Yesod.hs @@ -7,15 +7,15 @@ {-# LANGUAGE TemplateHaskell #-} {-# OPTIONS_GHC -fno-warn-orphans #-} --- | This module makes it easier to use hs-opentelemetry-sdk with yesod. -module OpenTelemetry.Instrumentation.Yesod ( -{- +{- | This module makes it easier to use hs-opentelemetry-sdk with yesod. + Let @Site@ be following to use in examples: @ newtype Site = Site { siteTracerProvider :: TracerProvider } @ -} +module OpenTelemetry.Instrumentation.Yesod ( openTelemetryYesodMiddleware, RouteRenderer (..), mkRouteToRenderer, @@ -58,12 +58,14 @@ import Language.Haskell.TH ( varE, varP, wildP, + ) + + #if MIN_VERSION_template_haskell(2, 17, 0) - Quote (newName), +import Language.Haskell.TH (Quote (newName)) #else - newName, +import Language.Haskell.TH (newName) #endif - ) import Lens.Micro (Lens', lens) import Network.Wai (Request (vault), requestHeaders) import qualified OpenTelemetry.Context as Context @@ -117,8 +119,6 @@ import Yesod.Routes.TH.Types ( ) - - handlerEnvL :: Lens' (HandlerData child site) (RunHandlerEnv child site) handlerEnvL = lens handlerEnv (\h e -> h {handlerEnv = e}) {-# INLINE handlerEnvL #-}