Laravel Pulse
介紹
Laravel Pulse 提供了應用程式效能與使用狀況的一目瞭然的洞察。透過 Pulse,您可以追蹤諸如慢速工作 (slow jobs) 和端點 (endpoints) 等瓶頸,找出最活躍的使用者等等。
若要對個別事件進行深入偵錯,請參閱 Laravel Telescope。
安裝
⚠️ 警告
Pulse 的第一方儲存實作目前需要 MySQL、MariaDB 或 PostgreSQL 資料庫。如果您使用不同的資料庫引擎,則需要為您的 Pulse 資料建立一個獨立的 MySQL、MariaDB 或 PostgreSQL 資料庫。
您可以使用 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 儀表板。
📌 備註
如果您不想將 Pulse 資料儲存在應用程式的主要資料庫中,您可以指定一個專用的資料庫連線。
設定
許多 Pulse 的設定選項都可以透過環境變數來控制。若要查看可用的選項、註冊新的記錄器,或設定進階選項,您可以發布 config/pulse.php 設定檔:
php artisan vendor:publish --tag=pulse-config儀表板
授權
Pulse 儀表板可透過 /pulse 路由存取。預設情況下,您只能在 local 環境中存取此儀表板,因此您需要透過自訂 'viewPulse' 授權 Gate 來為您的生產環境設定授權。您可以在應用程式的 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>每個卡片都接受 cols 和 rows 屬性來控制空間與位置:
<livewire:pulse.usage cols="4" rows="2" />大多數卡片也接受 expand 屬性來顯示完整卡片而不是滾動:
<livewire:pulse.slow-queries expand />解析使用者
對於顯示使用者資訊的卡片,例如「應用程式使用情況」卡片,Pulse 只會記錄使用者的 ID。渲染儀表板時,Pulse 將從您預設的 Authenticatable 模型中解析 name 和 email 欄位,並使用 Gravatar 網路服務顯示頭像。
您可以透過在應用程式的 App\Providers\AppServiceProvider 類別中調用 Pulse::user 方法來自訂這些欄位與頭像。
user 方法接受一個閉包,該閉包將接收要顯示的 Authenticatable 模型,並應返回一個包含使用者 name、extra 和 avatar 資訊的陣列:
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,
]);
// ...
}📌 備註
您可以透過實作 Laravel\Pulse\Contracts\ResolvesUsers 契約並將其綁定到 Laravel 的 服務容器 中,來完全自訂驗證使用者被擷取與檢索的方式。
卡片
伺服器
<livewire:pulse.servers /> 卡片顯示所有執行 pulse:check 指令的伺服器之系統資源使用情況。有關系統資源報告的更多資訊,請參閱 伺服器記錄器 的文件。
如果您更換基礎設施中的伺服器,您可能希望在指定的時間後停止在 Pulse 儀表板上顯示不活躍的伺服器。您可以使用 ignore-after 屬性來完成此操作,該屬性接受一個秒數,在此秒數之後,不活躍的伺服器將從 Pulse 儀表板中移除。或者,您可以提供一個相對時間格式的字串,例如 1 hour 或 3 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 檢索與顯示使用者資訊,請查閱我們關於 解析使用者 的文件。
例外
<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 屬性來禁用高亮:
<livewire:pulse.slow-queries without-highlighting />有關更多資訊,請參閱 慢查詢記錄器 文件。
慢出站請求
<livewire:pulse.slow-outgoing-requests /> 卡片顯示使用 Laravel 的 HTTP 用戶端 發出,且超出設定閾值 (預設為 1,000 毫秒) 的出站請求。
預設情況下,項目將依據完整 URL 進行分組。然而,您可能希望使用正規表達式來標準化或分組類似的出站請求。有關更多資訊,請參閱 慢出站請求記錄器 文件。
快取
<livewire:pulse.cache /> 卡片顯示應用程式的快取命中與未命中統計數據,包括全域與個別鍵值。
預設情況下,項目將依據鍵值進行分組。然而,您可能希望使用正規表達式來標準化或分組類似的鍵值。有關更多資訊,請參閱 快取互動記錄器 文件。
擷取項目
大多數 Pulse 記錄器將根據 Laravel 派送的框架事件自動擷取項目。然而,伺服器記錄器和一些第三方卡片必須定期輪詢資訊。若要使用這些卡片,您必須在所有獨立應用程式伺服器上執行 pulse:check 常駐程式:
php artisan pulse:check📌 備註
為了讓 pulse:check 程序在背景中永久執行,您應該使用程序監控器 (例如 Supervisor) 來確保該指令不會停止運行。
由於 pulse:check 指令是一個長時間運行的程序,若未重新啟動,將無法看到程式碼基底的變更。您應該在應用程式的部署過程中,透過呼叫 pulse:restart 指令來優雅地重新啟動該指令:
php artisan pulse:restart📌 備註
Pulse 會使用 快取 來儲存重新啟動訊號,因此您在使用此功能之前,應該驗證快取驅動程式是否已為您的應用程式正確設定。
記錄器
記錄器負責從您的應用程式中擷取項目並記錄到 Pulse 資料庫中。記錄器是在 Pulse 設定檔 的 recorders 區塊中註冊及設定的。
快取互動
CacheInteractions 記錄器會擷取關於您的應用程式中發生的 快取 命中與未命中資訊,以顯示在 快取 卡片上。
您可以選擇性地調整 取樣率 和忽略的 Key 模式。
您也可以設定 Key 分組,讓相似的 Key 被分組為單一項目。例如,您可能希望從快取相同資訊類型的 Key 中移除唯一 ID。分組是透過正規表達式來「尋找和取代」Key 的部分內容來設定的。設定檔中包含一個範例:
Recorders\CacheInteractions::class => [
// ...
'groups' => [
// '/:\d+/' => ':*',
],
],第一個匹配的模式將被使用。如果沒有模式匹配,那麼該 Key 將會按原樣擷取。
例外
Exceptions 記錄器會擷取關於您的應用程式中發生的可報告例外資訊,以顯示在 例外 卡片上。
您可以選擇性地調整 取樣率 和忽略的例外模式。您也可以設定是否擷取例外發生的位置。擷取到的位置將顯示在 Pulse 儀表板上,有助於追蹤例外的來源;但是,如果相同的例外發生在多個位置,那麼它將針對每個唯一位置多次出現。
佇列
Queues 記錄器會擷取關於您的應用程式佇列的資訊,以顯示在 佇列 卡片上。
您可以選擇性地調整 取樣率 和忽略的 Job 模式。
慢速 Job
SlowJobs 記錄器會擷取關於您的應用程式中發生的慢速 Job 資訊,以顯示在 慢速 Job 卡片上。
您可以選擇性地調整慢速 Job 閾值、取樣率 和忽略的 Job 模式。
有些 Job 您可能會預期其執行時間比其他 Job 更長。在這些情況下,您可以設定每個 Job 的閾值:
Recorders\SlowJobs::class => [
// ...
'threshold' => [
'#^App\\Jobs\\GenerateYearlyReports$#' => 5000,
'default' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000),
],
],如果沒有正規表達式模式與 Job 的類別名稱匹配,那麼將使用 '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_SERVER_NAME=load-balancerPulse 設定檔也允許您自訂受監控的目錄。
使用者 Job
UserJobs 記錄器會擷取關於在您的應用程式中分派 Job 的使用者資訊,以顯示在 應用程式使用 卡片上。
您可以選擇性地調整 取樣率 和忽略的 Job 模式。
使用者請求
UserRequests 記錄器會擷取關於對您的應用程式發出請求的使用者資訊,以顯示在 應用程式使用 卡片上。
您可以選擇性地調整 取樣率 和忽略的 URL 模式。
篩選
正如我們所見,許多 記錄器 透過設定提供了根據其值(例如請求的 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 使用的資料庫連線。
PULSE_DB_CONNECTION=pulseRedis 導入
⚠️ 警告
Redis 導入需要 Redis 6.2 或更高版本,並且應用程式的 Redis 用戶端驅動程式必須是 phpredis 或 predis。
預設情況下,Pulse 會在 HTTP 回應傳送給用戶端或任務處理完成後,將項目直接儲存到已設定的資料庫連線中;但是,您可以選擇使用 Pulse 的 Redis 導入驅動程式,將項目傳送到 Redis 串流。這可以透過設定 PULSE_INGEST_DRIVER 環境變數來啟用:
PULSE_INGEST_DRIVER=redisPulse 預設會使用您的預設 Redis 連線,但您可以透過 PULSE_REDIS_CONNECTION 環境變數來自訂:
PULSE_REDIS_CONNECTION=pulse⚠️ 警告
使用 Redis 導入驅動程式時,如果您的應用程式有使用 Redis 驅動的佇列,Pulse 的安裝應始終使用與該佇列不同的 Redis 連線。
使用 Redis 導入時,您需要執行 pulse:work 命令來監控串流,並將項目從 Redis 移至 Pulse 的資料庫資料表。
php artisan pulse:work📌 備註
為了讓 pulse:work 程序在背景永久運行,您應該使用程序監控器,例如 Supervisor,以確保 Pulse worker 不會停止運行。
由於 pulse:work 命令是一個長時間執行的程序,它不會在未重新啟動的情況下看到程式碼庫的變更。您應該在應用程式的部署過程中,透過呼叫 pulse:restart 命令來優雅地重新啟動此命令:
php artisan pulse:restart📌 備註
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 元件將會自動提供一個預留位置,該位置會尊重傳遞給您元件的 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 元件和模板,該卡片就可以包含在您的儀表板視圖中:
<x-pulse>
...
<livewire:pulse.top-sellers cols="4" />
</x-pulse>📌 備註
如果您的卡片包含在套件中,您需要使用 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 卡片,您可以透過在 Livewire 元件上定義一個 css 方法來指示 Pulse 載入額外樣式表,該方法會回傳您的 CSS 檔案路徑:
class TopSellers extends Card
{
// ...
protected function css()
{
return __DIR__.'/../../dist/top-sellers.css';
}
}當此卡片包含在儀表板上時,Pulse 將會自動在 <style> 標籤內包含此檔案的內容,因此無需將其發佈到 public 目錄。
Tailwind CSS
當使用 Tailwind CSS 時,您應該建立一個專用的 CSS 進入點。以下範例排除了 Tailwind 的 Preflight 基本樣式(這些樣式已由 Pulse 包含),並使用 CSS 選擇器來限定 Tailwind 範圍,以避免與 Pulse 的 Tailwind 類別發生衝突:
@import "tailwindcss/theme.css";
@custom-variant dark (&:where(.dark, .dark *));
@source "./../../views/livewire/pulse/top-sellers.blade.php";
@theme {
/* ... */
}
#top-sellers {
@import "tailwindcss/utilities.css" source(none);
}您還需要將 id 或 class 屬性包含在您的卡片視圖中,使其與進入點中的 CSS 選擇器匹配:
<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 可以將預先聚合的值擷取到「儲存桶 (buckets)」中,以便日後高效地檢索。
可用的聚合方法包括:
avgcountmaxminsum
📌 備註
建構擷取當前已認證使用者 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 }}
@endforeachPulse 將主要從預先聚合的儲存桶中檢索資料;因此,指定的聚合必須已使用 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 方法會回傳一個包含 name、extra 和 avatar 鍵的物件,您可以選擇將其直接傳遞給 <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(
// ...
);
}
}