repo.exs (679B)
1 defmodule Ecto.Integration.Repo do 2 defmacro __using__(opts) do 3 quote do 4 use Ecto.Repo, unquote(opts) 5 6 @query_event __MODULE__ 7 |> Module.split() 8 |> Enum.map(& &1 |> Macro.underscore() |> String.to_atom()) 9 |> Kernel.++([:query]) 10 11 def init(_, opts) do 12 fun = &Ecto.Integration.Repo.handle_event/4 13 :telemetry.attach_many(__MODULE__, [[:custom], @query_event], fun, :ok) 14 {:ok, opts} 15 end 16 end 17 end 18 19 def handle_event(event, latency, metadata, _config) do 20 handler = Process.delete(:telemetry) || fn _, _, _ -> :ok end 21 handler.(event, latency, metadata) 22 end 23 end