Current section

Files

Jump to
exq lib exq middleware logger.ex
Raw

lib/exq/middleware/logger.ex

defmodule Exq.Middleware.Logger do
@behaviour Exq.Middleware.Behaviour
alias Exq.Middleware.Pipeline
import Pipeline
use Timex
require Logger
def before_work(pipeline) do
Logger.info("#{log_context(pipeline)} start")
assign(pipeline, :started_at, Time.now)
end
def after_processed_work(pipeline) do
Logger.info("#{log_context(pipeline)} done: #{formatted_diff(delta(pipeline))} sec")
pipeline
end
def after_failed_work(pipeline) do
Logger.info(to_string(pipeline.assigns.error_message))
Logger.info("#{log_context(pipeline)} fail: #{formatted_diff(delta(pipeline))} sec")
pipeline
end
defp delta(%Pipeline{assigns: assigns}) do
Time.diff(Time.now, assigns.started_at, :microseconds)
end
defp log_context(%Pipeline{assigns: assigns}) do
"#{assigns.worker_module}[#{assigns.job.jid}]"
end
defp formatted_diff(diff) when diff > 1000, do: [diff |> div(1000) |> Integer.to_string, "ms"]
defp formatted_diff(diff), do: [diff |> Integer.to_string, "µs"]
end