defmodule SpandexEcto.TelemetryAdapter do
@moduledoc """
This module provides event handler functions for telemetry
"""
alias SpandexEcto.EctoLogger
# this is for ecto_sql 3.0.x
def handle_event([_app_name, repo_name, :query], total_time, log_entry, config) when is_integer(total_time) do
EctoLogger.trace(log_entry, "#{repo_name}_database", config)
end
# This is for ecto_sql >= 3.1
def handle_event([_app_name, repo_name, :query], measurements, metadata, config) when is_map(measurements) do
log_entry = %{
query: metadata.query,
source: metadata.source,
params: metadata.params,
query_time: Map.get(measurements, :query_time, 0),
decode_time: Map.get(measurements, :decode_time, 0),
queue_time: Map.get(measurements, :queue_time, 0),
result: wrap_result(metadata.result),
resource: get_in(metadata, [:options, :spandex_resource])
}
EctoLogger.trace(log_entry, "#{repo_name}_database", config)
end
def handle_event(event_name, measurements, log_entry, config) when is_list(event_name) do
event_name
|> tl()
|> handle_event(measurements, log_entry, config)
end
defp wrap_result(result) when is_atom(result), do: {result, "n/a"}
defp wrap_result(result), do: result
end