Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion lib/sentry/opentelemetry/span_processor.ex
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,15 @@ if Sentry.OpenTelemetry.VersionChecker.tracing_compatible?() do
SpanStorage.span_exists?(parent_span_id)
end

# Check if it's an HTTP server request span or a LiveView span
# Check if it's an HTTP server request span, a LiveView span, or an Oban consumer span
defp server_span?(%{kind: :server} = span_record) do
http_server_span?(span_record) or liveview_span?(span_record)
end

defp server_span?(%{kind: :consumer} = span_record) do
oban_consumer_span?(span_record)
end

defp server_span?(_), do: false

defp http_server_span?(%{kind: :server, attributes: attributes}) do
Expand All @@ -79,6 +83,10 @@ if Sentry.OpenTelemetry.VersionChecker.tracing_compatible?() do
defp liveview_span?(%{origin: "opentelemetry_phoenix"}), do: true
defp liveview_span?(_), do: false

defp oban_consumer_span?(%{kind: :consumer, attributes: attributes}) do
Map.get(attributes, to_string(MessagingAttributes.messaging_system())) == :oban
end

defp build_and_send_transaction(span_record) do
child_span_records = SpanStorage.get_child_spans(span_record.span_id)
transaction = build_transaction(span_record, child_span_records)
Expand Down
4 changes: 2 additions & 2 deletions test_integrations/phoenix_app/config/test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ config :phoenix_live_view,
enable_expensive_runtime_checks: true

config :sentry,
dsn: "https://public@sentry.example.com/1",
dsn: nil,
environment_name: :dev,
enable_source_code_context: true,
root_source_code_paths: [File.cwd!()],
test_mode: true,
send_result: :sync,
send_result: :none,
traces_sample_rate: 1.0,
enable_logs: true,
logs: [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,4 +172,24 @@ defmodule PhoenixAppWeb.PageController do
}
})
end

def api_oban_job(conn, params) do
alias PhoenixApp.Workers.TestWorker

sleep_time = Map.get(params, "sleep_time", "100") |> String.to_integer()
should_fail = Map.get(params, "should_fail", "false") == "true"

{:ok, job} =
%{"sleep_time" => sleep_time, "should_fail" => should_fail}
|> TestWorker.new()
|> OpentelemetryOban.insert()

json(conn, %{
job_id: job.id,
worker: job.worker,
queue: job.queue,
args: job.args,
enqueued: true
})
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ defmodule PhoenixAppWeb.TestWorkerLive do
%{"sleep_time" => sleep_time, "should_fail" => should_fail},
queue: queue
)
|> Oban.insert()
|> OpentelemetryOban.insert()
end

defp list_jobs do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<label class="block text-sm font-medium text-gray-700">Sleep Time (ms)</label>
<div class="mt-1">
<input
id="sleep-time-input"
type="number"
name="test_job[sleep_time]"
value="1000"
Expand Down Expand Up @@ -45,6 +46,7 @@

<div>
<button
id="schedule-job-btn"
type="submit"
class="inline-flex justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ defmodule PhoenixAppWeb.Router do
get "/error", PageController, :api_error
get "/health", PageController, :health
get "/api/data", PageController, :api_data
post "/api/oban-job", PageController, :api_oban_job
end

# Other scopes may use custom stacks.
Expand Down
6 changes: 1 addition & 5 deletions test_integrations/phoenix_app/mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,7 @@ defmodule PhoenixApp.MixProject do
{:opentelemetry_semantic_conventions, "~> 1.27"},
{:opentelemetry_bandit, "~> 0.1"},
{:opentelemetry_phoenix, "~> 2.0"},
# TODO: Update once merged
{:opentelemetry_oban, "~> 1.1",
github: "open-telemetry/opentelemetry-erlang-contrib",
branch: "main",
sparse: "instrumentation/opentelemetry_oban"},
{:opentelemetry_oban, "~> 1.2"},
{:opentelemetry_ecto, "~> 1.2"},
{:opentelemetry_logger_metadata, "~> 0.2.0"},
{:hackney, "~> 1.18"},
Expand Down
2 changes: 1 addition & 1 deletion test_integrations/phoenix_app/mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
"opentelemetry_ecto": {:hex, :opentelemetry_ecto, "1.2.0", "2382cb47ddc231f953d3b8263ed029d87fbf217915a1da82f49159d122b64865", [:mix], [{:opentelemetry_api, "~> 1.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:opentelemetry_process_propagator, "~> 0.2", [hex: :opentelemetry_process_propagator, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "70dfa2e79932e86f209df00e36c980b17a32f82d175f0068bf7ef9a96cf080cf"},
"opentelemetry_exporter": {:hex, :opentelemetry_exporter, "1.10.0", "972e142392dbfa679ec959914664adefea38399e4f56ceba5c473e1cabdbad79", [:rebar3], [{:grpcbox, ">= 0.0.0", [hex: :grpcbox, repo: "hexpm", optional: false]}, {:opentelemetry, "~> 1.7.0", [hex: :opentelemetry, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.5.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:tls_certificate_check, "~> 1.18", [hex: :tls_certificate_check, repo: "hexpm", optional: false]}], "hexpm", "33a116ed7304cb91783f779dec02478f887c87988077bfd72840f760b8d4b952"},
"opentelemetry_logger_metadata": {:hex, :opentelemetry_logger_metadata, "0.2.0", "b92116d5e5df698830dc607a8d033e7992d665aa55ea11698dc0bdba9712f6e0", [:mix, :rebar3], [{:opentelemetry_api, "~> 1.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}], "hexpm", "ef64cce2b5e49e5fcaf86ef67813b2fb2c2b9bee828229619abffb1087374783"},
"opentelemetry_oban": {:git, "https://github.com/open-telemetry/opentelemetry-erlang-contrib.git", "94e25887f7de87cbccc8ac35c598f281639b3f22", [branch: "main", sparse: "instrumentation/opentelemetry_oban"]},
"opentelemetry_oban": {:hex, :opentelemetry_oban, "1.2.0", "4cbdfaa533deda678b6b534ee806636359107b70b0687accd57074b1c440d383", [:mix], [{:nimble_options, "~> 1.1", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:oban, "~> 2.0", [hex: :oban, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.2", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:opentelemetry_semantic_conventions, "~> 1.27", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}, {:opentelemetry_telemetry, "~> 1.1", [hex: :opentelemetry_telemetry, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0c96790ad689ba6af6ca64ca2a148543c48090a2ae1c46cce2fd1b32d71b5f71"},
"opentelemetry_phoenix": {:hex, :opentelemetry_phoenix, "2.0.1", "c664cdef205738cffcd409b33599439a4ffb2035ef6e21a77927ac1da90463cb", [:mix], [{:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.4", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:opentelemetry_process_propagator, "~> 0.3", [hex: :opentelemetry_process_propagator, repo: "hexpm", optional: false]}, {:opentelemetry_semantic_conventions, "~> 1.27", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}, {:opentelemetry_telemetry, "~> 1.1", [hex: :opentelemetry_telemetry, repo: "hexpm", optional: false]}, {:otel_http, "~> 0.2", [hex: :otel_http, repo: "hexpm", optional: false]}, {:plug, ">= 1.11.0", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a24fdccdfa6b890c8892c6366beab4a15a27ec0c692b0f77ec2a862e7b235f6e"},
"opentelemetry_process_propagator": {:hex, :opentelemetry_process_propagator, "0.3.0", "ef5b2059403a1e2b2d2c65914e6962e56371570b8c3ab5323d7a8d3444fb7f84", [:mix, :rebar3], [{:opentelemetry_api, "~> 1.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}], "hexpm", "7243cb6de1523c473cba5b1aefa3f85e1ff8cc75d08f367104c1e11919c8c029"},
"opentelemetry_semantic_conventions": {:hex, :opentelemetry_semantic_conventions, "1.27.0", "acd0194a94a1e57d63da982ee9f4a9f88834ae0b31b0bd850815fe9be4bbb45f", [:mix, :rebar3], [], "hexpm", "9681ccaa24fd3d810b4461581717661fd85ff7019b082c2dff89c7d5b1fc2864"},
Expand Down
Loading
Loading