git.iko.soy/typeable/request-track
on 7c874fe help sign in
6 files changed+2−59
since splitsnapshots
unifiedsplit
README.org−18 request-track-servant/request-track-servant.cabal+1−9 request-track-servant/src/Web/Tracking/Servant.hs−4 request-track-servant/src/Web/Tracking/Servant/OpenAPI.hs−14 request-track-servant/src/Web/Tracking/Servant/Types.hs−9 stack.yaml+1−5
README.orgdeleted−18
@@ -1,18 +0,0 @@
1−#+TITLE: Request tracking framework
2−#+AUTHOR: Nick <nick@typeable.io>
3−
4−* Mechanism
5−
6−See [[https://github.com/typeable/technical_notes/blob/master/Request%20Tracking/Tracking.org][this note]] for the mechanism description.
7−
8−* Lower-level API
9−
10−~request-track~ library provides WAI primitives to handle the passed headers. At the very least you would want to use ~echoMiddleware~ in order to send back the tracking headers in every HTTP reply.
11−
12−* Servant API
13−
14−~request-track-servant~ provides combinators to use with Servant. See the haddock documentation for more info.
15−
16−* Example server
17−
18−~example-server~ directory contains a simple HTTP server that uses all this stuff.
request-track-servant/request-track-servant.cabal+1−9
@@ -11,11 +11,6 @@ maintainer: nick@typeable.io
1111category: Web
1212build-type: Simple
1313
14−flag openapi
15− description: Enable openapi instances
16− default: False
17− manual: True
18−
1914common warnings
2015 ghc-options: -Wall
2116
@@ -23,6 +18,7 @@ library
2318 import: warnings
2419 exposed-modules: Web.Tracking.Servant
2520 other-modules: Web.Tracking.Servant.Types
21+ -- other-extensions:
2622 build-depends: base >=4.14.0.0 && < 5,
2723 bytestring >= 0.11,
2824 containers >= 0.6,
@@ -32,9 +28,5 @@ library
3228 servant-client-core >= 0.19,
3329 servant-server >= 0.19,
3430 wai >= 3.2
35− if flag(openapi)
36− other-modules: Web.Tracking.Servant.OpenAPI
37− build-depends: servant-openapi3
38− cpp-options: -DOPENAPI
3931 hs-source-dirs: src
4032 default-language: GHC2021
request-track-servant/src/Web/Tracking/Servant.hs−4
@@ -1,8 +1,4 @@
1−{-# LANGUAGE CPP #-}
21module Web.Tracking.Servant (module Export) where
32
43import Web.Tracking as Export (ReqtrackInfo(..))
54import Web.Tracking.Servant.Types as Export
6−#ifdef OPENAPI
7−import Web.Tracking.Servant.OpenAPI as Export ()
8−#endif
request-track-servant/src/Web/Tracking/Servant/OpenAPI.hsdeleted−14
@@ -1,14 +0,0 @@
1−{-# OPTIONS_GHC -Wno-orphans #-}
2−module Web.Tracking.Servant.OpenAPI where
3−
4−import Web.Tracking.Servant.Types (RequestTracking, RequestTracking_)
5−
6−import Data.Proxy
7−import Servant.API
8−import Servant.OpenApi
9−
10−instance HasOpenApi api => HasOpenApi (RequestTracking :> api) where
11− toOpenApi _ = toOpenApi (Proxy :: Proxy api)
12−
13−instance HasOpenApi api => HasOpenApi (RequestTracking_ :> api) where
14− toOpenApi _ = toOpenApi (Proxy :: Proxy api)
request-track-servant/src/Web/Tracking/Servant/Types.hs−9
@@ -37,22 +37,15 @@ import Servant.Server.Internal
3737-- type instance TrackingData RequestTracking = TrackingArg
3838--
3939-- trackingHandler :: ReqtrackingHandler (Maybe ReqtrackInfo) TrackingArg
40−-- trackingHandler = mkReqtrackingHandler $ \mrti ->
41−-- case mrti of
42−-- Just rti -> ... -- Do something with ReqtrackInfo, return TrackingArg
43−-- Nothing -> ...
4440--
4541-- @
4642data RequestTracking
4743
48−-- | See 'RequestTracking'
4944type family TrackingData a
5045
5146-- | Same as above, except no argument is passed to a handler.
5247data RequestTracking_
5348
54−-- | Servant context handler used for processing 'ReqtrackInfo' before passing the result to endpoint handlers.
55−-- Use 'mkReqtrackingHandler' in your code instead of the constructor.
5649newtype ReqtrackingHandler r o = ReqtrackingHandler { runReqtrackingHandler :: r -> Handler o
5750 } deriving (Functor)
5851
@@ -65,7 +58,6 @@ instance Monad (ReqtrackingHandler r) where
6558 f >>= g = ReqtrackingHandler $ \r -> do a <- runReqtrackingHandler f r
6659 runReqtrackingHandler (g a) r
6760
68−-- | Smart constructor to create 'ReqtrackingHandler'.
6961mkReqtrackingHandler :: (Maybe ReqtrackInfo -> Handler o) -> ReqtrackingHandler (Maybe ReqtrackInfo) o
7062mkReqtrackingHandler = ReqtrackingHandler
7163
@@ -116,7 +108,6 @@ instance HasClient m api => HasClient m (RequestTracking_ :> api) where
116108 hoistClientMonad pm Proxy f cl = hoistClientMonad pm (Proxy :: Proxy api) f cl
117109
118110
119−-- | Headers list to use with 'Headers'. Currently unused.
120111type ReqtrackHeaders = '[ Header RequestIdHdr ByteString
121112 , Header RequestLevelHdr Word
122113 , Header RequestSourceHdr ByteString
stack.yaml+1−5
@@ -1,4 +1,4 @@
1−resolver: lts-21.6
1+resolver: lts-20.26
22
33packages:
44- example-server
@@ -11,7 +11,3 @@ extra-deps:
1111
1212nix:
1313 packages: [ zlib ]
14−
15−flags:
16− request-track-servant:
17− openapi: true