I wish to filter out oban database metrics from telemetry.
The following is my poor attempt, but I am not succeeding:
defmodule MyAppWeb.Telemetry do
use Supervisor
import Telemetry.Metrics
def start_link(arg) do
Supervisor.start_link(__MODULE__, arg, name: __MODULE__)
end
@impl true
def init(_arg) do
children = [
# Telemetry poller will execute the given period measurements
# every 10_000ms. Learn more here: https://hexdocs.pm/telemetry_metrics
{:telemetry_poller, measurements: periodic_measurements(), period: 10_000}
# Add reporters as children of your supervision tree.
{Telemetry.Metrics.ConsoleReporter, metrics: metrics()}
]
Supervisor.init(children, strategy: :one_for_one)
end
def metrics do
[
# Database Metrics
summary("my_app.repo.query.total_time",
unit: {:native, :millisecond},
description: "The sum of the other measurements",
drop: &drop_oban_queries/1
),
summary("my_app.repo.query.decode_time",
unit: {:native, :millisecond},
description: "The time spent decoding the data received from the database",
drop: &drop_oban_queries/1
),
summary("my_app.repo.query.query_time",
unit: {:native, :millisecond},
description: "The time spent executing the query",
drop: &drop_oban_queries/1
),
summary("my_app.repo.query.queue_time",
unit: {:native, :millisecond},
description: "The time spent waiting for a database connection",
drop: &drop_oban_queries/1
),
summary("my_app.repo.query.idle_time",
unit: {:native, :millisecond},
description:
"The time the connection spent waiting before being checked out for the query",
drop: &drop_oban_queries/1
)
]
end
defp periodic_measurements do
[
# A module, function and arguments to be invoked periodically.
# This function must call :telemetry.execute/3 and a metric must be added above.
# {MyAppWeb, :count_users, []}
]
end
defp drop_oban_queries(metadata) do
case metadata do
%{options: options} when is_list(options) ->
Keyword.has_key?(options, :oban_conf)
_ ->
false
end
end
end