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
Current section
Files
lib/raxol/terminal/telemetry_prometheus.ex
defmodule Raxol.Terminal.TelemetryPrometheus do
@moduledoc """
Example integration of Telemetry.Metrics and TelemetryMetricsPrometheus for Raxol terminal events.
Add this module to your supervision tree to automatically export terminal metrics for Prometheus scraping.
## Usage
def start(_type, _args) do
children = [
{TelemetryMetricsPrometheus, metrics: Raxol.Terminal.TelemetryPrometheus.metrics()}
]
Supervisor.start_link(children, strategy: :one_for_one)
end
"""
import Telemetry.Metrics
@doc """
Returns a list of Telemetry metrics for Raxol terminal events, including advanced Prometheus metrics.
"""
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"),
distribution("raxol.terminal.scroll_event.delta",
measurement: :delta,
unit: :event,
tags: [:direction],
tag_values: &__MODULE__.scroll_tags/1,
buckets: [-20, -10, 0, 10, 20, 50, 100]
),
summary("raxol.terminal.paste_event.length",
measurement: :length,
unit: :character
)
]
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