Current section
Files
Jump to
Current section
Files
lib/plug/close_tracing.ex
defmodule ExApiTracing.Plug.CloseTracing do
@behaviour Plug
import Plug.Conn
alias ExRay.Span
alias ExRay.Store
alias ExApiTracing.Tracing.ExPhx
def init(opts), do: opts
def call(conn, _opts) do
register_before_send(conn, fn(conn) ->
trace_id = conn |> ExPhx.trace_id
stacktraces = if conn.status == 500 do Process.info(conn.owner, :current_stacktrace) |> elem(1) else nil end
traceStore = Store.get(trace_id)
if length(traceStore) == 2 do
Store.current(trace_id)
|> :otter.tag(:component, "controller")
|> :otter.tag(:controller, conn |> ExPhx.controller_name)
|> :otter.tag(:action, conn |> ExPhx.action_name)
|> :otter.log("Controller action #{conn |> ExPhx.action_name}")
|> Span.close(trace_id)
end
case Store.current(trace_id) do
nil -> nil
parent_span -> parent_span
|> :otter.tag(:scheme, conn.scheme)
|> :otter.tag(:host, conn.host)
|> :otter.tag(:method, conn.method)
|> :otter.tag(:request_path, conn.request_path)
|> :otter.tag(:query_string, conn.query_string)
|> :otter.tag(:status, conn.status)
|> :otter.tag(:resp_body, conn.resp_body)
|> :otter.tag(:stacktrace, stacktraces)
|> :otter.log("Request completed.")
|> Span.close(trace_id)
end
conn
end)
end
end