From 451250da9201815855cbeb35ee5cc124970a08a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20van=20Diemen?= Date: Thu, 10 Apr 2025 10:07:28 +0200 Subject: [PATCH] Add support for Bandit as Phoenix adapter --- README.md | 14 +++++++++++++- lib/tracing.ex | 17 +++++++++++++---- mix.exs | 1 + mix.lock | 1 + 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 34a931c..4676c14 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ The package can be installed by adding `tracing` to your list of dependencies in ```elixir def deps do [ - {:tracing, "~> 0.1.3"} + {:tracing, "~> 0.2"} ] end ``` @@ -46,3 +46,15 @@ defmodule MyApp.Application do end ``` +### Phoenix + +Tracing with Phoenix supports the option to specify the adapter: cowboy2 or bandit. By specifying the adapter it will +setup the adapter's opentelemetry as well. + +When not specifying an adapter, it will start opentelemetry with bandit as assumed adapter. + +```elixir +Tracing.setup([{:phoenix, adapter: :cowboy2]}]) +Tracing.setup([{:phoenix, adapter: :bandit]}]) +Tracing.setup([:phoenix]) # short for {:phoenix, adapter: :bandit} +``` diff --git a/lib/tracing.ex b/lib/tracing.ex index 5238e0c..6a9ee87 100644 --- a/lib/tracing.ex +++ b/lib/tracing.ex @@ -202,10 +202,19 @@ defmodule Tracing do def setup_element(:oban), do: Tracing.ObanTelemetry.setup() def setup_element({:phoenix, options}) do - if Keyword.get(options, :adapter) == :cowboy2 do - :opentelemetry_cowboy.setup() - end + case Keyword.get(options, :adapter) do + :cowboy2 -> + :opentelemetry_cowboy.setup() + OpentelemetryPhoenix.setup(options) + + :bandit -> + OpentelemetryBandit.setup() + OpentelemetryPhoenix.setup(options) - OpentelemetryPhoenix.setup(options) + _ -> + OpentelemetryPhoenix.setup(options) + end end + + def setup_element(:phoenix), do: setup_element({:phoenix, adapter: :bandit}) end diff --git a/mix.exs b/mix.exs index c89b6cd..55d2815 100644 --- a/mix.exs +++ b/mix.exs @@ -39,6 +39,7 @@ defmodule Tracing.MixProject do {:opentelemetry, "~> 1.5"}, {:opentelemetry_semantic_conventions, "~> 1.27"}, {:opentelemetry_api, "~> 1.4"}, + {:opentelemetry_bandit, "~> 0.2"}, {:opentelemetry_ecto, "~> 1.1"}, {:opentelemetry_exporter, "~> 1.8"}, {:opentelemetry_cowboy, "~> 1.0"}, diff --git a/mix.lock b/mix.lock index 1328c96..8dae2f1 100644 --- a/mix.lock +++ b/mix.lock @@ -25,6 +25,7 @@ "nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"}, "opentelemetry": {:hex, :opentelemetry, "1.5.0", "7dda6551edfc3050ea4b0b40c0d2570423d6372b97e9c60793263ef62c53c3c2", [:rebar3], [{:opentelemetry_api, "~> 1.4", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}], "hexpm", "cdf4f51d17b592fc592b9a75f86a6f808c23044ba7cf7b9534debbcc5c23b0ee"}, "opentelemetry_api": {:hex, :opentelemetry_api, "1.4.0", "63ca1742f92f00059298f478048dfb826f4b20d49534493d6919a0db39b6db04", [:mix, :rebar3], [], "hexpm", "3dfbbfaa2c2ed3121c5c483162836c4f9027def469c41578af5ef32589fcfc58"}, + "opentelemetry_bandit": {:hex, :opentelemetry_bandit, "0.2.0", "60ee4789994d4532ec1b4c05cb8fad333c60ba2c248eb908918369fde045bbda", [:mix], [{:nimble_options, "~> 1.1", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.3", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:opentelemetry_semantic_conventions, "~> 1.27", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: false]}, {:otel_http, "~> 0.2", [hex: :otel_http, repo: "hexpm", optional: false]}, {:plug, ">= 1.15.0", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.2", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "57e31355a860250c9203ae34f0bf0290a14b72ab02b154535e1b2512a0767bca"}, "opentelemetry_cowboy": {:hex, :opentelemetry_cowboy, "1.0.0", "786c7cde66a2493323c79d2c94e679ff501d459a9b403d8b60b9bef116333117", [:rebar3], [{:cowboy_telemetry, "~> 0.4", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.4", [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]}, {:otel_http, "~> 0.2", [hex: :otel_http, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.1", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7575716eaccacd0eddc3e7e61403aecb5d0a6397183987d6049094aeb0b87a7c"}, "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.8.0", "5d546123230771ef4174e37bedfd77e3374913304cd6ea3ca82a2add49cd5d56", [:rebar3], [{:grpcbox, ">= 0.0.0", [hex: :grpcbox, repo: "hexpm", optional: false]}, {:opentelemetry, "~> 1.5.0", [hex: :opentelemetry, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.4.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:tls_certificate_check, "~> 1.18", [hex: :tls_certificate_check, repo: "hexpm", optional: false]}], "hexpm", "a1f9f271f8d3b02b81462a6bfef7075fd8457fdb06adff5d2537df5e2264d9af"},