servant-tracing

[ library, mit, unclassified ] [ Propose Tags ]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.2.0.0
Change log ChangeLog.md
Dependencies aeson, async, base (>=4.7 && <5), bytestring, bytestring-lexing, containers, hashable, http-api-data, http-client, lifted-base, monad-control, mtl, random, servant, servant-server, servant-tracing, text, time, transformers, unordered-containers, wai, warp [details]
License MIT
Copyright 2018 Chris Coffey
Author Chris Coffey
Maintainer chris@foldl.io
Home page https://github.com/ChrisCoffey/haskell-opentracing-light#readme
Bug tracker https://github.com/ChrisCoffey/haskell-opentracing-light/issues
Source repo head: git clone https://github.com/ChrisCoffey/haskell-opentracing-light
Uploaded by ChrisCoffey at 2018-04-12T01:33:55Z
Distributions
Executables servant-tracing-example
Downloads 1833 total (15 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-04-13 [all 1 reports]

Readme for servant-tracing-0.1.0.1

[back to package description]

servant-tracing

Build Status

This repository is the minimum required for publishing trace data to Zipkin or Jaeger. It adheres to the [Open Tracing Standard] (https://github.com/opentracing/specification/blob/master/specification.md) but is not complete. See the documentation on Hackage for module-level details.

Using the library

The OpenTracing standard revolves around a single function, recordSpan. recordSpan is responsible for creating new spans (see the standard for the definition of a span) and ensuring child spans use the new id. In order to properly build this tree of calls library users must provide the necessary environment via a MonadTracer instance (see haddocks). Library users are responsible for defining their own publish loop. There is a default Zipkin publisher in Tracing.Zipkin which works with Jaeger & Zipkin, but the loop to drain the spanBuffer must be provided by the user.

foo :: (MonadIO m, MonadTracer m) =>
    Int
    -> m String
foo str = recordSpan
    Nothing
    [Tag "Ultimate Answer to Life, The Universe and Everything", Tag 42]
    "Compute Ultimate Question"
    $ pure "Oops"

The code above logs a new span to the spanBuffer, where it will sit until published. If it turns out that foo is called from an active span, then it will be recorded as a child of said higher span.

Testing Locally with the Demo App

You can start up a compatible server for (Zipkin)[] or (Jaeger)[] via a standalone docker container. From there its a matter of seting the following environment variables:

  • TRACING_ENDPOINT: a String with the fully url to a running tracing server
  • TRACING_SERVICE: a String name for your service

Pending Features

  • Concurrent tracing support.
  • Thrift support
  • Additional clients
  • Pluggable samplers