Laravel Pulse 提供对您应用程序性能和使用情况的概览洞察。借助 Pulse,您可以找出瓶颈,例如慢速作业和端点,发现您最活跃的用户,等等。
要对单个事件进行深度调试,请查阅 Laravel Telescope。
[!WARNING]
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 控制台。
[!NOTE]
如果您不想将 Pulse 数据存储在您应用程序的主数据库中,您可以指定一个专用的数据库连接。
Pulse 的许多配置选项都可以通过环境变量控制。要查看可用选项、注册新记录器或配置高级选项,可以发布 config/pulse.php 配置文件:
php artisan vendor:publish --tag=pulse-configPulse 控制面板可通过 /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>每个卡片都接受 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,
]);
// ...
}[!NOTE]
你可以完全自定义认证用户如何被获捕和检索,方法是实现Laravel\Pulse\Contracts\ResolvesUsers契约并将其绑定到 Laravel 的 服务容器。
此 <livewire:pulse.servers /> 卡片显示所有运行 <pulse:check> 命令的服务器的系统资源使用情况。请参阅关于 servers recorder 的文档,以了解有关系统资源报告的更多信息。
如果您更换了基础架构中的服务器,您可能希望在给定持续时间后停止在 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 检索和显示用户信息的方式,请查阅我们关于 解析用户 的文档。
[!NOTE]
如果您的应用程序收到大量请求或分派大量作业, 您可能希望启用采样. 请参阅用户请求记录器, 用户作业记录器, 以及慢作业记录器文档以获取更多信息.
该 <livewire:pulse.exceptions /> 卡片显示了应用程序中异常发生的频率和新近程度。默认情况下,异常会根据异常类及其发生的地点进行分组。请参阅异常记录器文档以了解更多信息。
<livewire:pulse.queues /> 卡片显示您的应用程序中队列的吞吐量,包括已排队、处理中、已处理、已释放和失败的作业数。请参阅 队列记录器 文档了解更多信息。
<livewire:pulse.slow-requests /> 卡片显示传入您应用程序的超出配置阈值的请求,该阈值默认为 1,000ms。请参阅 [慢请求记录器](#slow-requests-recorder) 文档以了解更多信息。
这个 <livewire:pulse.slow-jobs /> 卡片显示了您的应用程序中超出配置阈值的队列任务,默认阈值为 1,000 毫秒。请参阅 慢任务记录器 文档了解更多信息。
<livewire:pulse.slow-queries /> 卡片显示你的应用程序中超过配置阈值的数据库查询,该阈值默认为 1,000ms。
默认情况下,慢查询会根据 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[!NOTE]
为了让pulse:check进程在后台永久运行,你应该使用进程监视器,例如 Supervisor 来确保该命令不会停止运行。
由于 pulse:check 命令是一个长时间运行的进程, 它在不重启的情况下将无法感知到你的代码库的更改. 你应该优雅地重启该命令 通过在你的应用程序部署过程中调用 pulse:restart 命令:
php artisan pulse:restart[!注意]
Pulse 使用 缓存 来存储重启信号,因此在使用此功能之前,您应该验证您的应用程序是否已正确配置了缓存驱动程序。
记录器负责捕获来自您的应用程序的条目,以便记录到 Pulse 数据库中。记录器在 Pulse 配置文件 的 recorders 部分中注册和配置。
CacheInteractions 记录器捕获有关您的应用程序中发生的 缓存 命中和未命中的信息,以便在 缓存 卡片上显示。
您可以选择调整采样率和忽略的键模式。
您还可以配置键分组,以便将相似的键分组为单个条目。例如,您可能希望从缓存相同类型信息的键中删除唯一 ID。组是使用正则表达式配置的,用于“查找和替换”键的一部分。配置文件中包含一个示例:
Recorders\CacheInteractions::class => [
// ...
'groups' => [
// '/:\d+/' => ':*',
],
],第一个匹配的模式将被使用。如果没有模式匹配,那么键将按原样捕获。
Exceptions 记录器捕获在您的应用程序中发生的可报告异常的信息以便在 Exceptions 卡片上显示。
您可以选择性地调整采样率和忽略的异常模式。 您还可以配置是否捕获异常源自的位置。 捕获到的位置将显示在 Pulse 控制面板上,这有助于追踪异常来源; 但是,如果同一异常在多个位置发生,则会为每个独特位置多次显示。
该 队列 记录器捕获有关应用程序队列的信息,以便在 队列 上显示。
您可以选择调整 采样率 和 忽略的任务模式。
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、内存和存储使用情况,用于显示在Servers卡片上。该记录器要求在您希望监控的每台服务器上运行pulse:check 命令。
每个报告服务器都必须有一个唯一的名称。默认情况下,Pulse 将使用 PHP 的 gethostname 函数返回的值。如果您希望自定义此项,可以设置 PULSE_SERVER_NAME 环境变量:
PULSE_SERVER_NAME=load-balancerPulse 配置文件还允许你自定义受监控的目录。
该 UserJobs 记录器捕获有关在您的应用程序中调度作业的用户的信息,用于在 应用程序使用情况 卡片上显示。
您可以选择调整采样率和忽略的作业模式。
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=pulse[!WARNING]
Redis 数据引入需要 Redis 6.2 或更高版本,以及phpredis或predis作为应用程序配置的 Redis 客户端驱动程序。
默认情况下,Pulse 会将条目直接存储到 配置的数据库连接 在 HTTP 响应发送给客户端或作业处理完毕后;但是,您可以使用 Pulse 的 Redis 摄入驱动程序将条目发送到 Redis 流。这可以通过配置 PULSE_INGEST_DRIVER 环境变量来启用:
PULSE_INGEST_DRIVER=redisPulse 默认情况下将使用您的默认 Redis 连接,但您可以通过 PULSE_REDIS_CONNECTION 环境变量来自定义此设置:
PULSE_REDIS_CONNECTION=pulse[!WARNING]
当使用 Redis 摄取驱动程序时,您的 Pulse 安装应始终使用与您的 Redis 驱动队列不同的 Redis 连接(如果适用)。
当使用 Redis 摄取时,你需要运行 pulse:work 命令来监控流,并将条目从 Redis 移动到 Pulse 的数据库表中。
php artisan pulse:work[!NOTE]
为了让pulse:work进程永久地在后台运行,你应该使用一个进程监控器,例如 Supervisor 来确保 Pulse worker 不会停止运行。
由于 pulse:work 命令是一个长期运行的进程,若不重启,它将不会感知到你的代码库的变更。你应该在你的应用程序的部署过程中,通过调用 pulse:restart 命令来优雅地重启该命令:
php artisan pulse:restart[!注意]
Pulse 使用 缓存 来存储重启信号,因此,在使用此功能之前,您应该验证您的应用程序是否已正确配置缓存驱动程序。
默认情况下,Pulse 将捕获你的应用程序中发生的每个相关事件。对于高流量应用程序,这可能导致需要在仪表板中聚合数百万个数据库行,尤其是在较长的时间段内。
您也可以选择在某些 Pulse 数据记录器上启用“采样”。例如,在 用户请求 记录器上将采样率设置为 0.1,将意味着您只记录应用程序约 10% 的请求。在仪表盘中,这些值将被放大,并以 ~ 为前缀,表示它们是近似值。
一般来说,某个特定指标的条目越多,您就可以安全地将采样率设置得越低,而不会牺牲太多准确性。
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 的 lazy loading 功能时,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 注册该组件,通过Livewire::component方法。
如果您的卡片需要超出 Pulse 随附的类和组件之外的额外样式,则有几种选项可用于为您的卡片包含自定义 CSS。
如果您的自定义卡片位于您的应用程序代码库中,并且您正在使用 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>对于其他用例, 包括包内含的 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 或与 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;您还需要在您的卡片视图中包含一个 id 或 class 属性,该属性与传递给 Tailwind 的 重要选择器策略 的选择器匹配:
<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。在上面的例子中,正在聚合的 value 是 $sale->amount。然后你可以调用一个或多个聚合方法 (例如 sum),以便 Pulse 可以将预聚合的值捕获到“桶”中,以便日后高效检索。
可用的聚合方法有:
平均计数最大最小和[!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 }}
@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 }}" />软件包作者可能希望提供记录器类,以允许用户配置数据捕获。
记录器注册在 recorders 部分 的 应用程序的 config/pulse.php 配置文件中:
[
// ...
'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(
// ...
);
}
}