defmodule Plaid.Telemetry do
@moduledoc """
Custom implementation of `telemetry` using Tesla Middleware.
"""
@moduledoc deprecated: "Use Tesla.Middleware.Telemetry instead"
@events_prefix [:plaid, :request]
@behaviour Tesla.Middleware
@impl Tesla.Middleware
@deprecated "Use Tesla.Middleware.Telemetry instead"
def call(env, next, _opts) do
metadata = env.opts[:metadata] || %{}
start_time = System.monotonic_time()
:telemetry.execute(@events_prefix ++ [:start], %{system_time: start_time}, metadata)
try do
Tesla.run(env, next)
rescue
exception ->
:telemetry.execute(
@events_prefix ++ [:exception],
%{duration: System.monotonic_time() - start_time},
Map.put(metadata, :exception, exception)
)
reraise exception, __STACKTRACE__
else
{:ok, env} = result ->
:telemetry.execute(
@events_prefix ++ [:stop],
%{duration: System.monotonic_time() - start_time},
Map.merge(metadata, %{result: result, status: env.status})
)
result
{:error, reason} = result ->
:telemetry.execute(
@events_prefix ++ [:stop],
%{duration: System.monotonic_time() - start_time},
Map.merge(metadata, %{result: result, reason: reason})
)
result
end
end
end