{-# LANGUAGE OverloadedStrings #-} {-| A simple tracing example which publishes traces to a local Zipkin server. -} module Main where import Control.Concurrent (threadDelay) import Control.Monad (void) import Monitor.Tracing import qualified Monitor.Tracing.Zipkin as Zipkin example :: (MonadTrace m, MonadUnliftIO m) => m () example = Zipkin.rootSpan Zipkin.Accept "something" $ do Zipkin.annotate "log2" Zipkin.tag "tag2" "def" liftIO $ threadDelay 100000 Zipkin.localSpan "A" $ do void $ tracedForkIO $ Zipkin.localSpan "aa" $ do liftIO $ threadDelay 20000 Zipkin.annotate "log1" Zipkin.tag "tag1" "def" liftIO $ threadDelay 10000 Zipkin.localSpan "B" $ liftIO $ threadDelay 30000 main :: IO () main = do zipkin <- Zipkin.new $ Zipkin.defaultSettings { Zipkin.settingsEndpoint = Just $ Zipkin.defaultEndpoint { Zipkin.endpointService = Just "print-spans" } , Zipkin.settingsHost = "localhost" } Zipkin.run zipkin example Zipkin.publish zipkin