← Back to Plugins
  • Memory Tracker Widget

Memory Tracker Widget

Plugin information

by Danilo Polani • 18 stars

Admin panel Developer tool Widget

Track the memory usage of your workers and display them in your Filament admin dashboard.

Support

#memory-tracker on Discord

Views

359

License

MIT

Documentation

Installation

Install the package via composer:

composer require danilopolani/filament-memory-tracker

Then publish the assets and the config of the package:

php artisan vendor:publish --tag=filament-memory-tracker-assets
php artisan vendor:publish --tag=filament-memory-tracker-config

Upgrade

When upgrading be sure to republish the assets:

php artisan vendor:publish --tag=filament-memory-tracker-assets --force

Configuration

There are a few notable configuration options for the package.

Key Type Description
cache_store String Define the cache store used to track memory usage. By default it will be your CACHE_DRIVER env value.
trackers Array A list of trackers names to be displayed in the dashboard. They must be the same used in your MemoryTracker() instance. See Usage below to discover more.
date_format String The DateTime format to display dates.

Usage

In your Worker create a new MemoryTracker instance and then ping the track() method every time you want. There's an example with ReactPHP Event Loop.

ℹ️ The $realUsage flag is the same as memory_get_usage().
<?php
 
namespace App\Console\Commands;
 
use DaniloPolani\FilamentMemoryTracker\MemoryTracker;
use Illuminate\Console\Command;
use React\EventLoop\Loop;
 
class MyWorker extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'worker:run';
 
/**
* The memory tracker instance.
*
* @var MemoryTracker
*/
protected MemoryTracker $memoryTracker;
 
/**
* Class constructor.
*/
public function __construct()
{
parent::__construct();
 
$this->memoryTracker = new MemoryTracker('Worker');
}
 
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
// Ping every 5minutes
Loop::addPeriodicTimer(60 * 5, function () {
$this->memoryTracker->track(bool $realUsage = false);
});
 
return 0;
}
}

Then don't forget to add your tracker name inside the configuration too:

<?php
 
return [
// ...
 
'trackers' => [
'Worker',
],
 
];

Track restarts

You can track the latest Worker restart date and memory usage as well! If you're working on a custom Worker, you should intercept the exit signals and then call the $memoryTracker->trackRestart() method. Otherwise you can use the Trait provided by the package to achieve that:

  1. Include DaniloPolani\FilamentMemoryTracker\Concerns\TracksRestart inside your class;
  2. Call $this->trackRestartMemory(MemoryTracker $memoryTrackerInstance) inside your constructor.
⚠️ The TracksRestart requires the extension pcntl to be enabled.
<?php
 
namespace App\Console\Commands;
 
use DaniloPolani\FilamentMemoryTracker\MemoryTracker;
use DaniloPolani\FilamentMemoryTracker\Concerns\TracksRestart;
use Illuminate\Console\Command;
use React\EventLoop\Loop;
 
class MyWorker extends Command
{
use TracksRestart;
 
// ...
 
public function __construct()
{
parent::__construct();
 
$this->memoryTracker = new MemoryTracker('Worker');
$this->trackRestartMemory($this->memoryTracker);
}
 
// ...
}

Laravel Queue

You can track Laravel Queue too by listening to some specific events in a provider, for example your AppServiceProvider.

<?php
 
namespace App\Providers;
 
use DaniloPolani\FilamentMemoryTracker\MemoryTracker;
use Filament\Filament;
use Illuminate\Queue\Events\Looping;
use Illuminate\Queue\Events\WorkerStopping;
use Illuminate\Support\Facades\Event;
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
$memoryTracker = new MemoryTracker('Queue');
 
// Track memory usage
Event::listen(Looping::class, function () use ($memoryTracker) {
$memoryTracker->track();
});
 
// Track restarts
Event::listen(WorkerStopping::class, function () use ($memoryTracker) {
$memoryTracker->trackRestart();
});
}
}

Additional notes

Memory Tracker widget single block

APIs

These are the available methods of the MemoryTracker class:

Key Description
track(): void Track the current memory usage for the worker.
trackRestart(bool $resetPeak = true): void Track a restart. If $resetPeak is true, the memory peak will be purged as well.
getHistory(): array Get the worker's history of memory usage.
getPeak(): array|null Get the worker's memory peak. Returns null if no peak found.
getLatestRestart(): array|null Get the worker's latest restart data. Returns null if no restart found.
purge(): void Purge all the data of the current worker.
purgeHistory(): void Purge the track history only of the current worker.
purgePeak(): void Purge the memory peak of the current worker.
purgeRestart(): void Purge the latest restart data of the current worker.