Packages
OpentelemetryAbsinthe is a OpenTelemetry instrumentation library for Absinthe.
Current section
22 Versions
Jump to
Current section
22 Versions
Compare versions
3
files changed
+20
additions
-5
deletions
| @@ -4,7 +4,7 @@ | |
| 4 4 | <<"OpentelemetryAbsinthe is a OpenTelemetry instrumentation library for Absinthe.">>}. |
| 5 5 | {<<"elixir">>,<<"~> 1.10">>}. |
| 6 6 | {<<"files">>, |
| 7 | - [<<"lib">>,<<"lib/instrumentation.ex">>,<<"lib/opentelemetry_absinthe.ex">>, |
| 7 | + [<<"lib">>,<<"lib/opentelemetry_absinthe.ex">>,<<"lib/instrumentation.ex">>, |
| 8 8 | <<"lib/helpers.ex">>,<<".formatter.exs">>,<<"mix.exs">>,<<"README.md">>]}. |
| 9 9 | {<<"licenses">>,[<<"MIT">>]}. |
| 10 10 | {<<"links">>, |
| @@ -26,4 +26,4 @@ | |
| 26 26 | {<<"optional">>,false}, |
| 27 27 | {<<"repository">>,<<"hexpm">>}, |
| 28 28 | {<<"requirement">>,<<"~> 1.0.0-rc.2">>}]]}. |
| 29 | - {<<"version">>,<<"1.0.0-rc.1">>}. |
| 29 | + {<<"version">>,<<"1.0.0-rc.3">>}. |
| @@ -27,8 +27,6 @@ defmodule OpentelemetryAbsinthe.Instrumentation do | |
| 27 27 | ] |
| 28 28 | |
| 29 29 | def setup(instrumentation_opts \\ []) do |
| 30 | - OpenTelemetry.register_application_tracer(:opentelemetry_absinthe) |
| 31 | - |
| 32 30 | config = |
| 33 31 | @default_config |
| 34 32 | |> Keyword.merge(Application.get_env(:opentelemetry_absinthe, :trace_options, [])) |
| @@ -66,6 +64,8 @@ defmodule OpentelemetryAbsinthe.Instrumentation do | |
| 66 64 | ) |
| 67 65 | |> put_if(config.trace_request_query, {"graphql.request.query", params["query"]}) |
| 68 66 | |
| 67 | + save_parent_ctx() |
| 68 | + |
| 69 69 | new_ctx = Tracer.start_span(config.span_name, %{attributes: attributes}) |
| 70 70 | |
| 71 71 | Tracer.set_current_span(new_ctx) |
| @@ -87,6 +87,8 @@ defmodule OpentelemetryAbsinthe.Instrumentation do | |
| 87 87 | |
| 88 88 | Tracer.set_attributes(result_attributes) |
| 89 89 | Tracer.end_span() |
| 90 | + |
| 91 | + restore_parent_ctx() |
| 90 92 | :ok |
| 91 93 | end |
| 92 94 | |
| @@ -96,4 +98,17 @@ defmodule OpentelemetryAbsinthe.Instrumentation do | |
| 96 98 | # https://elixirforum.com/t/creating-list-adding-elements-on-specific-conditions/6295/4?u=learts |
| 97 99 | defp put_if(list, false, _), do: list |
| 98 100 | defp put_if(list, true, value), do: [value | list] |
| 101 | + |
| 102 | + # taken from https://github.com/opentelemetry-beam/opentelemetry_plug/blob/82206fb09fbeb9ffa2f167a5f58ea943c117c003/lib/opentelemetry_plug.ex#L186 |
| 103 | + @ctx_key {__MODULE__, :parent_ctx} |
| 104 | + defp save_parent_ctx do |
| 105 | + ctx = Tracer.current_span_ctx() |
| 106 | + Process.put(@ctx_key, ctx) |
| 107 | + end |
| 108 | + |
| 109 | + defp restore_parent_ctx do |
| 110 | + ctx = Process.get(@ctx_key, :undefined) |
| 111 | + Process.delete(@ctx_key) |
| 112 | + Tracer.set_current_span(ctx) |
| 113 | + end |
| 99 114 | end |
| @@ -4,7 +4,7 @@ defmodule OpentelemetryAbsinthe.MixProject do | |
| 4 4 | def project do |
| 5 5 | [ |
| 6 6 | app: :opentelemetry_absinthe, |
| 7 | - version: "1.0.0-rc.1", |
| 7 | + version: "1.0.0-rc.3", |
| 8 8 | elixir: "~> 1.10", |
| 9 9 | start_permanent: Mix.env() == :prod, |
| 10 10 | deps: deps(), |