Packages

Multi-surface application runtime for Elixir. One TEA module renders to terminal, browser (LiveView), SSH, and MCP (agents). 30+ widgets, flexbox + CSS grid, AI agent runtime, distributed swarm with CRDTs, time-travel debugging, session recording, sandboxed REPL, and agentic commerce.

Current section

Files

Jump to
raxol lib raxol terminal telemetry_metrics.ex
Raw

lib/raxol/terminal/telemetry_metrics.ex

defmodule Raxol.Terminal.TelemetryMetrics do
@moduledoc """
Example integration of Telemetry.Metrics and TelemetryMetricsStatsd for Raxol terminal events.
Add this module to your supervision tree to automatically report terminal metrics to StatsD (or Datadog).
## Usage
def start(_type, _args) do
children = [
{TelemetryMetricsStatsd, metrics: Raxol.Terminal.TelemetryMetrics.metrics(), formatter: :datadog}
]
Supervisor.start_link(children, strategy: :one_for_one)
end
## Richer Metrics Example
- `summary/2` for scroll delta (average scroll amount)
- `counter/2` for mode changes, tagged by mode
"""
import Telemetry.Metrics
@doc """
Returns a list of Telemetry metrics for Raxol terminal events.
"""
def metrics do
[
counter("raxol.terminal.focus_changed"),
counter("raxol.terminal.resized"),
counter("raxol.terminal.mode_changed",
tags: [:mode],
tag_values: &__MODULE__.mode_tag/1
),
counter("raxol.terminal.clipboard_event"),
counter("raxol.terminal.selection_changed"),
counter("raxol.terminal.paste_event"),
counter("raxol.terminal.cursor_event"),
summary("raxol.terminal.scroll_event.delta",
measurement: :delta,
unit: :event,
tags: [:direction],
tag_values: &__MODULE__.scroll_tags/1
)
]
end
def mode_tag(%{mode: mode}), do: %{mode: mode}
def mode_tag(_), do: %{}
def scroll_tags(%{direction: dir}), do: %{direction: dir}
def scroll_tags(_), do: %{}
end