davit-vardanyan / netdata-laravel
A production-ready Laravel wrapper for the Netdata API v3 PHP SDK
Package info
github.com/davit-vardanyan/netdata-laravel
pkg:composer/davit-vardanyan/netdata-laravel
Requires
- php: ^8.2
- davit-vardanyan/netdata-php: ^1.0
- illuminate/cache: ^11.0|^12.0
- illuminate/console: ^11.0|^12.0
- illuminate/contracts: ^11.0|^12.0
- illuminate/events: ^11.0|^12.0
- illuminate/log: ^11.0|^12.0
- illuminate/notifications: ^11.0|^12.0
- illuminate/support: ^11.0|^12.0
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.0
- mockery/mockery: ^1.6
- orchestra/testbench: ^9.0|^10.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/phpstan: ^2.0
- phpstan/phpstan-deprecation-rules: ^2.0
Suggests
- davit-vardanyan/netdata-php: Required. The core Netdata API v3 PHP SDK that this package wraps.
README
A production-ready Laravel wrapper for the Netdata API v3 PHP SDK. Provides facade, multi-connection support, caching, artisan commands, monitoring, health checks, and more.
Requirements
- PHP 8.2+
- Laravel 11.x or 12.x
- davit-vardanyan/netdata-php ^1.0
Installation
composer require davit-vardanyan/netdata-laravel
The package auto-discovers its service provider and facade.
Configuration
Publish the configuration file:
php artisan vendor:publish --tag=netdata-config
Set your environment variables in .env:
NETDATA_TOKEN=your-bearer-token NETDATA_BASE_URL=https://registry.my-netdata.io
The base URL defaults to https://registry.my-netdata.io. Point it at any Netdata agent or Cloud instance — for example, a local agent at http://localhost:19999.
Multi-Connection Setup
// config/netdata.php 'connections' => [ 'default' => [ 'token' => env('NETDATA_TOKEN'), 'base_url' => env('NETDATA_BASE_URL', 'https://registry.my-netdata.io'), 'timeout' => (int) env('NETDATA_TIMEOUT', 30), 'read_timeout' => (int) env('NETDATA_READ_TIMEOUT', 60), 'retry' => [ 'max_attempts' => (int) env('NETDATA_RETRY_MAX', 3), 'base_delay_ms' => (int) env('NETDATA_RETRY_DELAY', 1000), ], ], 'local' => [ 'token' => '', 'base_url' => 'http://localhost:19999', ], ],
Quick Start
use DavitVardanyan\NetdataLaravel\Facades\Netdata; $nodes = Netdata::nodes()->list(); $cpuData = Netdata::data()->cpu(); $alerts = Netdata::alerts()->list();
Usage
All 13 Resource Accessors
use DavitVardanyan\NetdataLaravel\Facades\Netdata; Netdata::data()->cpu(); // CPU metrics (last 10 min) Netdata::data()->memory(); // Memory metrics Netdata::data()->disk(); // Disk metrics Netdata::data()->network(); // Network metrics Netdata::data()->query($request); // Custom data query via DataQueryRequest Netdata::weights()->query($request); // Metric weight/correlation analysis Netdata::contexts()->list(); // Browse metric contexts Netdata::nodes()->list(); // List monitored nodes Netdata::alerts()->list(); // Active alert summaries Netdata::functions()->list(); // Agent functions Netdata::info()->get(); // Agent info (version, hostname, OS) Netdata::search()->query('cpu'); // Search across metrics Netdata::badges()->svg('system.cpu');// Generate badge SVGs Netdata::allMetrics()->get(); // Export all metrics (Prometheus format) Netdata::config()->tree(); // Agent configuration tree Netdata::streamPath()->get(); // Streaming path info Netdata::claim()->info(); // Agent claim status
Dependency Injection
use DavitVardanyan\NetdataLaravel\NetdataManager; public function __construct(private NetdataManager $netdata) {} $this->netdata->nodes()->list(); $this->netdata->connection('local')->nodes()->list();
Multiple Connections
Netdata::connection('local')->nodes()->list(); Netdata::connection('production')->alerts()->list();
Caching
Caching is enabled by default. Configure per-resource TTLs in config/netdata.php:
'cache' => [ 'enabled' => true, 'store' => null, // uses default cache store 'prefix' => 'netdata', 'ttl' => [ 'nodes' => 300, // 5 minutes 'contexts' => 1800, // 30 minutes 'info' => 3600, // 1 hour 'functions' => 1800, // 30 minutes 'data' => 60, // 1 minute 'alerts' => 30, // 30 seconds ], ],
Resources like weights, search, badges, allMetrics, config, streamPath, and claim bypass the cache automatically.
Flush cache programmatically:
Netdata::flushCache(); // Flush all Netdata::flushCache('nodes'); // Flush nodes only
Artisan Commands
php artisan netdata:test # Test connectivity php artisan netdata:nodes # List monitored nodes php artisan netdata:alerts # List active alerts php artisan netdata:alerts --status=critical # Filter by status php artisan netdata:health # System health overview (CPU, RAM, disk, network) php artisan netdata:metrics system.cpu # Query metric data php artisan netdata:metrics system.cpu --after=-3600 --points=60 php artisan netdata:contexts # List metric contexts php artisan netdata:contexts --filter=system # Filter contexts php artisan netdata:info # Agent information php artisan netdata:functions # List agent functions php artisan netdata:functions --execute=processes # Execute a function
All commands support --connection=NAME and --json flags.
Monitoring
Alert Polling
Polls for new alerts and dispatches AlertTriggered events. Alerts are deduplicated by name and chart.
// config/netdata.php 'monitoring' => [ 'alerts' => [ 'enabled' => true, 'poll_interval' => 60, 'dispatch_events' => true, 'notify' => [ 'enabled' => true, 'channels' => ['mail', 'slack'], 'recipients' => ['admin@example.com'], ], ], ],
Node Status Monitoring
Detects nodes going online/offline and dispatches NodeWentOffline / NodeCameOnline events.
'monitoring' => [ 'nodes' => [ 'enabled' => true, 'poll_interval' => 120, 'dispatch_events' => true, ], ],
Threshold Rules
Monitor specific metrics against thresholds. Supports >, >=, <, <=, ==, != operators with optional duration-based breach tracking.
'monitoring' => [ 'thresholds' => [ 'enabled' => true, 'rules' => [ [ 'context' => 'system.cpu', 'dimension' => 'user', 'operator' => '>', 'value' => 90, 'duration' => 300, // seconds the threshold must be breached 'severity' => 'critical', ], ], ], ],
Events
Listen to monitoring events in your EventServiceProvider or anywhere Laravel events are registered:
use DavitVardanyan\NetdataLaravel\Events\AlertTriggered; use DavitVardanyan\NetdataLaravel\Events\NodeWentOffline; use DavitVardanyan\NetdataLaravel\Events\NodeCameOnline; use DavitVardanyan\NetdataLaravel\Events\MetricThresholdExceeded; Event::listen(AlertTriggered::class, function (AlertTriggered $event) { Log::warning("Alert: {$event->alert->name} [{$event->alert->status->value}]"); }); Event::listen(NodeWentOffline::class, function (NodeWentOffline $event) { Log::error("Node offline: {$event->node->name}"); }); Event::listen(MetricThresholdExceeded::class, function (MetricThresholdExceeded $event) { Log::critical("{$event->context}.{$event->dimension} {$event->operator} {$event->threshold} (value: {$event->value})"); });
Health Check
use DavitVardanyan\NetdataLaravel\Health\NetdataHealthCheck; $check = app(NetdataHealthCheck::class); $result = $check->run(); // $result->status: Status::Ok, Status::Warning, or Status::Failed // $result->message: Human-readable description // Check a specific connection $result = $check->connection('local')->run();
Middleware
Log request performance with the built-in middleware:
// In a route group or kernel use DavitVardanyan\NetdataLaravel\Middleware\NetdataPerformanceMiddleware; Route::middleware(NetdataPerformanceMiddleware::class)->group(function () { // ... });
Testing
Use the FakesNetdata trait in your Pest or PHPUnit tests:
use DavitVardanyan\NetdataLaravel\Testing\FakesNetdata; uses(FakesNetdata::class); test('dashboard shows node list', function () { $fake = $this->fakeNetdata(); $fake->fakeNodes([ ['nd' => 'abc', 'nm' => 'web-1', 'v' => 'v2.0.0'], ]); $this->get('/dashboard')->assertOk(); $fake->assertCalled('/api/v3/nodes'); });
Running the Package Tests
vendor/bin/pest # Run tests (63 tests, 136 assertions) vendor/bin/phpstan analyse # Static analysis (level 8) vendor/bin/pint --test # Code style check (Laravel preset)
License
MIT License. See LICENSE for details.