tracing 0.0.4.0 → 0.0.5.0
raw patch · 5 files changed
+27/−27 lines, 5 filesdep +unliftio-coredep −ipPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: unliftio-core
Dependencies removed: ip
API changes (from Hackage documentation)
- Control.Monad.Trace.Class: instance (GHC.Base.Monad m, Control.Monad.Trace.Class.MonadTrace m) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.Except.ExceptT e m)
- Control.Monad.Trace.Class: instance (GHC.Base.Monad m, Control.Monad.Trace.Class.MonadTrace m) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.Reader.ReaderT r m)
- Control.Monad.Trace.Class: instance (GHC.Base.Monad m, Control.Monad.Trace.Class.MonadTrace m) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.State.Lazy.StateT s m)
- Control.Monad.Trace.Class: instance (GHC.Base.Monad m, Control.Monad.Trace.Class.MonadTrace m) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.State.Strict.StateT s m)
- Control.Monad.Trace.Class: instance (GHC.Base.Monad m, Control.Monad.Trace.Class.MonadTrace m, GHC.Base.Monoid w) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
- Control.Monad.Trace.Class: instance (GHC.Base.Monad m, Control.Monad.Trace.Class.MonadTrace m, GHC.Base.Monoid w) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.RWS.Strict.RWST r w s m)
- Control.Monad.Trace.Class: instance (GHC.Base.Monad m, Control.Monad.Trace.Class.MonadTrace m, GHC.Base.Monoid w) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.Writer.Lazy.WriterT w m)
- Control.Monad.Trace.Class: instance (GHC.Base.Monad m, Control.Monad.Trace.Class.MonadTrace m, GHC.Base.Monoid w) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.Writer.Strict.WriterT w m)
+ Control.Monad.Trace.Class: instance (Control.Monad.Trace.Class.MonadTrace m, GHC.Base.Monoid w) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.RWS.Lazy.RWST r w s m)
+ Control.Monad.Trace.Class: instance (Control.Monad.Trace.Class.MonadTrace m, GHC.Base.Monoid w) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.RWS.Strict.RWST r w s m)
+ Control.Monad.Trace.Class: instance (Control.Monad.Trace.Class.MonadTrace m, GHC.Base.Monoid w) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.Writer.Lazy.WriterT w m)
+ Control.Monad.Trace.Class: instance (Control.Monad.Trace.Class.MonadTrace m, GHC.Base.Monoid w) => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.Writer.Strict.WriterT w m)
+ Control.Monad.Trace.Class: instance Control.Monad.Trace.Class.MonadTrace m => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.Except.ExceptT e m)
+ Control.Monad.Trace.Class: instance Control.Monad.Trace.Class.MonadTrace m => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.Reader.ReaderT r m)
+ Control.Monad.Trace.Class: instance Control.Monad.Trace.Class.MonadTrace m => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.State.Lazy.StateT s m)
+ Control.Monad.Trace.Class: instance Control.Monad.Trace.Class.MonadTrace m => Control.Monad.Trace.Class.MonadTrace (Control.Monad.Trans.State.Strict.StateT s m)
- Monitor.Tracing.Zipkin: Endpoint :: !Maybe Text -> !Maybe Int -> !Maybe IPv4 -> !Maybe IPv6 -> Endpoint
+ Monitor.Tracing.Zipkin: Endpoint :: !Maybe Text -> !Maybe Int -> !Maybe Text -> !Maybe Text -> Endpoint
- Monitor.Tracing.Zipkin: [endpointIPv4] :: Endpoint -> !Maybe IPv4
+ Monitor.Tracing.Zipkin: [endpointIPv4] :: Endpoint -> !Maybe Text
- Monitor.Tracing.Zipkin: [endpointIPv6] :: Endpoint -> !Maybe IPv6
+ Monitor.Tracing.Zipkin: [endpointIPv6] :: Endpoint -> !Maybe Text
Files
- README.md +1/−1
- src/Control/Monad/Trace.hs +9/−10
- src/Control/Monad/Trace/Class.hs +12/−10
- src/Monitor/Tracing/Zipkin.hs +2/−4
- tracing.cabal +3/−2
README.md view
@@ -1,4 +1,4 @@-# Tracing+# Tracing [](https://stackage.org/lts/package/tracing) [](https://stackage.org/nightly/package/tracing) [](https://hackage.haskell.org/package/tracing) [](https://travis-ci.org/mtth/tracing) An [OpenTracing](https://opentracing.io/)-compliant, simple, and extensible distributed tracing library.
src/Control/Monad/Trace.hs view
@@ -34,6 +34,7 @@ import Control.Monad.Reader.Class (MonadReader) import Control.Monad.Trans.Class (MonadTrans(..)) import qualified Data.Aeson as JSON+import Data.Foldable (for_) import Data.List (sortOn) import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map@@ -50,7 +51,7 @@ -- | A collection of span logs. type Logs = [(POSIXTime, Key, JSON.Value)] --- | A sampled span, and its associated metadata.+-- | A sampled span and its associated metadata. data Sample = Sample { sampleSpan :: !Span -- ^ The sampled span.@@ -150,15 +151,13 @@ activeSpan = TraceT $ asks scopeSpan - addSpanEntry key (TagValue val) = TraceT $ asks scopeTags >>= \case- Nothing -> pure ()- Just tv -> atomically $ modifyTVar' tv $ Map.insert key val- addSpanEntry key (LogValue val maybeTime) = TraceT $ asks scopeLogs >>= \case- Nothing -> pure ()- Just tv -> do- time <- case maybeTime of- Nothing -> liftIO getPOSIXTime- Just time' -> pure time'+ addSpanEntry key (TagValue val) = TraceT $ do+ mbTV <- asks scopeTags+ for_ mbTV $ \tv -> atomically $ modifyTVar' tv $ Map.insert key val+ addSpanEntry key (LogValue val mbTime) = TraceT $ do+ mbTV <- asks scopeLogs+ for_ mbTV $ \tv -> do+ time <- maybe (liftIO getPOSIXTime) pure mbTime atomically $ modifyTVar' tv ((time, key, val) :) instance MonadUnliftIO m => MonadUnliftIO (TraceT m) where
src/Control/Monad/Trace/Class.hs view
@@ -56,7 +56,7 @@ -- | A monad capable of generating and modifying trace spans. ----- There are currently two instances of this monad:+-- This package currently provides two instances of this class: -- -- * 'Control.Monad.Trace.TraceT', which emits spans for each trace in 'IO' and is meant to be used -- in production.@@ -64,7 +64,9 @@ -- or complex setup. class Monad m => MonadTrace m where - -- | Trace an action, wrapping it inside a new span.+ -- | Trace an action, wrapping it inside a new span. If the action isn't currently being traced,+ -- 'trace' should be a no-op. Otherwise, the new span should share the active span's trace ID,+ -- sampling decision, and baggages unless overridden by the input 'Builder'. trace :: Builder -> m a -> m a -- | Extracts the currently active span, or 'Nothing' if the action is not being traced.@@ -77,28 +79,28 @@ default addSpanEntry :: (MonadTrace n, MonadTrans t, m ~ t n) => Key -> Value -> m () addSpanEntry key = lift . addSpanEntry key -instance (Monad m, MonadTrace m) => MonadTrace (ExceptT e m) where+instance MonadTrace m => MonadTrace (ExceptT e m) where trace name (ExceptT actn) = ExceptT $ trace name actn -instance (Monad m, MonadTrace m) => MonadTrace (ReaderT r m) where+instance MonadTrace m => MonadTrace (ReaderT r m) where trace name (ReaderT actn) = ReaderT $ \r -> trace name (actn r) -instance (Monad m, MonadTrace m, Monoid w) => MonadTrace (RWS.Lazy.RWST r w s m) where+instance (MonadTrace m, Monoid w) => MonadTrace (RWS.Lazy.RWST r w s m) where trace name (RWS.Lazy.RWST actn) = RWS.Lazy.RWST $ \r s -> trace name (actn r s) -instance (Monad m, MonadTrace m, Monoid w) => MonadTrace (RWS.Strict.RWST r w s m) where+instance (MonadTrace m, Monoid w) => MonadTrace (RWS.Strict.RWST r w s m) where trace name (RWS.Strict.RWST actn) = RWS.Strict.RWST $ \r s -> trace name (actn r s) -instance (Monad m, MonadTrace m) => MonadTrace (State.Lazy.StateT s m) where+instance MonadTrace m => MonadTrace (State.Lazy.StateT s m) where trace name (State.Lazy.StateT actn) = State.Lazy.StateT $ \s -> trace name (actn s) -instance (Monad m, MonadTrace m) => MonadTrace (State.Strict.StateT s m) where+instance MonadTrace m => MonadTrace (State.Strict.StateT s m) where trace name (State.Strict.StateT actn) = State.Strict.StateT $ \s -> trace name (actn s) -instance (Monad m, MonadTrace m, Monoid w) => MonadTrace (Writer.Lazy.WriterT w m) where+instance (MonadTrace m, Monoid w) => MonadTrace (Writer.Lazy.WriterT w m) where trace name (Writer.Lazy.WriterT actn) = Writer.Lazy.WriterT $ trace name actn -instance (Monad m, MonadTrace m, Monoid w) => MonadTrace (Writer.Strict.WriterT w m) where+instance (MonadTrace m, Monoid w) => MonadTrace (Writer.Strict.WriterT w m) where trace name (Writer.Strict.WriterT actn) = Writer.Strict.WriterT $ trace name actn instance MonadTrace Identity where
src/Monitor/Tracing/Zipkin.hs view
@@ -63,8 +63,6 @@ import qualified Data.Text as T import qualified Data.Text.Encoding as T import Data.Time.Clock.POSIX (POSIXTime)-import Net.IPv4 (IPv4)-import Net.IPv6 (IPv6) import Network.HTTP.Client (Manager, Request) import qualified Network.HTTP.Client as HTTP import Network.Socket (HostName, PortNumber)@@ -369,9 +367,9 @@ -- ^ The endpoint's service name. , endpointPort :: !(Maybe Int) -- ^ The endpoint's port, if applicable and known.- , endpointIPv4 :: !(Maybe IPv4)+ , endpointIPv4 :: !(Maybe Text) -- ^ The endpoint's IPv4 address.- , endpointIPv6 :: !(Maybe IPv6)+ , endpointIPv6 :: !(Maybe Text) -- ^ The endpoint's IPv6 address. } deriving (Eq, Ord, Show)
tracing.cabal view
@@ -1,5 +1,5 @@ name: tracing-version: 0.0.4.0+version: 0.0.5.0 synopsis: Distributed tracing description: An OpenTracing-compliant, simple, and extensible distributed tracing library. homepage: https://github.com/mtth/tracing@@ -21,6 +21,7 @@ , Monitor.Tracing.Local , Monitor.Tracing.Zipkin other-modules: Control.Monad.Trace.Internal+ -- unliftio-core bound for https://github.com/fpco/unliftio/issues/55 build-depends: aeson >= 1.4 , base >= 4.8 && < 5 , base16-bytestring >= 0.1@@ -28,7 +29,6 @@ , case-insensitive >= 1.2 , containers >= 0.6 , http-client >= 0.5- , ip >= 1.4 , mtl >= 2.2 , network >= 2.8 , random >= 1.1@@ -37,6 +37,7 @@ , time >= 1.8 , transformers >= 0.5 , unliftio >= 0.2+ , unliftio-core < 0.2 default-language: Haskell2010 ghc-options: -Wall