`telemetry_event` Overrides Repo Query Event
Ecto gives you a single telemetry event out of the box, [:my_app, :repo, :query]
, where the [:my_app, :repo]
is the telemetry prefix option for ecto.
This event is called whenever any request to the database is made:
handler = fn _, measurements, _, _ ->
send(self(), :test_message)
end
:telemetry.attach(
"query",
[:test_telemetry, :repo, :query],
handler,
%{}
)
Repo.all(TestTelemetry.Colour)
assert_receive(:test_message)
This event is overriden when using the the :telemetry_event
option, a shared option for all Repo
query functions.
handler = fn _, measurements, _, _ ->
send(self(), :test_message)
end
custom_handler = fn _, measurements, _, _ ->
send(self(), :custom_message)
end
:telemetry.attach(
"query",
[:test_telemetry, :repo, :query],
handler,
%{}
)
:telemetry.attach(
"custom",
[:custom],
custom_handler,
%{}
)
Repo.all(TestTelemetry.Colour, telemetry_event: [:custom])
assert_receive(:custom_message)
refute_receive(:test_message)
Which means for any given query you can only broadcast one event. If you have a system that keeps track of expensive queries but you also need to debug a particular query in production, you will take that query out of the system to track expensive queries.
Tweet