Project

pbx

0.0
The project is in a healthy, maintained state
A terminal UI for monitoring Asterisk PBX extension status via AMI.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 0.15
~> 13.2
~> 3.13
~> 1.40

Runtime

~> 0.1
~> 0.1
~> 0.2
~> 1.3
 Project Readme

pbx

A terminal UI dashboard for monitoring an Asterisk PBX via AMI (Asterisk Manager Interface).

Features

  • Peers tab (p) — live SIP/PJSIP peer status with IP address, port, type, RTT, and last-change time
  • Calls tab (c) — active channel tracking with state, dialplan app, connected party, and duration
  • Queues tab (q) — queue summary with strategy, callers waiting, available/total agents, completed, abandoned, and average hold time
  • All three tabs update in real time from the AMI event stream
  • Press e or Esc or Ctrl-C to quit; press i for the info modal

Requirements

  • Ruby >= 3.2
  • An Asterisk PBX with AMI enabled

Installation

git clone https://github.com/emilianodellacasa/pbx
cd pbx
bundle install

Usage

bundle exec exe/pbx monitor --host HOST --port PORT --user USER --secret SECRET

All flags are optional and fall back to the values in the config file, then to built-in defaults (127.0.0.1:5038).

Options

Flag Default Description
--host 127.0.0.1 AMI host
--port 5038 AMI port
--user AMI username
--secret AMI password
--config, -c Path to a YAML config file
--debug Write raw AMI traffic to /tmp/pbx_debug.log

YAML configuration

Create a file (e.g. ~/.pbx.yml) and pass it with -c:

host: pbx.example.com
port: 5038
user: monitor
secret: s3cret

CLI flags override YAML values; YAML values override built-in defaults.

Keyboard shortcuts

Key Action
p Peers tab
c Calls tab
q Queues tab
/ Scroll the active table
i Info modal
e / Esc / Ctrl-C Quit

AMI user setup

The monitor only needs read access — it issues just Login, SIPpeers, PJSIPShowEndpoints, QueueStatus, Events and Logoff, none of which require a write class. A minimal /etc/asterisk/manager.conf entry:

[monitor]
secret = s3cret
read = system,call,agent,reporting,dialplan

system covers peer and endpoint discovery, agent and reporting the queue events, call the channel events and dialplan the Newexten app updates.

Development

bundle exec rspec        # run the test suite
bundle exec standardrb   # check code style
bundle exec standardrb --fix  # auto-fix style violations

Releasing

Releases are published to RubyGems by .github/workflows/release.yml, triggered by pushing a v* tag. The workflow refuses to publish unless the tag matches Pbx::VERSION, the suite and linter pass, and the version is not already on RubyGems.

One-time setup: add a RubyGems API key with the push scope to this repository as the RUBYGEMS_AUTH_TOKEN secret (Settings → Secrets and variables → Actions). The name matches the secret the ruby-asterisk repo already uses; GitHub secrets do not cross repositories, so it has to be added here too even if that token is reused.

To cut a release:

# 1. bump the version
$EDITOR lib/pbx/version.rb
bundle install                     # refresh the version in Gemfile.lock
git commit -am "Release v0.2.0"

# 2. tag and push — pushing the tag is what publishes
git tag v0.2.0
git push origin main --tags

bundle exec rake release (from bundler/gem_tasks) also works for publishing by hand; allowed_push_host in the gemspec keeps either path pointed at rubygems.org.