Mirror for Apache CouchDB

Clone this repo:
  1. 9f2fc29 Merge pull request #1 from apache/skip-parse-transform-for-erlang-24-compat by Nick Vatamaniuc · 2 years, 10 months ago main
  2. 8e7455e Skip compiling example file as it's failing on Erlang 24 by Nick Vatamaniuc · 2 years, 10 months ago CouchDB-0.2.6-1
  3. 2bbc184 v0.2.6 by Takeru Ohta · 5 years ago master 0.2.6
  4. 98d1ebf Update .travis.yml by Takeru Ohta · 5 years ago
  5. 1757d5e Update .travis.yml by Takeru Ohta · 5 years ago

passage

hex.pm version Build Status Code Coverage License: MIT

OpenTracing API for Erlang

Documentation

Examples

%% Registers `tracer`
Context = passage_span_context_null,
Sampler = passage_sampler_all:new(),
Reporter = passage_reporter_process:new(self(), span),
ok = passage_tracer_registry:register(tracer, Context, Sampler, Reporter),

%% Starts a root span
RootSpan = passage:start_span(example_root, [{tracer, tracer}]),

%% Starts a child span
ChildSpan = passage:start_span(example_child, [{child_of, RootSpan}]),

%% Finishes spans
passage:finish_span(ChildSpan),
passage:finish_span(RootSpan),

%% Receives the finished spans
receive {span, FinishedChildSpan} -> ok end,
receive {span, FinishedRootSpan} -> ok end.

Process Dictionary Version

%% Registers `tracer`
Context = passage_span_context_null,
Sampler = passage_sampler_all:new(),
Reporter = passage_reporter_process:new(self(), span),
ok = passage_tracer_registry:register(tracer, Context, Sampler, Reporter),

%% Starts a root span
ok = passage_pd:start_span(example_root, [{tracer, tracer}]),

%% Starts a child span
ok = passage_pd:start_span(example_child),

%% Finishes spans
passage_pd:finish_span(),  % child
passage_pd:finish_span(),  % root

%% Receives the finished spans
receive {span, FinishedChildSpan} -> ok end,
receive {span, FinishedRootSpan} -> ok end.

Parse Transform

-module(example).

-compile({parse_transform, passage_transform}). % Enables `passage_transform'
-compile({passage_default_tracer, "foo_tracer"}). % Specifies the default tracer (optional)

-passage_trace([{tags, #{foo => "bar", size => "byte_size(Bin)"}}]).
-spec foo(binary()) -> binary().
foo(Bin) ->
  <<"foo", Bin/binary>>.

The above foo function will be transformed as follows:

foo(Bin) ->
  passage_pd:start_span('example:foo/1', []),
  try
    passage_pd:set_tags(
        fun () ->
            #{
                'location.pid' => self(),
                'location.application' => example,
                'location.module' => example,
                'location.line' => 7
                foo => bar,
                size => byte_size(Bin)
             }
        end),
    <<"foo", Bin/binary>>
  after
    passage_pd:finish_span()
  end.

References