Current section

22 Versions

Jump to

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(),