Package

Sakanjo Laravel Easy Metrics

Generate metrics with ease and precision.

Package

sakanjo/laravel-easy-metrics

View on GitHub →

Laravel v10.x PHP 8.0

🔥 Easy metrics

Easily create metrics for your application.

✨ Help support the maintenance of this package by sponsoring me.

Designed to work with Laravel, Filament, and more.

🚀 Supported metrics

  • Bar metric
  • Doughnut metric
  • Line metric
  • Pie metric
  • Polar metric
  • Trend metric
  • Value metric

Table of contents

📦 Install

composer require sakanjo/laravel-easy-metrics

🦄 Usage

Value metric

use SaKanjo\EasyMetrics\Metrics\Value;
use App\Models\User;
 
$data = Value::make(User::class)
->count();
Query types

The currently supported aggregate functions to calculate a given column compared to the previous time interval / range

Min
Value::make(User::class)
->min('age');
Max
Value::make(User::class)
->max('age');
Sum
Value::make(User::class)
->sum('age');
Average
Value::make(User::class)
->average('age');
Count
Value::make(User::class)
->count();

Doughnut metric

use SaKanjo\EasyMetrics\Metrics\Doughnut;
use App\Models\User;
use App\Enums\Gender;
 
[$labels, $data] = Doughnut::make(User::class)
->options(Gender::class)
->count('gender');

It's always better to use the options method even though it's optional, since the retrieved data may not include all enum options.

Query types

The currently supported aggregate functions to calculate a given column compared to the previous time interval / range

Min
Doughnut::make(User::class)
->min('age', 'gender');
Max
Doughnut::make(User::class)
->max('age', 'gender');
Sum
Doughnut::make(User::class)
->sum('age', 'gender');
Average
Doughnut::make(User::class)
->average('age', 'gender');
Count
Doughnut::make(User::class)
->count('gender');

Trend metric

use SaKanjo\EasyMetrics\Metrics\Trend;
use App\Models\User;
 
[$labels, $data] = Trend::make(User::class)
->countByMonths();
Query types

The currently supported aggregate functions to calculate a given column compared to the previous time interval / range

Min
$trend->minByYears('age');
$trend->minByMonths('age');
$trend->minByWeeks('age');
$trend->minByDays('age');
$trend->minByHours('age');
$trend->minByMinutes('age');
Max
$trend->maxByYears('age');
$trend->maxByMonths('age');
$trend->maxByWeeks('age');
$trend->maxByDays('age');
$trend->maxByHours('age');
$trend->maxByMinutes('age');
Sum
$trend->sumByYears('age');
$trend->sumByMonths('age');
$trend->sumByWeeks('age');
$trend->sumByDays('age');
$trend->sumByHours('age');
$trend->sumByMinutes('age');
Average
$trend->averageByYears('age');
$trend->averageByMonths('age');
$trend->averageByWeeks('age');
$trend->averageByDays('age');
$trend->averageByHours('age');
$trend->averageByMinutes('age');
Count
$trend->countByYears();
$trend->countByMonths();
$trend->countByWeeks();
$trend->countByDays();
$trend->countByHours();
$trend->countByMinutes();

Other metrics

  • Bar extends Trend
  • Line extends Trend
  • Doughnut extends Pie
  • Polar extends Pie

Ranges

Every metric class contains a ranges method, that will determine the range of the results based on it's date column.

use SaKanjo\EasyMetrics\Metrics\Trend;
use SaKanjo\EasyMetrics\Metrics\Enums\Range;
use App\Models\User;
 
Value::make(User::class)
->range(30)
->ranges([
15, 30, 365,
Range::TODAY, // Or 'TODAY'
]);

Available custom ranges

  • Range::TODAY
  • Range::YESTERDAY
  • Range::MTD
  • Range::QTD
  • Range::YTD
  • Range::ALL

🔥 Practical examples

Filamentphp v3 widgets
<?php
 
namespace App\Filament\Widgets\Admin;
 
use App\Models\User;
use Filament\Widgets\ChartWidget;
use SaKanjo\EasyMetrics\Metrics\Trend;
 
class UsersCountChart extends ChartWidget
{
protected static ?string $heading = 'Users count trend';
 
protected function getData(): array
{
[$labels, $data] = Trend::make(User::class)
->range($this->filter)
->rangesFromOptions($this->getFilters())
->countByMonths();
 
return [
'datasets' => [
[
'label' => 'Users',
'data' => $data,
],
],
'labels' => $labels,
];
}
 
protected function getType(): string
{
return 'line';
}
 
protected function getFilters(): ?array
{
return [
15 => '15 Days',
30 => '30 Days',
60 => '60 Days',
365 => '365 Days',
];
}
}

💖 Support the development

Do you like this project? Support it by donating

Click the "💖 Sponsor" at the top of this repo.

©️ Credits

📄 License

MIT License © 2023-PRESENT Salah Kanjo

Sakanjo Laravel Easy Metrics Related Articles

Laravel Easy Metrics image

Laravel Easy Metrics

Read article
Laravel Horizon Prometheus Exporter image

Laravel Horizon Prometheus Exporter

Read article
Laravel Performance Testing With Volt-Test PHP image

Laravel Performance Testing With Volt-Test PHP

Read article
Laravel performance monitoring in Honeybadger image

Laravel performance monitoring in Honeybadger

Read article
Introducing Laravel Nova image

Introducing Laravel Nova

Read article
Introducing Laravel Horizon image

Introducing Laravel Horizon

Read article
PhpStorm logo

PhpStorm

The go-to PHP IDE with extensive out-of-the-box support for Laravel and its ecosystem.

PhpStorm
Pushsilver logo

Pushsilver

Pushsilver is simple invoicing for freelancers and small studios — send polished invoices, automate reminders, and get paid on time without the bloat.

Pushsilver
Acquaint Softtech logo

Acquaint Softtech

Acquaint Softtech offers AI-ready Laravel developers who onboard in 48 hours at $3000/Month with no lengthy sales process and a 100 percent money-back guarantee.

Acquaint Softtech
No Compromises logo

No Compromises

Joel and Aaron, the two seasoned devs from the No Compromises podcast, are now available to hire for your Laravel project. ⬧ Flat rate of $9500/mo. ⬧ No lengthy sales process. ⬧ No contracts. ⬧ 100% money back guarantee.

No Compromises
Harpoon: Next generation time tracking and invoicing logo

Harpoon: Next generation time tracking and invoicing

The next generation time-tracking and billing software that helps your agency plan and forecast a profitable future.

Harpoon: Next generation time tracking and invoicing
SaaSykit: Laravel SaaS Starter Kit logo

SaaSykit: Laravel SaaS Starter Kit

SaaSykit is a Multi-tenant Laravel SaaS Starter Kit that comes with all features required to run a modern SaaS. Payments, Beautiful Checkout, Admin Panel, User dashboard, Auth, Ready Components, Stats, Blog, Docs and more.

SaaSykit: Laravel SaaS Starter Kit