NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Metrics for Laravel

Rýchly štart

Metriku vytvoríte inline cez fasádu Metrics — bez vlastnej triedy. Zvoľte typ, agregáciu nad Eloquent dotazom a obdobie:

use App\Models\User;
use RoundlyConsulting\Metrics\Enums\Period;
use RoundlyConsulting\Metrics\Facades\Metrics;

$data = Metrics::value()
    ->count(User::query())
    ->name('New users')
    ->range(Period::Today)
    ->withChangeAgainstPreviousPeriod()
    ->toArray();

Fasáda ponúka jeden builder pre každý typ metriky — Metrics::value(), Metrics::trend(), Metrics::progress() a Metrics::partition():

Metrics::value()->count(User::query())->range(Period::Today)->toArray();
Metrics::trend()->count(User::query(), 'created_at')->daily()->range(Period::MonthToDate)->toArray();
Metrics::progress()->sum(Order::query(), 'total')->target(10000)->range(Period::MonthToDate)->toArray();
Metrics::partition()->count(User::query(), 'plan')->toArray();

Čítanie výsledku

Každá metrika ponúka dva pohľady na ten istý výpočet: result() — typovaný objekt výsledku (ValueResult, TrendResult, ProgressResult alebo PartitionResult) pre PHP kód, ktorý s číslami pracuje — a toArray(), obálku pripravenú pre JSON a frontend. Oba idú cez cache výsledkov:

$revenue = Metrics::value()->sum(Order::query(), 'total')->range(Period::ThisMonth)->result();

$revenue->value();       // 15230.0
$revenue->change();      // percentage change, when a comparison was requested

Metrics::trend()->count(User::query(), 'id')->daily()->result()->values();   // list<float>
Metrics::get('revenue')->result()->value();   // the typed result of a registered metric

Obálka (envelope)

toArray() metriku vyhodnotí a vráti jednotnú obálku — prezentačné polia, zvolené a dostupné obdobia a výsledok podľa typu:

[
    'name' => 'New users',            // name(), or the humanized class name
    'description' => '',              // description()
    'prefix' => '',                   // prefix()
    'suffix' => '',                   // suffix()
    'range' => [
        'current' => 'TODAY',         // the selected Period value
        'available' => ['7' => '7 Days', '14' => '14 Days', /* … */ 'ALL' => 'All'],
        'custom' => ['start' => null, 'end' => null],
    ],
    'result' => [                     // the type-specific result
        'value' => 42.0,
        'previous' => 30.0,
        'change' => ['percentage' => 40.0, 'is_increase' => true],
    ],
]

Inline metrikám nastavte name(): bez neho je názvom v obálke poľudštený názov triedy, čo je pri inline builderi samotný builder („Pending Value“).

Vrátenie z controllera

Každá metrika implementuje Responsable, takže ju controller môže vrátiť priamo a Laravel pošle obálku ako JSON. Autorizácia zostáva na vašej aplikácii:

use App\Models\User;
use RoundlyConsulting\Metrics\Enums\Period;
use RoundlyConsulting\Metrics\Facades\Metrics;

final class NewUsersController
{
    public function __invoke()
    {
        return Metrics::value()
            ->count(User::query())
            ->name('New users')
            ->range(Period::Today)
            ->withChangeAgainstPreviousPeriod();
    }
}

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.