defmodule Plug.AccessLog.DefaultFormatter.RequestServingTime do @moduledoc """ Calculates the time taken to serve the request. """ use Timex @type time_format :: String.t | :seconds | :milliseconds | :microseconds @doc """ Formats the log output. """ @spec format(Plug.Conn.t, time_format) :: iodata def format(conn, "s"), do: format(conn, :seconds) def format(conn, "ms"), do: format(conn, :milliseconds) def format(conn, "us"), do: format(conn, :microseconds) def format(conn, format) do conn.private[:plug_accesslog] |> Map.get(:timestamp) |> Duration.from_erl() |> Duration.diff(Duration.now(), format) |> Kernel.*(-1) |> round() |> to_string() end end