broqit/laravel-ping-pong-monitor

Internal service monitoring system for HTTP/TCP/DB checks with incidents and multi-channel notifications.

Maintainers

Package info

github.com/broqit/laravel-ping-pong-monitor

Type:project

pkg:composer/broqit/laravel-ping-pong-monitor

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

1.0.1 2026-03-06 22:52 UTC

This package is auto-updated.

Last update: 2026-03-07 11:27:17 UTC


README

Ping-Pong Monitor is an internal service monitoring system built with Laravel 12, Livewire 4, and Flux UI.

It monitors HTTP endpoints, databases, queues, search engines, brokers, SMTP servers, and custom REMP health endpoints across multiple environments such as dev, stage, and prod. When a service goes down or recovers, the system can notify the team via Email, Slack, Telegram, Microsoft Teams, Discord, or generic webhooks.

Screenshots

Dashboard screenshot

Public incidents screenshot

Features

  • Service grouping by domain or platform area
  • Environment-aware checks (dev, stage, prod)
  • Queue-based health checks with per-check jobs
  • Public incidents page
  • Recent incidents tracking with resolution status and duration
  • Manual rerun actions for a single check, a group, or all checks
  • Notification channels with test-send buttons
  • Live dashboard with periodic refresh
  • Support for custom health formats such as REMP service health JSON

Supported Check Types

Type Purpose Default ports
http HTTP/HTTPS endpoint, status code, body, SSL verification 80, 443
tcp Raw TCP connectivity any
mysql MySQL/MariaDB connectivity via PDO 3306
postgres PostgreSQL connectivity via PDO 5432
redis Redis connectivity / ping 6379
elasticsearch Cluster health check 9200
memcache Memcache stats check 11211
minio MinIO live/ready probes 9000, 9001
meilisearch Meilisearch health API 7700
sphinx SphinxQL or binary TCP checks 9306, 9312
rabbitmq Management API or AMQP connectivity 15672, 5672
smtp SMTP EHLO / STARTTLS / implicit TLS 25, 465
remp REMP health JSON endpoint custom

Main Pages

URL Description
/ Public landing page
/incidents Public incidents page with environment filter
/dashboard Authenticated monitoring dashboard
/monitor/services Service groups, services, and checks management
/monitor/notifications Notification channels management

Data Model

ServiceGroup
  -> Service
    -> ServiceCheck -> Environment
      -> CheckResult
      -> Incident
  • ServiceGroup groups related services
  • Service represents an application or infrastructure component
  • ServiceCheck stores a concrete health check definition
  • Environment separates the same check across dev, stage, and prod
  • CheckResult stores historical executions
  • Incident represents a down/degraded period and its recovery

Local Development

Requirements

  • PHP 8.2+
  • Composer
  • Node.js 20+
  • npm or pnpm
  • SQLite by default, or another Laravel-supported database

Quick Start

composer install
npm install

cp .env.example .env
php artisan key:generate

touch database/database.sqlite
php artisan migrate
php artisan db:seed --class=Database\\Seeders\\MonitorSeeder

composer run dev

Open http://localhost:8000.

Queue and Scheduler

The app expects:

  • a queue worker
  • the Laravel scheduler

The project already schedules monitoring every minute in routes/console.php.

Manual commands:

php artisan monitor:check
php artisan monitor:check --sync
php artisan monitor:check --id=5 --sync
php artisan queue:work --tries=1 --timeout=30
php artisan schedule:work

Notification Channels

Each notification channel stores its own config payload.

Channel Required config fields
Email to
Slack webhook_url
Telegram bot_token, chat_id
Microsoft Teams webhook_url
Discord webhook_url
Webhook webhook_url

You can enable or disable notifications independently for:

  • down events
  • recovery events

The admin UI also supports sending test notifications per channel.

REMP Health Checks

The project includes support for REMP-style health endpoints that return JSON such as:

{
  "status": "OK",
  "database": { "status": "OK" },
  "redis": { "status": "OK" },
  "log": { "status": "OK" },
  "storage": { "status": "OK" }
}

The remp checker can validate:

  • overall status
  • individual component status
  • detailed failure messages and context

Docker

The repository includes a simple Docker setup for local use. It runs:

  • the Laravel app on port 8000
  • a queue worker
  • the scheduler

Files

Start with Docker

docker compose up --build

Then open http://localhost:8000.

The container entrypoint will:

  • create APP_KEY if missing
  • create the SQLite database file if needed
  • run migrations

If you want fresh seed data:

docker compose exec app php artisan db:seed --class=Database\\Seeders\\MonitorSeeder

Stop Docker

docker compose down

To remove the persistent SQLite volume too:

docker compose down -v

Project Structure

app/
  Console/
  Jobs/
  Livewire/
  Models/
  Notifications/
  Services/Monitor/
config/
database/
public/
resources/views/
routes/
tests/

Important parts:

Extending the Project

Add a new check type

  1. Create a checker in app/Services/Monitor/Checkers/.
  2. Register it in CheckerFactory.php.
  3. Add admin form fields for its configuration.
  4. Add UI icon mapping for the new type.

Add a new notification channel

  1. Extend the channel model labels/icons.
  2. Add delivery logic in MonitorService.php or the admin sender.
  3. Add configuration fields in the admin UI.

License

This project is licensed under the MIT License.

That means other developers can fork it, submit pull requests, and reuse the code under standard MIT terms. See LICENSE.