PHPackages                             broqit/laravel-ping-pong-monitor - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. broqit/laravel-ping-pong-monitor

ActiveProject[Framework](/categories/framework)

broqit/laravel-ping-pong-monitor
================================

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

1.0.1(2mo ago)00MITPHPPHP ^8.2

Since Mar 6Pushed 2mo agoCompare

[ Source](https://github.com/broqit/laravel-ping-pong-monitor)[ Packagist](https://packagist.org/packages/broqit/laravel-ping-pong-monitor)[ RSS](/packages/broqit-laravel-ping-pong-monitor/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)Dependencies (14)Versions (3)Used By (0)

Ping-Pong Monitor
=================

[](#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
-----------

[](#screenshots)

[![Dashboard screenshot](public/images/screenshot_01.png)](public/images/screenshot_01.png)

[![Public incidents screenshot](public/images/screenshot_02.png)](public/images/screenshot_02.png)

Features
--------

[](#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
---------------------

[](#supported-check-types)

TypePurposeDefault ports`http`HTTP/HTTPS endpoint, status code, body, SSL verification`80`, `443``tcp`Raw TCP connectivityany`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 endpointcustomMain Pages
----------

[](#main-pages)

URLDescription`/`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 managementData Model
----------

[](#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
-----------------

[](#local-development)

### Requirements

[](#requirements)

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

### Quick Start

[](#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 .

### Queue and Scheduler

[](#queue-and-scheduler)

The app expects:

- a queue worker
- the Laravel scheduler

The project already schedules monitoring every minute in [routes/console.php](/Users/work/Sites/ping-pong/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
---------------------

[](#notification-channels)

Each notification channel stores its own `config` payload.

ChannelRequired config fieldsEmail`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
------------------

[](#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
------

[](#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

[](#files)

- [Dockerfile](/Users/work/Sites/ping-pong/Dockerfile)
- [docker-compose.yml](/Users/work/Sites/ping-pong/docker-compose.yml)
- [entrypoint.sh](/Users/work/Sites/ping-pong/docker/entrypoint.sh)
- [supervisord.conf](/Users/work/Sites/ping-pong/docker/supervisord.conf)

### Start with Docker

[](#start-with-docker)

```
docker compose up --build
```

Then open .

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

[](#stop-docker)

```
docker compose down
```

To remove the persistent SQLite volume too:

```
docker compose down -v
```

Project Structure
-----------------

[](#project-structure)

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

```

Important parts:

- [CheckServicesCommand.php](/Users/work/Sites/ping-pong/app/Console/Commands/CheckServicesCommand.php)
- [RunServiceCheckJob.php](/Users/work/Sites/ping-pong/app/Jobs/RunServiceCheckJob.php)
- [DispatchServiceChecksJob.php](/Users/work/Sites/ping-pong/app/Jobs/DispatchServiceChecksJob.php)
- [MonitorService.php](/Users/work/Sites/ping-pong/app/Services/Monitor/MonitorService.php)
- [CheckerFactory.php](/Users/work/Sites/ping-pong/app/Services/Monitor/CheckerFactory.php)
- [Dashboard.php](/Users/work/Sites/ping-pong/app/Livewire/Dashboard.php)
- [ServiceManager.php](/Users/work/Sites/ping-pong/app/Livewire/Admin/ServiceManager.php)
- [NotificationManager.php](/Users/work/Sites/ping-pong/app/Livewire/Admin/NotificationManager.php)

Extending the Project
---------------------

[](#extending-the-project)

### Add a new check type

[](#add-a-new-check-type)

1. Create a checker in `app/Services/Monitor/Checkers/`.
2. Register it in [CheckerFactory.php](/Users/work/Sites/ping-pong/app/Services/Monitor/CheckerFactory.php).
3. Add admin form fields for its configuration.
4. Add UI icon mapping for the new type.

### Add a new notification channel

[](#add-a-new-notification-channel)

1. Extend the channel model labels/icons.
2. Add delivery logic in [MonitorService.php](/Users/work/Sites/ping-pong/app/Services/Monitor/MonitorService.php) or the admin sender.
3. Add configuration fields in the admin UI.

License
-------

[](#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](LICENSE).

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance86

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

67d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/8b0183fae593d83cd5fb3426199ba05ec2d2513b0eb40187e4793a9145256e9d?d=identicon)[broqit](/maintainers/broqit)

---

Tags

frameworklaravel

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/broqit-laravel-ping-pong-monitor/health.svg)

```
[![Health](https://phpackages.com/badges/broqit-laravel-ping-pong-monitor/health.svg)](https://phpackages.com/packages/broqit-laravel-ping-pong-monitor)
```

###  Alternatives

[nasirkhan/laravel-starter

A CMS like modular Laravel starter project.

1.4k2.7k](/packages/nasirkhan-laravel-starter)[raugadh/fila-starter

Laravel Filament Starter.

614.9k](/packages/raugadh-fila-starter)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
