packages feed

tracing-0.0.1.1: app/ZipkinExample.hs

{-# 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