Laravel Pulse¶
はじめに¶
Laravel Pulse は、アプリケーションのパフォーマンスと使用状況に関する一目でわかる洞察を提供します。Pulseを使用すると、遅いジョブやエンドポイントなどのボトルネックを追跡し、最もアクティブなユーザーを見つけることができます。
個々のイベントの詳細なデバッグについては、Laravel Telescopeをチェックしてください。
インストール¶
Warning
Pulseのファーストパーティストレージ実装は現在、MySQL、MariaDB、またはPostgreSQLデータベースが必要です。異なるデータベースエンジンを使用している場合、Pulseデータ用に別のMySQL、MariaDB、またはPostgreSQLデータベースが必要になります。
Composerパッケージマネージャを使用してPulseをインストールできます:
次に、vendor:publish
Artisanコマンドを使用してPulseの設定ファイルとマイグレーションファイルを公開する必要があります:
最後に、Pulseのデータを保存するために必要なテーブルを作成するためにmigrate
コマンドを実行する必要があります:
Pulseのデータベースマイグレーションが実行されたら、/pulse
ルートを介してPulseダッシュボードにアクセスできます。
Note
アプリケーションのプライマリデータベースにPulseデータを保存したくない場合、専用のデータベース接続を指定できます。
設定¶
Pulseの多くの設定オプションは、環境変数を使用して制御できます。利用可能なオプションを確認したり、新しいレコーダーを登録したり、高度なオプションを設定したりするには、config/pulse.php
設定ファイルを公開できます:
ダッシュボード¶
認可¶
Pulseダッシュボードは/pulse
ルートを介してアクセスできます。デフォルトでは、local
環境でのみこのダッシュボードにアクセスできるため、本番環境では'viewPulse'
認可ゲートをカスタマイズして認可を設定する必要があります。これは、アプリケーションのapp/Providers/AppServiceProvider.php
ファイル内で行うことができます:
use App\Models\User;
use Illuminate\Support\Facades\Gate;
/**
* 任意のアプリケーションサービスをブートストラップします。
*/
public function boot(): void
{
Gate::define('viewPulse', function (User $user) {
return $user->isAdmin();
});
// ...
}
カスタマイズ¶
Pulseダッシュボードのカードとレイアウトは、ダッシュボードビューを公開することで設定できます。ダッシュボードビューはresources/views/vendor/pulse/dashboard.blade.php
に公開されます:
ダッシュボードはLivewireによって動作し、JavaScriptアセットを再構築することなくカードとレイアウトをカスタマイズできます。
このファイル内で、<x-pulse>
コンポーネントはダッシュボードをレンダリングし、カードのグリッドレイアウトを提供します。ダッシュボードを画面全体に広げたい場合は、コンポーネントにfull-width
プロパティを指定できます:
デフォルトでは、<x-pulse>
コンポーネントは12列のグリッドを作成しますが、cols
プロパティを使用してこれをカスタマイズできます:
各カードは、スペースと位置を制御するためにcols
とrows
プロパティを受け入れます:
ほとんどのカードは、スクロールではなく全カードを表示するためのexpand
プロパティも受け入れます:
ユーザーの解決¶
アプリケーション使用状況カードなど、ユーザーに関する情報を表示するカードの場合、PulseはユーザーのIDのみを記録します。ダッシュボードをレンダリングする際、PulseはデフォルトのAuthenticatable
モデルからname
とemail
フィールドを解決し、Gravatarウェブサービスを使用してアバターを表示します。
アプリケーションのApp\Providers\AppServiceProvider
クラス内でPulse::user
メソッドを呼び出すことで、フィールドとアバターをカスタマイズできます。
user
メソッドは、表示されるAuthenticatable
モデルを受け取り、ユーザーのname
、extra
、avatar
情報を含む配列を返すクロージャを受け入れます:
use Laravel\Pulse\Facades\Pulse;
/**
* 任意のアプリケーションサービスをブートストラップします。
*/
public function boot(): void
{
Pulse::user(fn ($user) => [
'name' => $user->name,
'extra' => $user->email,
'avatar' => $user->avatar_url,
]);
// ...
}
Note
認証されたユーザーのキャプチャと取得方法を完全にカスタマイズするには、Laravel\Pulse\Contracts\ResolvesUsers
契約を実装し、Laravelのサービスコンテナにバインドします。
カード¶
サーバー¶
<livewire:pulse.servers />
カードは、pulse:check
コマンドを実行しているすべてのサーバーのシステムリソース使用状況を表示します。システムリソースのレポートに関する詳細については、サーバーレコーダーのドキュメントを参照してください。
インフラストラクチャ内のサーバーを交換する場合、一定期間後に非アクティブなサーバーをPulseダッシュボードに表示しないようにすることができます。これは、ignore-after
プロパティを使用して行うことができます。このプロパティは、非アクティブなサーバーをPulseダッシュボードから削除するまでの秒数を受け入れます。または、1 hour
や3 days and 1 hour
などの相対時間形式の文字列を指定することもできます:
アプリケーション使用状況¶
<livewire:pulse.usage />
カードは、アプリケーションにリクエストを送信し、ジョブをディスパッチし、遅いリクエストを経験した上位10人のユーザーを表示します。
すべての使用状況メトリクスを同時に画面に表示したい場合は、カードを複数回含めてtype
属性を指定できます:
<livewire:pulse.usage type="requests" />
<livewire:pulse.usage type="slow_requests" />
<livewire:pulse.usage type="jobs" />
Pulseがユーザー情報を取得して表示する方法をカスタマイズする方法については、ユーザーの解決のドキュメントを参照してください。
Note
アプリケーションが大量のリクエストを受け取るか、大量のジョブをディスパッチする場合、サンプリングを有効にすることをお勧めします。詳細については、ユーザーリクエストレコーダー、ユーザージョブレコーダー、および遅いジョブレコーダーのドキュメントを参照してください。
例外¶
<livewire:pulse.exceptions />
カードは、アプリケーションで発生した例外の頻度と最近性を表示します。デフォルトでは、例外は例外クラスと発生した場所に基づいてグループ化されます。詳細については、例外レコーダーのドキュメントを参照してください。
キュー¶
<livewire:pulse.queues />
カードは、アプリケーション内のキューのスループットを表示します。これには、キューに入れられたジョブ、処理中のジョブ、処理されたジョブ、リリースされたジョブ、失敗したジョブの数が含まれます。詳細については、キューレコーダーのドキュメントを参照してください。
遅いリクエスト¶
<livewire:pulse.slow-requests />
カードは、設定されたしきい値(デフォルトでは1,000ms)を超えるアプリケーションへの受信リクエストを表示します。詳細については、遅いリクエストレコーダーのドキュメントを参照してください。
遅いジョブ¶
<livewire:pulse.slow-jobs />
カードは、設定されたしきい値(デフォルトでは1,000ms)を超えるアプリケーション内のキューに入れられたジョブを表示します。詳細については、遅いジョブレコーダーのドキュメントを参照してください。
遅いクエリ¶
<livewire:pulse.slow-queries />
カードは、設定されたしきい値(デフォルトでは1,000ms)を超えるアプリケーション内のデータベースクエリを表示します。
デフォルトでは、遅いクエリはSQLクエリ(バインディングなし)と発生した場所に基づいてグループ化されますが、SQLクエリのみに基づいてグループ化する場合は、場所のキャプチャを選択しないこともできます。
非常に大きなSQLクエリが構文ハイライトを受け取ることによるレンダリングパフォーマンスの問題が発生した場合、without-highlighting
プロパティを追加することでハイライトを無効にできます:
詳細については、遅いクエリレコーダーのドキュメントを参照してください。
遅い送信リクエスト¶
<livewire:pulse.slow-outgoing-requests />
カードは、LaravelのHTTPクライアントを使用して行われた送信リクエストのうち、設定されたしきい値(デフォルトでは1,000ms)を超えるものを表示します。
デフォルトでは、エントリは完全なURLでグループ化されます。ただし、正規表現を使用して類似の送信リクエストを正規化またはグループ化したい場合があります。詳細については、遅い送信リクエストレコーダーのドキュメントを参照してください。
キャッシュ¶
<livewire:pulse.cache />
カードは、アプリケーションのキャッシュヒットとミスの統計を、グローバルにおよび個々のキーごとに表示します。
デフォルトでは、エントリはキーでグループ化されます。ただし、正規表現を使用して類似のキーを正規化またはグループ化したい場合があります。詳細については、キャッシュインタラクションレコーダーのドキュメントを参照してください。
エントリのキャプチャ¶
ほとんどのPulseレコーダーは、Laravelによってディスパッチされるフレームワークイベントに基づいて自動的にエントリをキャプチャします。ただし、サーバーレコーダーや一部のサードパーティカードは、情報を定期的にポーリングする必要があります。これらのカードを使用するには、すべての個々のアプリケーションサーバーで pulse:check
デーモンを実行する必要があります:
Note
pulse:check
プロセスをバックグラウンドで永続的に実行させるには、Supervisorなどのプロセスモニターを使用して、コマンドが停止しないようにする必要があります。
pulse:check
コマンドは長時間実行されるプロセスであるため、再起動しない限りコードベースの変更を認識しません。アプリケーションのデプロイプロセス中に pulse:restart
コマンドを呼び出して、コマンドを適切に再起動する必要があります:
Note
Pulseはキャッシュを使用して再起動シグナルを保存するため、この機能を使用する前に、アプリケーションに適切にキャッシュドライバーが設定されていることを確認する必要があります。
レコーダー¶
レコーダーは、アプリケーションからエントリをキャプチャし、Pulseデータベースに記録する役割を担います。レコーダーは、Pulse設定ファイルの recorders
セクションで登録および設定されます。
キャッシュインタラクション¶
CacheInteractions
レコーダーは、アプリケーションで発生するキャッシュのヒットとミスに関する情報をキャプチャし、キャッシュカードに表示します。
オプションで、サンプリングレートと無視するキーパターンを調整できます。
また、キーのグループ化を設定して、類似のキーを単一のエントリとしてグループ化することもできます。たとえば、同じタイプの情報をキャッシュするキーから一意のIDを削除したい場合があります。グループは、正規表現を使用してキーの一部を「検索して置換」することで設定されます。設定ファイルに例が含まれています:
最初に一致したパターンが使用されます。パターンが一致しない場合、キーはそのままキャプチャされます。
例外¶
Exceptions
レコーダーは、アプリケーションで発生する報告可能な例外に関する情報をキャプチャし、例外カードに表示します。
オプションで、サンプリングレートと無視する例外パターンを調整できます。また、例外が発生した場所をキャプチャするかどうかを設定することもできます。キャプチャされた場所はPulseダッシュボードに表示され、例外の発生元を追跡するのに役立ちます。ただし、同じ例外が複数の場所で発生した場合、それぞれの一意の場所ごとに複数回表示されます。
キュー¶
Queues
レコーダーは、アプリケーションのキューに関する情報をキャプチャし、キューカードに表示します。
オプションで、サンプリングレートと無視するジョブパターンを調整できます。
遅いジョブ¶
SlowJobs
レコーダーは、アプリケーションで発生する遅いジョブに関する情報をキャプチャし、遅いジョブカードに表示します。
オプションで、遅いジョブのしきい値、サンプリングレート、および無視するジョブパターンを調整できます。
他のジョブよりも時間がかかることが予想されるジョブがある場合、ジョブごとのしきい値を設定できます:
Recorders\SlowJobs::class => [
// ...
'threshold' => [
'#^App\\Jobs\\GenerateYearlyReports$#' => 5000,
'default' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
],
],
正規表現パターンがジョブのクラス名に一致しない場合、'default'
値が使用されます。
遅い送信リクエスト¶
SlowOutgoingRequests
レコーダーは、LaravelのHTTPクライアントを使用して行われた送信HTTPリクエストのうち、設定されたしきい値を超えるものに関する情報をキャプチャし、遅い送信リクエストカードに表示します。
オプションで、遅い送信リクエストのしきい値、サンプリングレート、および無視するURLパターンを調整できます。
他の送信リクエストよりも時間がかかることが予想されるリクエストがある場合、リクエストごとのしきい値を設定できます:
Recorders\SlowOutgoingRequests::class => [
// ...
'threshold' => [
'#backup.zip$#' => 5000,
'default' => env('PULSE_SLOW_OUTGOING_REQUESTS_THRESHOLD', 1000),
],
],
正規表現パターンがリクエストのURLに一致しない場合、'default'
値が使用されます。
また、URLのグループ化を設定して、類似のURLを単一のエントリとしてグループ化することもできます。たとえば、URLパスから一意のIDを削除したり、ドメインのみでグループ化したりすることができます。グループは、正規表現を使用してURLの一部を「検索して置換」することで設定されます。設定ファイルにいくつかの例が含まれています:
Recorders\SlowOutgoingRequests::class => [
// ...
'groups' => [
// '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*',
// '#^https?://([^/]*).*$#' => '\1',
// '#/\d+#' => '/*',
],
],
最初に一致したパターンが使用されます。パターンが一致しない場合、URLはそのままキャプチャされます。
遅いクエリ¶
SlowQueries
レコーダーは、アプリケーション内の設定されたしきい値を超えるデータベースクエリに関する情報をキャプチャし、遅いクエリカードに表示します。
オプションで、遅いクエリのしきい値、サンプリングレート、および無視するクエリパターンを調整できます。また、クエリの場所をキャプチャするかどうかを設定することもできます。キャプチャされた場所はPulseダッシュボードに表示され、クエリの発生元を追跡するのに役立ちます。ただし、同じクエリが複数の場所で実行された場合、それぞれの一意の場所ごとに複数回表示されます。
他のクエリよりも時間がかかることが予想されるクエリがある場合、クエリごとのしきい値を設定できます:
Recorders\SlowQueries::class => [
// ...
'threshold' => [
'#^insert into `yearly_reports`#' => 5000,
'default' => env('PULSE_SLOW_QUERIES_THRESHOLD', 1000),
],
],
正規表現パターンがクエリのSQLに一致しない場合、'default'
値が使用されます。
遅いリクエスト¶
Requests
レコーダーは、アプリケーションに対して行われたリクエストに関する情報をキャプチャし、遅いリクエストカードとアプリケーション使用状況カードに表示します。
オプションで、遅いルートのしきい値、サンプリングレート、および無視するパスを調整できます。
他のリクエストよりも時間がかかることが予想されるリクエストがある場合、リクエストごとのしきい値を設定できます:
Recorders\SlowRequests::class => [
// ...
'threshold' => [
'#^/admin/#' => 5000,
'default' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000),
],
],
正規表現パターンがリクエストのURLに一致しない場合、'default'
値が使用されます。
サーバー¶
Servers
レコーダーは、アプリケーションを動かすサーバーのCPU、メモリ、ストレージの使用状況をキャプチャし、サーバーカードに表示します。このレコーダーは、監視したい各サーバーでpulse:check
コマンドを実行する必要があります。
各レポートサーバーには一意の名前が必要です。デフォルトでは、PulseはPHPの gethostname
関数によって返される値を使用します。これをカスタマイズしたい場合は、PULSE_SERVER_NAME
環境変数を設定できます:
Pulse設定ファイルでは、監視するディレクトリをカスタマイズすることもできます。
ユーザージョブ¶
UserJobs
レコーダーは、アプリケーションでジョブをディスパッチするユーザーに関する情報をキャプチャし、アプリケーション使用状況カードに表示します。
オプションで、サンプリングレートと無視するジョブパターンを調整できます。
ユーザーリクエスト¶
UserRequests
レコーダーは、アプリケーションにリクエストを行うユーザーに関する情報をキャプチャし、アプリケーション使用状況カードに表示します。
オプションで、サンプリングレートと無視するジョブパターンを調整できます。
フィルタリング¶
見てきたように、多くのレコーダーは、設定を通じて、リクエストのURLなどの値に基づいて受信エントリを「無視」する機能を提供しています。しかし、現在認証されているユーザーなど、他の要因に基づいてレコードをフィルタリングすることが有用な場合があります。これらのレコードをフィルタリングするには、クロージャをPulseの filter
メソッドに渡すことができます。通常、filter
メソッドはアプリケーションの AppServiceProvider
の boot
メソッド内で呼び出されるべきです:
use Illuminate\Support\Facades\Auth;
use Laravel\Pulse\Entry;
use Laravel\Pulse\Facades\Pulse;
use Laravel\Pulse\Value;
// ...
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Pulse::filter(function (Entry|Value $entry) {
return Auth::user()->isNotAdmin();
});
// ...
}
パフォーマンス¶
Pulseは、既存のアプリケーションに組み込むために設計されており、追加のインフラストラクチャを必要としません。ただし、高トラフィックのアプリケーションの場合、Pulseがアプリケーションのパフォーマンスに与える影響を排除するためのいくつかの方法があります。
別のデータベースの使用¶
高トラフィックのアプリケーションでは、アプリケーションデータベースに影響を与えないように、Pulse用に専用のデータベース接続を使用することをお勧めします。
PULSE_DB_CONNECTION
環境変数を設定することで、Pulseが使用するデータベース接続をカスタマイズできます。
Redisによる取り込み¶
Warning
Redisによる取り込みには、Redis 6.2以上と、アプリケーションの設定済みRedisクライアントドライバとしてphpredis
またはpredis
が必要です。
デフォルトでは、PulseはHTTPレスポンスがクライアントに送信された後、またはジョブが処理された後に、設定されたデータベース接続に直接エントリを保存します。ただし、PulseのRedis取り込みドライバを使用して、エントリをRedisストリームに送信することができます。これは、PULSE_INGEST_DRIVER
環境変数を設定することで有効にできます:
PulseはデフォルトでRedis接続を使用しますが、PULSE_REDIS_CONNECTION
環境変数を介してこれをカスタマイズできます:
Redis取り込みを使用する場合、ストリームを監視し、RedisからPulseのデータベーステーブルにエントリを移動するために、pulse:work
コマンドを実行する必要があります。
Note
pulse:work
プロセスをバックグラウンドで永続的に実行させるには、Supervisorなどのプロセスモニタを使用して、Pulseワーカーが停止しないようにする必要があります。
pulse:work
コマンドは長時間実行されるプロセスであるため、再起動しない限りコードベースの変更を認識しません。アプリケーションのデプロイプロセス中にpulse:restart
コマンドを呼び出して、コマンドを正常に再起動する必要があります:
Note
Pulseは再起動シグナルを保存するためにキャッシュを使用するため、この機能を使用する前に、アプリケーションに対してキャッシュドライバが適切に設定されていることを確認する必要があります。
サンプリング¶
デフォルトでは、Pulseはアプリケーションで発生するすべての関連イベントをキャプチャします。高トラフィックのアプリケーションでは、特に長期間の場合、ダッシュボードで数百万のデータベース行を集計する必要があることになります。
代わりに、特定のPulseデータレコーダーで「サンプリング」を有効にすることを選択できます。たとえば、User Requests
レコーダーのサンプルレートを0.1
に設定すると、アプリケーションへのリクエストの約10%のみが記録されます。ダッシュボードでは、値はスケールアップされ、近似値であることを示すために~
が前に付けられます。
一般に、特定のメトリックに対してより多くのエントリがあるほど、精度を大幅に犠牲にすることなくサンプルレートを安全に低く設定できます。
トリミング¶
Pulseは、ダッシュボードのウィンドウ外にあるエントリが保存されると、自動的にそれらをトリミングします。トリミングは、Pulseの設定ファイルでカスタマイズ可能な抽選システムを使用してデータを取り込む際に発生します。
Pulse例外の処理¶
Pulseデータのキャプチャ中に例外が発生した場合、例えばストレージデータベースに接続できない場合、Pulseはアプリケーションに影響を与えないように静かに失敗します。
これらの例外の処理方法をカスタマイズしたい場合は、handleExceptionsUsing
メソッドにクロージャを提供できます:
use Laravel\Pulse\Facades\Pulse;
use Illuminate\Support\Facades\Log;
Pulse::handleExceptionsUsing(function ($e) {
Log::debug('An exception happened in Pulse', [
'message' => $e->getMessage(),
'stack' => $e->getTraceAsString(),
]);
});
カスタムカード¶
Pulseでは、アプリケーションの特定のニーズに関連するデータを表示するためのカスタムカードを構築できます。PulseはLivewireを使用しているため、最初のカスタムカードを構築する前にそのドキュメントを確認することをお勧めします。
カードコンポーネント¶
Laravel Pulseでカスタムカードを作成するには、基本のCard
Livewireコンポーネントを拡張し、対応するビューを定義することから始めます:
namespace App\Livewire\Pulse;
use Laravel\Pulse\Livewire\Card;
use Livewire\Attributes\Lazy;
#[Lazy]
class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers');
}
}
Livewireの遅延読み込み機能を使用する場合、Card
コンポーネントは自動的にプレースホルダを提供し、コンポーネントに渡されるcols
とrows
属性を尊重します。
Pulseカードの対応するビューを記述する際には、一貫した外観と操作性のためにPulseのBladeコンポーネントを活用できます:
<x-pulse::card :cols="$cols" :rows="$rows" :class="$class" wire:poll.5s="">
<x-pulse::card-header name="Top Sellers">
<x-slot:icon>
...
</x-slot:icon>
</x-pulse::card-header>
<x-pulse::scroll :expand="$expand">
...
</x-pulse::scroll>
</x-pulse::card>
$cols
、$rows
、$class
、および$expand
変数は、それぞれのBladeコンポーネントに渡される必要があります。これにより、ダッシュボードビューからカードのレイアウトをカスタマイズできます。また、カードを自動的に更新するために、ビューにwire:poll.5s=""
属性を含めることもできます。
Livewireコンポーネントとテンプレートを定義したら、カードをダッシュボードビューに含めることができます:
Note
カードがパッケージに含まれている場合、Livewire::component
メソッドを使用してコンポーネントをLivewireに登録する必要があります。
スタイリング¶
カードにPulseに含まれるクラスやコンポーネント以外の追加のスタイリングが必要な場合、カスタムCSSを含めるためのいくつかのオプションがあります。
Laravel Vite統合¶
カスタムカードがアプリケーションのコードベース内にあり、LaravelのVite統合を使用している場合、vite.config.js
ファイルを更新して、カード用の専用CSSエントリポイントを含めることができます:
その後、ダッシュボードビューで@vite
Bladeディレクティブを使用し、カードのCSSエントリポイントを指定できます:
CSSファイル¶
他のユースケース(Pulseカードがパッケージに含まれている場合を含む)では、Livewireコンポーネントにcss
メソッドを定義して、CSSファイルのファイルパスを返すことで、Pulseに追加のスタイルシートをロードするよう指示できます:
class TopSellers extends Card
{
// ...
protected function css()
{
return __DIR__.'/../../dist/top-sellers.css';
}
}
このカードがダッシュボードに含まれる場合、Pulseは自動的にこのファイルの内容を<style>
タグ内に含めるため、public
ディレクトリに公開する必要はありません。
Tailwind CSS¶
Tailwind CSSを使用する場合、不要なCSSの読み込みやPulseのTailwindクラスとの競合を避けるために、専用のTailwind設定ファイルを作成する必要があります:
export default {
darkMode: 'class',
important: '#top-sellers',
content: [
'./resources/views/livewire/pulse/top-sellers.blade.php',
],
corePlugins: {
preflight: false,
},
};
その後、CSSエントリポイントで設定ファイルを指定できます:
@config "../../tailwind.top-sellers.config.js";
@tailwind base;
@tailwind components;
@tailwind utilities;
また、Tailwindのimportant
セレクタ戦略に渡されるセレクタに一致するid
またはclass
属性をカードのビューに含める必要があります:
データのキャプチャと集計¶
カスタムカードはどこからでもデータを取得して表示できますが、Pulseの強力で効率的なデータ記録と集計システムを活用したい場合があります。
エントリのキャプチャ¶
Pulseでは、Pulse::record
メソッドを使用して「エントリ」を記録できます:
use Laravel\Pulse\Facades\Pulse;
Pulse::record('user_sale', $user->id, $sale->amount)
->sum()
->count();
record
メソッドに提供される最初の引数は、記録しているエントリのtype
であり、2番目の引数は集計データをグループ化する方法を決定するkey
です。ほとんどの集計メソッドでは、集計するvalue
も指定する必要があります。上記の例では、集計される値は$sale->amount
です。その後、Pulseが後で効率的に取得できるように、事前に集計された値を「バケット」にキャプチャするために、1つ以上の集計メソッド(sum
など)を呼び出すことができます。
利用可能な集計メソッドは以下の通りです:
avg
count
max
min
sum
Note
現在認証されているユーザーIDをキャプチャするカードパッケージを構築する場合、アプリケーションに対して行われたユーザーリゾルバのカスタマイズを尊重するPulse::resolveAuthenticatedUserId()
メソッドを使用する必要があります。
集計データの取得¶
PulseのCard
Livewireコンポーネントを拡張する際、ダッシュボードで表示されている期間の集計データを取得するためにaggregate
メソッドを使用できます:
class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers', [
'topSellers' => $this->aggregate('user_sale', ['sum', 'count'])
]);
}
}
aggregate
メソッドはPHPのstdClass
オブジェクトのコレクションを返します。各オブジェクトには、以前にキャプチャされたkey
プロパティと、要求された各集計のキーが含まれます:
@foreach ($topSellers as $seller)
{{ $seller->key }}
{{ $seller->sum }}
{{ $seller->count }}
@endforeach
Pulseは主に事前集計されたバケットからデータを取得します。したがって、指定された集計はPulse::record
メソッドを使用して事前にキャプチャされている必要があります。最も古いバケットは通常、期間の一部を外れているため、Pulseは最も古いエントリを集計してギャップを埋め、各ポーリングリクエストで期間全体を集計することなく、期間全体の正確な値を提供します。
また、aggregateTotal
メソッドを使用して、特定のタイプの合計値を取得することもできます。例えば、以下のメソッドはユーザーごとにグループ化するのではなく、すべてのユーザー売上の合計を取得します。
ユーザーの表示¶
キーとしてユーザーIDを記録する集計を扱う場合、Pulse::resolveUsers
メソッドを使用してキーをユーザーレコードに解決できます:
$aggregates = $this->aggregate('user_sale', ['sum', 'count']);
$users = Pulse::resolveUsers($aggregates->pluck('key'));
return view('livewire.pulse.top-sellers', [
'sellers' => $aggregates->map(fn ($aggregate) => (object) [
'user' => $users->find($aggregate->key),
'sum' => $aggregate->sum,
'count' => $aggregate->count,
])
]);
find
メソッドはname
、extra
、avatar
キーを含むオブジェクトを返します。これらのキーは、オプションで<x-pulse::user-card>
Bladeコンポーネントに直接渡すことができます:
カスタムレコーダー¶
パッケージの作者は、ユーザーがデータのキャプチャを設定できるようにレコーダークラスを提供することを望むかもしれません。
レコーダーは、アプリケーションのconfig/pulse.php
設定ファイルのrecorders
セクションに登録されます:
レコーダーは$listen
プロパティを指定することでイベントをリッスンできます。Pulseは自動的にリスナーを登録し、レコーダーのrecord
メソッドを呼び出します:
<?php
namespace Acme\Recorders;
use Acme\Events\Deployment;
use Illuminate\Support\Facades\Config;
use Laravel\Pulse\Facades\Pulse;
class Deployments
{
/**
* リッスンするイベント。
*
* @var array<int, class-string>
*/
public array $listen = [
Deployment::class,
];
/**
* デプロイメントを記録する。
*/
public function record(Deployment $event): void
{
$config = Config::get('pulse.recorders.'.static::class);
Pulse::record(
// ...
);
}
}