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

Cachovanie je predvolene vypnuté. Po zapnutí sa vypočítaný výsledok metriky uchová v cache store na dobu TTL, takže vyťažené dashboardy neprepočítavajú rovnaké agregácie pri každom requeste.

Globálne zapnutie

// config/metrics.php
'cache' => [
    'enabled' => env('METRICS_CACHE_ENABLED', false),  // master switch
    'store' => env('METRICS_CACHE_STORE'),             // null = default store
    'ttl' => env('METRICS_CACHE_TTL', 300),            // seconds
    'prefix' => 'metrics',                             // cache-key prefix
],

Nastavte METRICS_CACHE_ENABLED=true a cachovať sa bude každá metrika.

Nastavenie pre jednu metriku

Každá metrika sa môže za behu prihlásiť alebo odhlásiť bez ohľadu na konfiguráciu:

MetódaÚčinok
cache(?int $ttl = null)Zapne cachovanie; voliteľne prepíše TTL v sekundách.
cacheFor(DateTimeInterface|int $ttl)Zapne cachovanie do určitého okamihu alebo na N sekúnd.
cacheKey(string $key)Použije explicitný cache kľúč namiesto generovaného.
dontCache()Vypne cachovanie tejto metriky, aj keď ho konfigurácia zapína.
use RoundlyConsulting\Metrics\Facades\Metrics;

Metrics::value()->count(User::query())->range('TODAY')->cacheFor(now()->addHour())->toArray();

Metrics::value()->count(User::query())->cache()->toArray();                         // config TTL
Metrics::value()->count(User::query())->cache(600)->toArray();                      // 10 minutes
Metrics::value()->count(User::query())->cacheFor(now()->endOfDay())->toArray();     // until midnight
Metrics::value()->count(User::query())->cache()->cacheKey('users:all')->toArray();  // explicit key
Metrics::value()->count(User::query())->dontCache()->toArray();                     // always fresh

Cache kľúče

Bez explicitného cacheKey() má kľúč tvar {prefix}:{md5} nad triedou metriky, jej kľúčom v registri, obdobím s vlastným začiatkom a koncom, pásmom reportingu aj pásmom aplikácie, presnosťou a spôsobom zaokrúhľovania, dotazom a agregáciou inline buildera a rozlišovačmi podľa typu — pri trende jednotka, dopĺňanie medzier a stĺpec sérií; pri hodnote nastavenia porovnania, pri progrese navyše cieľ; pri členení limit a preložený popis „Other“. Rôzne nastavené volania tej istej metriky — aj inline buildery oproti zaregistrovaným metrikám tej istej triedy — sa tak cachujú oddelene a nikdy nekolidujú.

Vlastný cacheKey() sa použije doslovne — prefix sa nepridá a zmena obdobia ho nezmení, preto si jeho jedinečnosť strážte sami. Cachuje sa len časť result, a to ako obyčajné dáta — result() z nich obnoví typovaný objekt a obálka okolo nej sa zostaví pri každom volaní. Prezentácia sa aplikuje pri každom čítaní a nikdy sa necachuje — formatUsing() aj popisy z labelUsing() pri členení.

Zabudnutie cachovaných výsledkov

Metrics::forget('revenue');       // every cached range/timezone/option of one registered metric
Metrics::forget($metric);         // an unregistered metric instance (by its class)
Metrics::flushCache();            // every cached metric result

Invalidácia funguje na každom cache store, s tagmi aj bez nich: každý záznam si pamätá generáciu cache, v ktorej vznikol, a zabudnutie začne novú generáciu — staršie záznamy sa pri ďalšom čítaní prepočítajú a prepíšu na mieste. Platí to aj pre záznamy s vlastným cacheKey(). forget() pri nezaregistrovanom kľúči vyhodí UnknownMetricException.

TTL z .env

METRICS_CACHE_ENABLED prijíma true, false, 1, 0, on, off, yes a no; METRICS_CACHE_TTL je celý počet sekúnd od 1 do 31536000 (jeden rok) — reťazec, ktorý vytvorí .env, sa rešpektuje. Nepoužiteľné TTL alebo hodnota prepínača (napríklad METRICS_CACHE_ENABLED=disabled) vyhodí InvalidConfigurationException namiesto tichého návratu k predvolenej hodnote; prázdna hodnota (METRICS_CACHE_TTL=) sa považuje za nenastavenú a predvolenú hodnotu dostane.

Príznak fromCache v udalosti MetricCalculated prezradí, či išlo o zásah do cache — pozri Udalosti.

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.