跳至內容

Laravel Pulse

簡介

Laravel Pulse 可以讓您一目了然地深入了解應用程式的效能和使用情況。透過 Pulse,您可以追蹤到速度緩慢的作業和端點等瓶頸、找出最活躍的使用者等等。

如需深入偵錯個別事件,請查看 Laravel Telescope

安裝

exclamation

Pulse 的第一方儲存實作目前需要 MySQL、MariaDB 或 PostgreSQL 資料庫。如果您使用不同的資料庫引擎,則需要一個單獨的 MySQL、MariaDB 或 PostgreSQL 資料庫來儲存您的 Pulse 資料。

您可以使用 Composer 套件管理器安裝 Pulse

composer require laravel/pulse

接下來,您應該使用 vendor:publish Artisan 命令發佈 Pulse 的設定和遷移檔案

php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"

最後,您應該執行 migrate 命令以建立儲存 Pulse 資料所需的表格

php artisan migrate

執行 Pulse 的資料庫遷移後,您可以透過 /pulse 路由存取 Pulse 儀表板。

lightbulb

如果您不想將 Pulse 資料儲存在應用程式的主要資料庫中,您可以指定專用的資料庫連線

設定

Pulse 的許多設定選項可以使用環境變數來控制。若要查看可用的選項、註冊新的錄製器或設定進階選項,您可以發佈 config/pulse.php 設定檔案

php artisan vendor:publish --tag=pulse-config

儀表板

授權

可以透過 /pulse 路由存取 Pulse 儀表板。預設情況下,您只能在 local 環境中存取此儀表板,因此您需要透過自訂 'viewPulse' 授權閘道來設定生產環境的授權。您可以在應用程式的 app/Providers/AppServiceProvider.php 檔案中完成此操作

use App\Models\User;
use Illuminate\Support\Facades\Gate;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Gate::define('viewPulse', function (User $user) {
return $user->isAdmin();
});
 
// ...
}

自訂

可以透過發佈儀表板視圖來設定 Pulse 儀表板卡片和版面配置。儀表板視圖將發佈到 resources/views/vendor/pulse/dashboard.blade.php

php artisan vendor:publish --tag=pulse-dashboard

儀表板由 Livewire 提供支援,讓您可以在不需要重建任何 JavaScript 資源的情況下自訂卡片和版面配置。

在此檔案中,<x-pulse> 元件負責呈現儀表板,並為卡片提供網格版面配置。如果您希望儀表板跨越螢幕的整個寬度,您可以向元件提供 full-width 屬性

<x-pulse full-width>
...
</x-pulse>

預設情況下,<x-pulse> 元件將建立 12 欄的網格,但您可以使用 cols 屬性來自訂此網格

<x-pulse cols="16">
...
</x-pulse>

每個卡片都接受 colsrows 屬性來控制空間和位置

<livewire:pulse.usage cols="4" rows="2" />

大多數卡片也接受 expand 屬性以顯示完整卡片而不是捲動

<livewire:pulse.slow-queries expand />

解析使用者

對於顯示有關您的使用者的資訊的卡片(例如「應用程式使用情況」卡片),Pulse 只會記錄使用者的 ID。呈現儀表板時,Pulse 將從您的預設 Authenticatable 模型解析 nameemail 欄位,並使用 Gravatar 網頁服務顯示頭像。

您可以透過在應用程式的 App\Providers\AppServiceProvider 類別中調用 Pulse::user 方法來自訂欄位和頭像。

user 方法接受一個閉包,該閉包將接收要顯示的 Authenticatable 模型,並應傳回一個包含使用者的 nameextraavatar 資訊的陣列

use Laravel\Pulse\Facades\Pulse;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Pulse::user(fn ($user) => [
'name' => $user->name,
'extra' => $user->email,
'avatar' => $user->avatar_url,
]);
 
// ...
}
lightbulb

您可以透過實作 Laravel\Pulse\Contracts\ResolvesUsers 合約並將其繫結在 Laravel 的服務容器中,完全自訂如何擷取和擷取已驗證的使用者。

卡片

伺服器

<livewire:pulse.servers /> 卡片會顯示執行 pulse:check 命令的所有伺服器的系統資源使用情況。如需有關系統資源報告的詳細資訊,請參閱有關伺服器錄製器的文件。

如果您更換基礎架構中的伺服器,您可能會希望在給定的時間長度後停止在 Pulse 儀表板中顯示非活動的伺服器。您可以使用 ignore-after 屬性來完成此操作,該屬性接受非活動伺服器應從 Pulse 儀表板中移除的秒數。或者,您可以提供相對時間格式化的字串,例如 1 hour3 days and 1 hour

<livewire:pulse.servers ignore-after="3 hours" />

應用程式使用情況

<livewire:pulse.usage /> 卡片會顯示向您的應用程式發出請求、分派作業並遇到速度緩慢請求的前 10 名使用者。

如果您希望同時查看螢幕上的所有使用情況指標,您可以多次包含該卡片並指定 type 屬性

<livewire:pulse.usage type="requests" />
<livewire:pulse.usage type="slow_requests" />
<livewire:pulse.usage type="jobs" />

若要了解如何自訂 Pulse 擷取和顯示使用者資訊的方式,請參閱我們關於解析使用者的文件。

lightbulb

如果您的應用程式收到大量請求或分派大量作業,您可能會希望啟用取樣。如需詳細資訊,請參閱使用者請求錄製器使用者作業錄製器速度緩慢作業錄製器文件。

例外

<livewire:pulse.exceptions /> 卡片會顯示應用程式中發生的例外的頻率和最近發生時間。預設情況下,例外會根據例外類別和發生的位置進行分組。如需詳細資訊,請參閱例外錄製器文件。

佇列

<livewire:pulse.queues /> 卡片會顯示應用程式中佇列的輸送量,包括已排隊、處理中、已處理、已發布和失敗的作業數。如需詳細資訊,請參閱佇列錄製器文件。

速度緩慢的請求

<livewire:pulse.slow-requests /> 卡片會顯示超過設定閾值(預設為 1,000 毫秒)的傳入應用程式請求。如需詳細資訊,請參閱速度緩慢請求錄製器文件。

速度緩慢的作業

<livewire:pulse.slow-jobs /> 卡片會顯示您應用程式中超過設定閾值的佇列任務,預設值為 1,000 毫秒。請參閱慢速任務記錄器文件以瞭解更多資訊。

慢速查詢

<livewire:pulse.slow-queries /> 卡片會顯示您應用程式中超過設定閾值的資料庫查詢,預設值為 1,000 毫秒。

預設情況下,慢速查詢會根據 SQL 查詢(不含綁定)以及發生位置進行分組,但如果您只想根據 SQL 查詢進行分組,也可以選擇不捕捉位置資訊。

如果您因為極大的 SQL 查詢需要語法高亮顯示而遇到渲染效能問題,您可以新增 without-highlighting prop 來停用高亮顯示。

<livewire:pulse.slow-queries without-highlighting />

請參閱慢速查詢記錄器文件以瞭解更多資訊。

慢速傳出請求

<livewire:pulse.slow-outgoing-requests /> 卡片會顯示使用 Laravel 的 HTTP client 發出的傳出請求,這些請求超過設定的閾值,預設值為 1,000 毫秒。

預設情況下,條目將依完整 URL 分組。但是,您可能希望使用正規表示式來標準化或分組類似的傳出請求。請參閱慢速傳出請求記錄器文件以瞭解更多資訊。

快取

<livewire:pulse.cache /> 卡片會顯示您應用程式的快取命中和未命中統計資料,包括全域和個別鍵的統計資料。

預設情況下,條目將依鍵分組。但是,您可能希望使用正規表示式來標準化或分組類似的鍵。請參閱快取互動記錄器文件以瞭解更多資訊。

擷取條目

大多數 Pulse 記錄器會根據 Laravel 派發的框架事件自動捕捉條目。但是,伺服器記錄器和某些第三方卡片必須定期輪詢資訊。若要使用這些卡片,您必須在所有個別應用程式伺服器上執行 pulse:check 常駐程式。

php artisan pulse:check
lightbulb

為了讓 pulse:check 程序在背景永久執行,您應該使用像是 Supervisor 的程序監控器,以確保命令不會停止執行。

由於 pulse:check 命令是一個長時間執行的程序,若不重新啟動,它不會看到程式碼庫的變更。您應該在應用程式部署過程中呼叫 pulse:restart 命令,以優雅地重新啟動命令。

php artisan pulse:restart
lightbulb

Pulse 使用快取來儲存重新啟動訊號,因此在使用此功能之前,您應該驗證是否已為您的應用程式正確設定快取驅動程式。

錄製器

記錄器負責捕捉您應用程式中的條目,以便記錄到 Pulse 資料庫中。記錄器是在Pulse 設定檔recorders 區段中註冊和設定的。

快取互動

CacheInteractions 記錄器會捕捉您應用程式中發生的快取命中和未命中資訊,以便在快取卡片上顯示。

您可以選擇調整取樣率和忽略的鍵模式。

您也可以設定鍵分組,以便將類似的鍵分組為單一條目。例如,您可能希望從快取相同類型資訊的鍵中移除唯一的 ID。分組是使用正規表示式來「尋找和取代」鍵的一部分來設定的。設定檔中包含一個範例。

Recorders\CacheInteractions::class => [
// ...
'groups' => [
// '/:\d+/' => ':*',
],
],

將使用第一個符合的模式。如果沒有任何模式符合,則鍵將按原樣捕捉。

例外

Exceptions 記錄器會捕捉您應用程式中發生的可回報例外狀況的資訊,以便在例外狀況卡片上顯示。

您可以選擇調整取樣率和忽略的例外狀況模式。您也可以設定是否要捕捉例外狀況的來源位置。捕捉到的位置將顯示在 Pulse 儀表板上,這有助於追蹤例外狀況的來源;但是,如果相同的例外狀況發生在多個位置,則每次唯一的位置都會出現多次。

佇列

Queues 記錄器會捕捉您應用程式佇列的資訊,以便在佇列上顯示。

您可以選擇調整取樣率和忽略的任務模式。

速度緩慢的作業

SlowJobs 記錄器會捕捉您應用程式中發生的慢速任務的資訊,以便在慢速任務卡片上顯示。

您可以選擇調整慢速任務閾值、取樣率和忽略的任務模式。

您可能有一些任務預期會比其他任務花費更長的時間。在這種情況下,您可以設定每個任務的閾值。

Recorders\SlowJobs::class => [
// ...
'threshold' => [
'#^App\\Jobs\\GenerateYearlyReports$#' => 5000,
'default' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
],
],

如果沒有任何正規表示式模式符合任務的類別名稱,則會使用 'default' 值。

慢速傳出請求

SlowOutgoingRequests 記錄器會捕捉使用 Laravel 的 HTTP client 發出的傳出 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_SERVER_NAME=load-balancer

Pulse 設定檔也允許您自訂監控的目錄。

使用者任務

UserJobs 記錄器會捕捉您應用程式中分派任務的使用者的資訊,以便在應用程式使用率卡片上顯示。

您可以選擇調整取樣率和忽略的任務模式。

使用者請求

UserRequests 記錄器會捕捉向您應用程式發出請求的使用者的資訊,以便在應用程式使用率卡片上顯示。

您可以選擇調整取樣率和忽略的 URL 模式。

篩選

如我們所見,許多記錄器提供了根據其值(例如請求的 URL)「忽略」傳入條目的能力。但是,有時根據其他因素(例如目前已驗證的使用者)來篩選記錄可能會很有用。若要篩選掉這些記錄,您可以將閉包傳遞給 Pulse 的 filter 方法。通常,filter 方法應在應用程式 AppServiceProviderboot 方法中呼叫。

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 使用的資料庫連線

PULSE_DB_CONNECTION=pulse

Redis 擷取

exclamation

Redis Ingest 需要 Redis 6.2 或更新版本,以及 phpredispredis 作為應用程式設定的 Redis client 驅動程式。

預設情況下,Pulse 會在 HTTP 回應傳送至用戶端或任務處理完成後,將條目直接儲存到設定的資料庫連線;但是,您可以使用 Pulse 的 Redis 攝取驅動程式,將條目改為傳送至 Redis 資料流。這可以透過設定 PULSE_INGEST_DRIVER 環境變數來啟用。

PULSE_INGEST_DRIVER=redis

預設情況下,Pulse 將使用您的預設Redis 連線,但您可以透過 PULSE_REDIS_CONNECTION 環境變數來自訂此連線。

PULSE_REDIS_CONNECTION=pulse

使用 Redis 攝取時,您需要執行 pulse:work 命令來監控資料流,並將條目從 Redis 移至 Pulse 的資料庫表格中。

php artisan pulse:work
lightbulb

為了讓 pulse:work 程序在背景永久執行,您應該使用像是 Supervisor 的程序監控器,以確保 Pulse 工作程序不會停止執行。

由於 pulse:work 命令是一個長時間執行的程序,若不重新啟動,它不會看到程式碼庫的變更。您應該在應用程式部署過程中呼叫 pulse:restart 命令,以優雅地重新啟動命令。

php artisan pulse:restart
lightbulb

Pulse 使用快取來儲存重新啟動訊號,因此在使用此功能之前,您應該驗證是否已為您的應用程式正確設定快取驅動程式。

取樣

預設情況下,Pulse 會捕捉您應用程式中發生的每個相關事件。對於高流量的應用程式,這可能會導致需要在儀表板中彙總數百萬個資料庫列,尤其是在較長的時間週期內。

您也可以選擇在某些 Pulse 資料記錄器上啟用「取樣」。例如,在使用者請求記錄器上將取樣率設定為 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 元件將會自動提供一個佔位符,該佔位符會考量傳遞給您元件的 colsrows 屬性。

當撰寫您的 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 元件和範本,該卡片就可以包含在您的儀表板視圖中。

<x-pulse>
...
 
<livewire:pulse.top-sellers cols="4" />
</x-pulse>
lightbulb

如果您的卡片包含在套件中,您將需要使用 Livewire::component 方法向 Livewire 註冊該元件。

樣式

如果您的卡片需要超出 Pulse 包含的類別和元件之外的額外樣式,則有幾個選項可以為您的卡片包含自訂 CSS。

Laravel Vite 整合

如果您的自訂卡片位於您的應用程式程式碼庫中,並且您正在使用 Laravel 的 Vite 整合,您可以更新您的 vite.config.js 檔案,以包含您卡片的專用 CSS 進入點。

laravel({
input: [
'resources/css/pulse/top-sellers.css',
// ...
],
}),

然後,您可以在您的儀表板視圖中使用 @vite Blade 指令,指定您卡片的 CSS 進入點。

<x-pulse>
@vite('resources/css/pulse/top-sellers.css')
 
...
</x-pulse>

CSS 檔案

對於其他使用案例,包括包含在套件中的 Pulse 卡片,您可以指示 Pulse 通過在您的 Livewire 元件上定義一個 css 方法來加載其他樣式表,該方法會回傳您 CSS 檔案的路徑。

class TopSellers extends Card
{
// ...
 
protected function css()
{
return __DIR__.'/../../dist/top-sellers.css';
}
}

當此卡片包含在儀表板上時,Pulse 將自動將此檔案的內容包含在 <style> 標籤內,因此它不需要發布到 public 目錄。

Tailwind CSS

當使用 Tailwind CSS 時,您應該建立一個專用的 Tailwind 組態檔案,以避免載入不必要的 CSS 或與 Pulse 的 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;

您還需要在您卡片的視圖中包含一個 idclass 屬性,該屬性與傳遞給 Tailwind important 選擇器策略的選擇器相符。

<x-pulse::card id="top-sellers" :cols="$cols" :rows="$rows" class="$class">
...
</x-pulse::card>

資料擷取和彙總

自訂卡片可以從任何地方取得和顯示資料;但是,您可能希望利用 Pulse 強大而高效的資料記錄和聚合系統。

擷取條目

Pulse 允許您使用 Pulse::record 方法來記錄「條目」。

use Laravel\Pulse\Facades\Pulse;
 
Pulse::record('user_sale', $user->id, $sale->amount)
->sum()
->count();

提供給 record 方法的第一個參數是您正在記錄的條目的 type,而第二個參數是 key,它決定了聚合資料應該如何分組。對於大多數聚合方法,您還需要指定一個要聚合的 value。在上面的範例中,正在聚合的值是 $sale->amount。然後,您可以調用一個或多個聚合方法(例如 sum),以便 Pulse 可以將預先聚合的值捕獲到「儲存桶」中,以便稍後有效率地檢索。

可用的聚合方法有

  • avg
  • count
  • max
  • min
  • sum
lightbulb

當建立一個捕獲當前驗證用戶 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 方法來檢索給定類型的總值。例如,以下方法將檢索所有用戶銷售額的總和,而不是按用戶分組。

$total = $this->aggregateTotal('user_sale', 'sum');

顯示使用者

當處理將使用者 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 方法會回傳一個包含 nameextraavatar 索引鍵的物件,您可以選擇性地將其直接傳遞給 <x-pulse::user-card> Blade 元件。

<x-pulse::user-card :user="{{ $seller->user }}" :stats="{{ $seller->sum }}" />

自訂記錄器

套件作者可能希望提供記錄器類別,以允許使用者設定資料的捕獲。

記錄器會在應用程式的 config/pulse.php 組態檔案的 recorders 部分中註冊。

[
// ...
'recorders' => [
Acme\Recorders\Deployments::class => [
// ...
],
 
// ...
],
]

記錄器可以透過指定 $listen 屬性來監聽事件。Pulse 將自動註冊監聽器並調用記錄器的 record 方法。

<?php
 
namespace Acme\Recorders;
 
use Acme\Events\Deployment;
use Illuminate\Support\Facades\Config;
use Laravel\Pulse\Facades\Pulse;
 
class Deployments
{
/**
* The events to listen for.
*
* @var array<int, class-string>
*/
public array $listen = [
Deployment::class,
];
 
/**
* Record the deployment.
*/
public function record(Deployment $event): void
{
$config = Config::get('pulse.recorders.'.static::class);
 
Pulse::record(
// ...
);
}
}