{"id":17964781,"url":"https://github.com/sile/otp_passage","last_synced_at":"2025-03-25T06:31:00.060Z","repository":{"id":62430216,"uuid":"108591718","full_name":"sile/otp_passage","owner":"sile","description":"OpenTracing instrumentation library for the Erlang/OTP standard modules","archived":false,"fork":false,"pushed_at":"2018-12-25T14:22:03.000Z","size":189,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-19T09:40:46.166Z","etag":null,"topics":["erlang","opentracing"],"latest_commit_sha":null,"homepage":"","language":"Erlang","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sile.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-10-27T20:16:18.000Z","updated_at":"2023-07-25T14:12:26.000Z","dependencies_parsed_at":"2022-11-01T20:17:42.151Z","dependency_job_id":null,"html_url":"https://github.com/sile/otp_passage","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sile%2Fotp_passage","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sile%2Fotp_passage/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sile%2Fotp_passage/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sile%2Fotp_passage/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sile","download_url":"https://codeload.github.com/sile/otp_passage/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245413566,"owners_count":20611350,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["erlang","opentracing"],"created_at":"2024-10-29T12:08:35.735Z","updated_at":"2025-03-25T06:30:59.784Z","avatar_url":"https://github.com/sile.png","language":"Erlang","funding_links":[],"categories":[],"sub_categories":[],"readme":"otp_passage\n===========\n\n[![hex.pm version](https://img.shields.io/hexpm/v/otp_passage.svg)](https://hex.pm/packages/otp_passage)\n[![Build Status](https://travis-ci.org/sile/otp_passage.svg?branch=master)](https://travis-ci.org/sile/otp_passage)\n[![Code Coverage](https://codecov.io/gh/sile/otp_passage/branch/master/graph/badge.svg)](https://codecov.io/gh/sile/otp_passage/branch/master)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\n[OpenTracing](http://opentracing.io/) instrumentation library for the Erlang/OTP standard modules.\n\nThis uses [passage](https://github.com/sile/passage) as OpenTracing API library.\n\n[Documentation](https://hexdocs.pm/otp_passage/)\n\n\nA Running Example\n-----------------\n\nThis example uses following simple echo server.\n\n\n```erlang\n-module(echo_server).\n\n-compile({parse_transform, passage_transform}). % Enables `passage_trace` attribute\n\n-behaviour(gen_server).\n\n-export([start_link/0, echo/1]).\n-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).\n\n%% Exported Functions\nstart_link() -\u003e\n    %% Uses `gen_server_passage` instead of `gen_server`\n    gen_server_passage:start_link({local, ?MODULE}, ?MODULE, [], []).\n\necho(Message) -\u003e\n    %% Uses `gen_server_passage` instead of `gen_server`\n    gen_server_passage:call(?MODULE, {echo, Message}).\n\n%% `gen_server` Callbacks\ninit(_) -\u003e {ok, []}.\n\nhandle_call({echo, Message}, _, State) -\u003e\n  log(Message),\n  {reply, Message, State}.\n\nhandle_cast(_, State) -\u003e {noreply, State}.\nhandle_info(_, State) -\u003e {noreply, State}.\nterminate(_, _) -\u003e ok.\ncode_change(_, State, _) -\u003e {ok, State}.\n\n%% Internal Functions\n-passage_trace([]). % Annotation for tracing.\nlog(Message) -\u003e\n  io:format(\"Received: ~p\\n\", [Message]),\n  ok.\n```\n\nBy using [jaeger](https://uber.github.io/jaeger/) and [jaeger_passage](https://github.com/sile/jaeger_passage), you can easily trace and visualize the behaviour of the above server.\n\nAs the first step, you need to start jaeger daemons.\n```console\n$ docker run -d -p6831:6831/udp -p6832:6832/udp -p16686:16686 jaegertracing/all-in-one:latest\n```\n\nNext, start Erlang shell and execute following commands.\n```erlang\n% Starts `example_tracer`\n\u003e Sampler = passage_sampler_all:new().\n\u003e ok = jaeger_passage:start_tracer(example_tracer, Sampler).\n\n% Starts `echo_server`\n\u003e {ok, _} = echo_server:start_link().\n\n% Traces an echo request\n\u003e passage_pd:with_span(echo, [{tracer, example_tracer}],\n                       fun () -\u003e echo_server:echo(hello) end).\n```\n\nYou can see the tracing result by your favorite browser (in this example, firefox).\n```console\n$ firefox http://localhost:16686/\n```\n\n![Jaeger UI](echo_server_trace_result.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsile%2Fotp_passage","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsile%2Fotp_passage","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsile%2Fotp_passage/lists"}