Packages

Elixir messaging library using RabbitMQ, providing easy-to-use modules for message publishing, consuming, and retry handling

Current section

Files

Jump to
hare_mq lib telemetry.ex
Raw

lib/telemetry.ex

defmodule HareMq.Telemetry do
@moduledoc """
Telemetry events emitted by HareMq.
Attach handlers using `:telemetry.attach/4` or `:telemetry.attach_many/4`.
## Connection events
### `[:hare_mq, :connection, :connected]`
Emitted when a broker connection is successfully opened.
| Key | Value |
|---|---|
| measurements `:system_time` | `System.system_time()` |
| metadata `:connection_name` | Registered process name (e.g. `{:global, HareMq.Connection}`) |
| metadata `:host` | AMQP URL string |
### `[:hare_mq, :connection, :disconnected]`
Emitted when a monitored connection process goes down unexpectedly.
| Key | Value |
|---|---|
| measurements `:system_time` | `System.system_time()` |
| metadata `:connection_name` | Registered process name |
| metadata `:reason` | Exit reason from the `:DOWN` message |
### `[:hare_mq, :connection, :reconnecting]`
Emitted whenever a reconnect attempt is scheduled (missing config or failed open).
| Key | Value |
|---|---|
| measurements `:retry_delay_ms` | Milliseconds until next attempt |
| metadata `:connection_name` | Registered process name |
| metadata `:reason` | `:missing_config` or the connection error term |
## Consumer events
### `[:hare_mq, :consumer, :connected]`
Emitted when a consumer channel is open and `Basic.consume` has been called.
| Key | Value |
|---|---|
| measurements `:system_time` | `System.system_time()` |
| metadata `:consumer` | Consumer module name |
| metadata `:queue` | Queue name |
| metadata `:exchange` | Exchange name |
| metadata `:routing_key` | Routing key |
| metadata `:stream` | `true` for stream consumers |
### `[:hare_mq, :consumer, :message, :start]`
### `[:hare_mq, :consumer, :message, :stop]`
### `[:hare_mq, :consumer, :message, :exception]`
Emitted by `:telemetry.span/3` around the user-supplied `consume/1` callback.
Start/stop/exception events follow the standard `:telemetry.span` contract.
Start metadata:
| Key | Value |
|---|---|
| metadata `:queue` | Queue name |
| metadata `:exchange` | Exchange name |
| metadata `:routing_key` | Routing key |
Stop measurements additionally include `:duration` (native time units).
Stop metadata additionally includes `:result` (`:ok` or `:error`).
## Publisher events
### `[:hare_mq, :publisher, :connected]`
Emitted when a publisher channel is open and ready to publish.
| Key | Value |
|---|---|
| measurements `:system_time` | `System.system_time()` |
| metadata `:publisher` | Publisher module name |
| metadata `:exchange` | Exchange name |
| metadata `:routing_key` | Routing key |
### `[:hare_mq, :publisher, :message, :published]`
Emitted after `AMQP.Basic.publish/5` returns `:ok`.
| Key | Value |
|---|---|
| measurements `:system_time` | `System.system_time()` |
| metadata `:publisher` | Publisher module name |
| metadata `:exchange` | Exchange name |
| metadata `:routing_key` | Routing key |
### `[:hare_mq, :publisher, :message, :not_connected]`
Emitted when `publish_message/1` is called but no channel is available.
| Key | Value |
|---|---|
| measurements `:system_time` | `System.system_time()` |
| metadata `:publisher` | Publisher module name |
| metadata `:exchange` | Exchange name |
| metadata `:routing_key` | Routing key |
## Retry publisher events
### `[:hare_mq, :retry_publisher, :message, :retried]`
Emitted when a failed message is sent to a delay queue.
| Key | Value |
|---|---|
| measurements `:retry_count` | Current retry attempt number |
| measurements `:system_time` | `System.system_time()` |
| metadata `:queue` | Main queue name |
| metadata `:delay_queue` | Target delay queue name |
### `[:hare_mq, :retry_publisher, :message, :dead_lettered]`
Emitted when a message has exceeded `retry_limit` and is sent to the dead-letter queue.
| Key | Value |
|---|---|
| measurements `:retry_count` | Final retry count |
| measurements `:system_time` | `System.system_time()` |
| metadata `:queue` | Main queue name |
| metadata `:dead_queue` | Dead-letter queue name |
## Example: attaching a simple logger handler
:telemetry.attach_many(
"hare-mq-logger",
[
[:hare_mq, :connection, :connected],
[:hare_mq, :connection, :disconnected],
[:hare_mq, :consumer, :message, :stop],
[:hare_mq, :retry_publisher, :message, :dead_lettered]
],
fn event, measurements, metadata, _config ->
require Logger
Logger.info("[telemetry] \#{inspect(event)} \#{inspect(measurements)} \#{inspect(metadata)}")
end,
nil
)
"""
end