defmodule Core.Telemetry.Events do
@moduledoc """
Telemetry event name constants and emit helpers for Elixir Server Core.
## Events
| Event | Emitted when |
|--------------------------|--------------------------------------|
| `[:core, :job, :start]` | A worker begins executing a job |
| `[:core, :job, :stop]` | A job completes successfully |
| `[:core, :job, :error]` | A job raises an exception |
## Attaching handlers
:telemetry.attach_many(
"my-handler",
[Core.Telemetry.Events.job_start(), Core.Telemetry.Events.job_stop()],
&MyApp.Telemetry.handle_event/4,
nil
)
"""
@job_start [:core, :job, :start]
@job_stop [:core, :job, :stop]
@job_error [:core, :job, :error]
def job_start, do: @job_start
def job_stop, do: @job_stop
def job_error, do: @job_error
@doc """
Emit job_start. Called by the worker before performing work.
"""
def emit_job_start(job_id, attempt, payload) do
:telemetry.execute(@job_start, %{}, %{job_id: job_id, attempt: attempt, payload: payload})
end
@doc """
Emit job_stop. Called by the worker on success.
"""
def emit_job_stop(job_id, duration_native) do
:telemetry.execute(@job_stop, %{duration: duration_native}, %{job_id: job_id})
end
@doc """
Emit job_error. Called by the worker on exception.
"""
def emit_job_error(job_id, duration_native, error_message) do
:telemetry.execute(@job_error, %{duration: duration_native}, %{job_id: job_id, error: error_message})
end
end