LaravelPackages.net
Acme Inc.
Toggle sidebar
broqit/laravel-ping-pong-monitor

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

0
0
1.0.1
About broqit/laravel-ping-pong-monitor

broqit/laravel-ping-pong-monitor is a Laravel package for internal service monitoring system for http/tcp/db checks with incidents and multi-channel notifications.. It currently has 0 GitHub stars and 0 downloads on Packagist (latest version 1.0.1). Install it with composer require broqit/laravel-ping-pong-monitor. Discover more Laravel packages by broqit or browse all Laravel packages to compare alternatives.

Last updated

Ping-Pong Monitor

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.

Star History Chart