rmdev / pulse-manticore
Manticore Search monitoring card for Laravel Pulse
Requires
- php: ^8.2
- laravel/framework: ^11.0|^12.0
- laravel/pulse: ^1.0
- livewire/livewire: ^3.0
README
Manticore Search monitoring card for Laravel Pulse.
Metrics
Global
- QPS (queries per second, delta-based)
- Average query latency
- Active connections
- Memory usage
- Uptime
- Command breakdown (searches, inserts, updates, deletes)
Per table (collected in parallel via HTTP pool)
- Total searches
- Queries per minute (QPM)
- Average latency (ms)
- p95 latency (ms)
- p99 latency (ms)
Tables are sorted by total searches descending. Latency columns are color-coded: green < 100ms, yellow 100–500ms, red ≥ 500ms.
Installation
Via Packagist
composer require rmdev/pulse-manticore
Via local path (development)
Add to your Laravel project's composer.json:
"repositories": [ { "type": "path", "url": "../pulse-manticore" } ], "require": { "rmdev/pulse-manticore": "*" }
composer require rmdev/pulse-manticore
Configuration
Add the recorder to config/pulse.php:
use RmDev\PulseManticore\Recorders\ManticoreRecorder; 'recorders' => [ ManticoreRecorder::class => [ 'host' => env('MANTICORE_HOST', 'http://localhost'), 'http_port' => env('MANTICORE_HTTP_PORT', 9308), 'tables' => [ 'only_prefixes' => [], 'only_suffixes' => [], 'except_prefixes' => [], 'except_contains' => [], 'except_suffixes' => [], 'only_types' => [], ], ], ],
Add to your .env:
MANTICORE_HOST=http://manticore MANTICORE_HTTP_PORT=9308
Table filters
All filters default to [] (no filtering). Filters are applied in this order:
| Filter | Type | Description |
|---|---|---|
only_prefixes |
string[] |
Include only tables whose name starts with one of the given prefixes |
only_suffixes |
string[] |
Include only tables whose name ends with one of the given suffixes |
except_prefixes |
string[] |
Exclude tables whose name starts with one of the given prefixes |
except_contains |
string[] |
Exclude tables whose name contains one of the given substrings |
except_suffixes |
string[] |
Exclude tables whose name ends with one of the given suffixes |
only_types |
string[] |
Include only tables of the given types (local, distributed, rt) |
Examples:
// Show only distributed tables, excluding test and staging tables 'tables' => [ 'only_types' => ['distributed'], 'except_suffixes' => ['test', 'staging'], ], // Show only tables with a specific prefix, excluding historic data tables 'tables' => [ 'only_prefixes' => ['orders', 'products'], 'except_contains' => ['historic', 'archive'], ], // Exclude all test and temporary tables regardless of prefix 'tables' => [ 'except_suffixes' => ['test'], 'except_contains' => ['tmp', 'temp'], ],
Avoiding noise in Slow Outgoing Requests
The recorder makes HTTP requests to Manticore every 15s. To prevent these from appearing in the Pulse Slow Outgoing Requests card, add an ignore rule:
Recorders\SlowOutgoingRequests::class => [ // ... 'ignore' => [ '#' . preg_quote(env('MANTICORE_HOST', 'manticore'), '#') . '#', ], ],
Dashboard
Publish the Pulse dashboard if you haven't already:
php artisan vendor:publish --tag=pulse-dashboard
Add the card to resources/views/vendor/pulse/dashboard.blade.php:
<livewire:pulse.manticore-card cols="4" />
Publishing views
To customize the card view:
php artisan vendor:publish --tag=pulse-manticore-views
Requirements
- PHP 8.2+
- Laravel 11 or 12
- Laravel Pulse ^1.0
- Livewire ^3.0
- Manticore Search with HTTP API enabled (port 9308 by default)