#Introducción
Laravel Pulse ofrece una visión rápida del rendimiento y uso de su aplicación. Con Pulse, puede identificar cuellos de botella como trabajos lentos y endpoints, encontrar a sus usuarios más activos y más.
Para una depuración detallada de eventos individuales, consulte Laravel Telescope.
#Instalación
La implementación de almacenamiento oficial de Pulse actualmente requiere una base de datos MySQL o PostgreSQL. Si utiliza un motor de base de datos diferente, necesitará una base de datos MySQL o PostgreSQL separada para los datos de Pulse.
Dado que Pulse está en beta, es posible que necesite ajustar el archivo composer.json de su aplicación para permitir la instalación de paquetes en versión beta:
"minimum-stability": "beta",
"prefer-stable": true
Luego, puede usar el gestor de paquetes Composer para instalar Pulse en su proyecto Laravel:
composer require laravel/pulse
A continuación, debe publicar los archivos de configuración y migración de Pulse usando el comando Artisan vendor:publish:
php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"
Finalmente, debe ejecutar el comando migrate para crear las tablas necesarias para almacenar los datos de Pulse:
php artisan migrate
Una vez ejecutadas las migraciones de Pulse, podrá acceder al panel de Pulse a través de la ruta /pulse.
Si no desea almacenar los datos de Pulse en la base de datos principal de su aplicación, puede especificar una conexión de base de datos dedicada.
#Configuración
Muchas opciones de configuración de Pulse pueden controlarse mediante variables de entorno. Para ver las opciones disponibles, registrar nuevas grabadoras o configurar opciones avanzadas, puede publicar el archivo de configuración config/pulse.php:
php artisan vendor:publish --tag=pulse-config
#Panel de control
#Autorización
El panel de Pulse es accesible mediante la ruta /pulse. Por defecto, solo podrá acceder a este panel en el entorno local, por lo que deberá configurar la autorización para sus entornos de producción personalizando la puerta de autorización 'viewPulse'. Esto puede hacerse en el archivo app/Providers/AuthServiceProvider.php de su aplicación:
use App\Models\User;
use Illuminate\Support\Facades\Gate;
/**
* Registrar cualquier servicio de autenticación / autorización.
*/
public function boot(): void
{
Gate::define('viewPulse', function (User $user) {
return $user->isAdmin();
});
// ...
}
#Personalización
Las tarjetas y el diseño del panel de Pulse pueden configurarse publicando la vista del panel. La vista se publicará en resources/views/vendor/pulse/dashboard.blade.php:
php artisan vendor:publish --tag=pulse-dashboard
El panel está impulsado por Livewire, y permite personalizar las tarjetas y el diseño sin necesidad de reconstruir ningún recurso JavaScript.
Dentro de este archivo, el componente <x-pulse> es responsable de renderizar el panel y proporciona un diseño en cuadrícula para las tarjetas. Si desea que el panel ocupe todo el ancho de la pantalla, puede proporcionar la propiedad full-width al componente:
<x-pulse full-width>
...
</x-pulse>
Por defecto, el componente <x-pulse> crea una cuadrícula de 12 columnas, pero puede personalizar esto usando la propiedad cols:
<x-pulse cols="16">
...
</x-pulse>
Cada tarjeta acepta las propiedades cols y rows para controlar el espacio y la posición:
<livewire:pulse.usage cols="4" rows="2" />
La mayoría de las tarjetas también aceptan la propiedad expand para mostrar la tarjeta completa en lugar de hacer scroll:
<livewire:pulse.slow-queries expand />
#Resolución de usuarios
Para las tarjetas que muestran información sobre sus usuarios, como la tarjeta de Uso de la Aplicación, Pulse solo registra el ID del usuario. Al renderizar el panel, Pulse resuelve los campos name y email de su modelo Authenticatable predeterminado y muestra avatares usando el servicio web Gravatar.
Puede personalizar los campos y el avatar invocando el método Pulse::user dentro de la clase App\Providers\AppServiceProvider de su aplicación.
El método user acepta un closure que recibe el modelo Authenticatable a mostrar y debe devolver un array con la información name, extra y avatar del usuario:
use Laravel\Pulse\Facades\Pulse;
/**
* Inicializar cualquier servicio de la aplicación.
*/
public function boot(): void
{
Pulse::user(fn ($user) => [
'name' => $user->name,
'extra' => $user->email,
'avatar' => $user->avatar_url,
]);
// ...
}
Puede personalizar completamente cómo se captura y recupera el usuario autenticado implementando el contrato Laravel\Pulse\Contracts\ResolvesUsers y vinculándolo en el contenedor de servicios de Laravel.
#Tarjetas
#Servidores
La tarjeta <livewire:pulse.servers /> muestra el uso de recursos del sistema para todos los servidores que ejecutan el comando pulse:check. Consulte la documentación del grabador de servidores para más información sobre el reporte de recursos del sistema.
#Uso de la Aplicación
La tarjeta <livewire:pulse.usage /> muestra los 10 usuarios principales que hacen solicitudes a su aplicación, despachan trabajos y experimentan solicitudes lentas.
Si desea ver todas las métricas de uso en pantalla al mismo tiempo, puede incluir la tarjeta varias veces y especificar el atributo type:
<livewire:pulse.usage type="requests" />
<livewire:pulse.usage type="slow_requests" />
<livewire:pulse.usage type="jobs" />
Para aprender cómo personalizar cómo Pulse recupera y muestra la información de los usuarios, consulte nuestra documentación sobre resolución de usuarios.
Si su aplicación recibe muchas solicitudes o despacha muchos trabajos, puede que desee habilitar el muestreo. Consulte la documentación de los grabadores de solicitudes de usuario, trabajos de usuario y trabajos lentos para más información.
#Excepciones
La tarjeta <livewire:pulse.exceptions /> muestra la frecuencia y recencia de las excepciones que ocurren en su aplicación. Por defecto, las excepciones se agrupan según la clase de excepción y la ubicación donde ocurrió. Consulte la documentación del grabador de excepciones para más información.
#Colas
La tarjeta <livewire:pulse.queues /> muestra el rendimiento de las colas en su aplicación, incluyendo el número de trabajos en cola, en proceso, procesados, liberados y fallidos. Consulte la documentación del grabador de colas para más información.
#Solicitudes lentas
La tarjeta <livewire:pulse.slow-requests /> muestra las solicitudes entrantes a su aplicación que exceden el umbral configurado, que por defecto es 1,000ms. Consulte la documentación del grabador de solicitudes lentas para más información.
#Trabajos lentos
La tarjeta <livewire:pulse.slow-jobs /> muestra los trabajos en cola en su aplicación que exceden el umbral configurado, que por defecto es 1,000ms. Consulte la documentación del grabador de trabajos lentos para más información.
#Consultas lentas
La tarjeta <livewire:pulse.slow-queries /> muestra las consultas a la base de datos en su aplicación que exceden el umbral configurado, que por defecto es 1,000ms.
Por defecto, las consultas lentas se agrupan según la consulta SQL (sin bindings) y la ubicación donde ocurrió, pero puede optar por no capturar la ubicación si desea agrupar solo por la consulta SQL.
Consulte la documentación del grabador de consultas lentas para más información.
#Solicitudes salientes lentas
La tarjeta <livewire:pulse.slow-outgoing-requests /> muestra las solicitudes salientes realizadas usando el cliente HTTP de Laravel que exceden el umbral configurado, que por defecto es 1,000ms.
Por defecto, las entradas se agruparán por la URL completa. Sin embargo, puede normalizar o agrupar solicitudes salientes similares usando expresiones regulares. Consulte la documentación del grabador de solicitudes salientes lentas para más información.
#Caché
La tarjeta <livewire:pulse.cache /> muestra las estadísticas de aciertos y fallos en caché para su aplicación, tanto globalmente como para claves individuales.
Por defecto, las entradas se agruparán por clave. Sin embargo, puede normalizar o agrupar claves similares usando expresiones regulares. Consulte la documentación del grabador de interacciones con caché para más información.
#Captura de entradas
La mayoría de las grabadoras de Pulse capturan automáticamente entradas basadas en eventos del framework emitidos por Laravel. Sin embargo, el grabador de servidores y algunas tarjetas de terceros deben consultar información regularmente. Para usar estas tarjetas, debe ejecutar el demonio pulse:check en cada uno de sus servidores de aplicación:
php artisan pulse:check
Para mantener el proceso pulse:check ejecutándose permanentemente en segundo plano, debe usar un monitor de procesos como Supervisor para asegurar que el comando no se detenga.
Como el comando pulse:check es un proceso de larga duración, no detectará cambios en su código sin reiniciarse. Debe reiniciar el comando de forma ordenada llamando al comando pulse:restart durante el proceso de despliegue de su aplicación:
php artisan pulse:restart
Pulse usa el cache para almacenar señales de reinicio, por lo que debe verificar que un driver de caché esté configurado correctamente para su aplicación antes de usar esta función.
#Grabadoras
Las grabadoras son responsables de capturar entradas de su aplicación para ser registradas en la base de datos de Pulse. Las grabadoras se registran y configuran en la sección recorders del archivo de configuración de Pulse.
#Interacciones con caché
La grabadora CacheInteractions captura información sobre los aciertos y fallos en la caché de su aplicación para mostrarlos en la tarjeta Caché.
Opcionalmente, puede ajustar la tasa de muestreo y los patrones de claves ignoradas.
También puede configurar el agrupamiento de claves para que claves similares se agrupen como una sola entrada. Por ejemplo, puede querer eliminar IDs únicos de claves que almacenan el mismo tipo de información. Los grupos se configuran usando una expresión regular para "buscar y reemplazar" partes de la clave. Un ejemplo está incluido en el archivo de configuración:
Recorders\CacheInteractions::class => [
// ...
'groups' => [
// '/:\d+/' => ':*',
],
],
Se usará el primer patrón que coincida. Si ningún patrón coincide, la clave se capturará tal cual.
#Excepciones
La grabadora Exceptions captura información sobre excepciones reportables que ocurren en su aplicación para mostrarlas en la tarjeta Excepciones.
Opcionalmente, puede ajustar la tasa de muestreo y los patrones de excepciones ignoradas. También puede configurar si capturar la ubicación donde se originó la excepción. La ubicación capturada se mostrará en el panel de Pulse, lo que puede ayudar a rastrear el origen de la excepción; sin embargo, si la misma excepción ocurre en múltiples ubicaciones, aparecerá varias veces para cada ubicación única.
#Colas
La grabadora Queues captura información sobre las colas de su aplicación para mostrarlas en la tarjeta Colas.
Opcionalmente, puede ajustar la tasa de muestreo y los patrones de trabajos ignorados.
#Trabajos lentos
La grabadora SlowJobs captura información sobre trabajos lentos que ocurren en su aplicación para mostrarlos en la tarjeta Trabajos lentos.
Opcionalmente, puede ajustar el umbral de trabajos lentos, la tasa de muestreo y los patrones de trabajos ignorados.
#Solicitudes salientes lentas
La grabadora SlowOutgoingRequests captura información sobre solicitudes HTTP salientes realizadas usando el cliente HTTP de Laravel que exceden el umbral configurado para mostrarlas en la tarjeta Solicitudes salientes lentas.
Opcionalmente, puede ajustar el umbral de solicitudes salientes lentas, la tasa de muestreo y los patrones de URLs ignoradas.
También puede configurar el agrupamiento de URLs para que URLs similares se agrupen como una sola entrada. Por ejemplo, puede querer eliminar IDs únicos de las rutas URL o agrupar solo por dominio. Los grupos se configuran usando una expresión regular para "buscar y reemplazar" partes de la URL. Algunos ejemplos están incluidos en el archivo de configuración:
Recorders\OutgoingRequests::class => [
// ...
'groups' => [
// '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*',
// '#^https?://([^/]*).*$#' => '\1',
// '#/\d+#' => '/*',
],
],
Se usará el primer patrón que coincida. Si ningún patrón coincide, la URL se capturará tal cual.
#Consultas lentas
La grabadora SlowQueries captura cualquier consulta a la base de datos en su aplicación que exceda el umbral configurado para mostrarlas en la tarjeta Consultas lentas.
Opcionalmente, puede ajustar el umbral de consultas lentas, la tasa de muestreo y los patrones de consultas ignoradas. También puede configurar si capturar la ubicación de la consulta. La ubicación capturada se mostrará en el panel de Pulse, lo que puede ayudar a rastrear el origen de la consulta; sin embargo, si la misma consulta se realiza en múltiples ubicaciones, aparecerá varias veces para cada ubicación única.
#Solicitudes lentas
La grabadora Requests captura información sobre las solicitudes hechas a su aplicación para mostrarlas en las tarjetas Solicitudes lentas y Uso de la Aplicación.
Opcionalmente, puede ajustar el umbral de rutas lentas, la tasa de muestreo y las rutas ignoradas.
#Servidores
La grabadora Servers captura el uso de CPU, memoria y almacenamiento de los servidores que alimentan su aplicación para mostrarlos en la tarjeta Servidores. Esta grabadora requiere que el pulse:check comando esté ejecutándose en cada uno de los servidores que desea monitorear.
Cada servidor que reporte debe tener un nombre único. Por defecto, Pulse usará el valor devuelto por la función PHP gethostname. Si desea personalizar esto, puede establecer la variable de entorno PULSE_SERVER_NAME:
PULSE_SERVER_NAME=load-balancer
El archivo de configuración de Pulse también le permite personalizar los directorios que se monitorean.
#Trabajos de usuario
La grabadora UserJobs captura información sobre los usuarios que despachan trabajos en su aplicación para mostrarlos en la tarjeta Uso de la Aplicación.
Opcionalmente, puede ajustar la tasa de muestreo y los patrones de trabajos ignorados.
#Solicitudes de usuario
La grabadora UserRequests captura información sobre los usuarios que hacen solicitudes a su aplicación para mostrarlas en la tarjeta Uso de la Aplicación.
Opcionalmente, puede ajustar la tasa de muestreo y los patrones de trabajos ignorados.
#Filtrado
Como hemos visto, muchas grabadoras ofrecen la capacidad de, mediante configuración, "ignorar" entradas entrantes basadas en su valor, como la URL de una solicitud. Pero a veces puede ser útil filtrar registros basados en otros factores, como el usuario autenticado actualmente. Para filtrar estos registros, puede pasar un closure al método filter de Pulse. Normalmente, el método filter debe invocarse dentro del método boot del AppServiceProvider de su aplicación:
use Illuminate\Support\Facades\Auth;
use Laravel\Pulse\Entry;
use Laravel\Pulse\Facades\Pulse;
use Laravel\Pulse\Value;
/**
* Inicializar cualquier servicio de la aplicación.
*/
public function boot(): void
{
Pulse::filter(function (Entry|Value $entry) {
return Auth::user()->isNotAdmin();
});
// ...
}
#Rendimiento
Pulse ha sido diseñado para integrarse en una aplicación existente sin requerir infraestructura adicional. Sin embargo, para aplicaciones con alto tráfico, existen varias formas de eliminar cualquier impacto que Pulse pueda tener en el rendimiento de su aplicación.
#Uso de una base de datos diferente
Para aplicaciones con alto tráfico, puede preferir usar una conexión de base de datos dedicada para Pulse para evitar impactar la base de datos de su aplicación.
Puede personalizar la conexión de base de datos usada por Pulse configurando la variable de entorno PULSE_DB_CONNECTION.
PULSE_DB_CONNECTION=pulse
#Ingesta con Redis
La ingesta con Redis requiere Redis 6.2 o superior y phpredis o predis como el driver cliente Redis configurado en la aplicación.
Por defecto, Pulse almacenará las entradas directamente en la conexión de base de datos configurada después de que la respuesta HTTP haya sido enviada al cliente o un trabajo haya sido procesado; sin embargo, puede usar el driver de ingesta Redis de Pulse para enviar entradas a un stream de Redis en su lugar. Esto puede habilitarse configurando la variable de entorno PULSE_INGEST_DRIVER:
PULSE_INGEST_DRIVER=redis
Pulse usará su conexión Redis predeterminada por defecto, pero puede personalizarla mediante la variable de entorno PULSE_REDIS_CONNECTION:
PULSE_REDIS_CONNECTION=pulse
Al usar la ingesta con Redis, deberá ejecutar el comando pulse:work para monitorear el stream y mover las entradas de Redis a las tablas de la base de datos de Pulse.
php artisan pulse:work
Para mantener el proceso pulse:work ejecutándose permanentemente en segundo plano, debe usar un monitor de procesos como Supervisor para asegurar que el worker de Pulse no se detenga.
Como el comando pulse:work es un proceso de larga duración, no detectará cambios en su código sin reiniciarse. Debe reiniciar el comando de forma ordenada llamando al comando pulse:restart durante el proceso de despliegue de su aplicación:
php artisan pulse:restart
Pulse usa el cache para almacenar señales de reinicio, por lo que debe verificar que un driver de caché esté configurado correctamente para su aplicación antes de usar esta función.
#Muestreo
Por defecto, Pulse capturará cada evento relevante que ocurra en su aplicación. Para aplicaciones con alto tráfico, esto puede resultar en la necesidad de agregar millones de filas en la base de datos en el panel, especialmente para períodos largos.
En su lugar, puede optar por habilitar el "muestreo" en ciertos grabadores de datos de Pulse. Por ejemplo, establecer la tasa de muestreo a 0.1 en el grabador User Requests significará que solo registrará aproximadamente el 10% de las solicitudes a su aplicación. En el panel, los valores se escalarán y se prefijarán con un ~ para indicar que son aproximados.
En general, cuantos más registros tenga para una métrica particular, más bajo podrá establecer la tasa de muestreo sin sacrificar demasiada precisión.
#Recorte
Pulse recortará automáticamente las entradas almacenadas una vez que estén fuera del período visible en el panel. El recorte ocurre al ingerir datos usando un sistema de lotería que puede personalizarse en el archivo de configuración de Pulse.
#Manejo de excepciones de Pulse
Si ocurre una excepción mientras se capturan datos de Pulse, como no poder conectarse a la base de datos de almacenamiento, Pulse fallará silenciosamente para evitar impactar su aplicación.
Si desea personalizar cómo se manejan estas excepciones, puede proporcionar un closure al método 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(),
]);
});
#Tarjetas personalizadas
Pulse le permite crear tarjetas personalizadas para mostrar datos relevantes a las necesidades específicas de su aplicación. Pulse usa Livewire, por lo que puede querer revisar su documentación antes de construir su primera tarjeta personalizada.
#Componentes de tarjetas
Crear una tarjeta personalizada en Laravel Pulse comienza extendiendo el componente base Card de Livewire y definiendo una vista correspondiente:
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');
}
}
Al usar la función de carga perezosa de Livewire, el componente Card proporcionará automáticamente un marcador de posición que respeta los atributos cols y rows pasados a su componente.
Al escribir la vista correspondiente a su tarjeta Pulse, puede aprovechar los componentes Blade de Pulse para mantener una apariencia y estilo consistentes:
<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>
Las variables $cols, $rows, $class y $expand deben pasarse a sus respectivos componentes Blade para que el diseño de la tarjeta pueda personalizarse desde la vista del panel. También puede incluir el atributo wire:poll.5s="" en su vista para que la tarjeta se actualice automáticamente.
Una vez que haya definido su componente Livewire y plantilla, la tarjeta puede incluirse en su vista del panel:
<x-pulse>
...
<livewire:pulse.top-sellers cols="4" />
</x-pulse>
Si su tarjeta está incluida en un paquete, deberá registrar el componente con Livewire usando el método Livewire::component.
#Estilos
Si su tarjeta requiere estilos adicionales más allá de las clases y componentes incluidos con Pulse, existen varias opciones para incluir CSS personalizado para sus tarjetas.
#Integración con Laravel Vite
Si su tarjeta personalizada está dentro del código de su aplicación y usa la integración Vite de Laravel, puede actualizar su archivo vite.config.js para incluir un punto de entrada CSS dedicado para su tarjeta:
laravel({
input: [
'resources/css/pulse/top-sellers.css',
// ...
],
}),
Luego puede usar la directiva Blade @vite en su vista del panel, especificando el punto de entrada CSS para su tarjeta:
<x-pulse>
@vite('resources/css/pulse/top-sellers.css')
...
</x-pulse>
#Archivos CSS
Para otros casos, incluyendo tarjetas Pulse contenidas en un paquete, puede indicar a Pulse que cargue hojas de estilo adicionales definiendo un método css en su componente Livewire que devuelva la ruta al archivo CSS:
class TopSellers extends Card
{
// ...
protected function css()
{
return __DIR__.'/../../dist/top-sellers.css';
}
}
Cuando esta tarjeta se incluya en el panel, Pulse incluirá automáticamente el contenido de este archivo dentro de una etiqueta <style>, por lo que no es necesario publicarlo en el directorio public.
#Tailwind CSS
Al usar Tailwind CSS, debe crear un archivo de configuración Tailwind dedicado para evitar cargar CSS innecesario o conflictos con las clases Tailwind de Pulse:
export default {
darkMode: 'class',
important: '#top-sellers',
content: [
'./resources/views/livewire/pulse/top-sellers.blade.php',
],
corePlugins: {
preflight: false,
},
};
Luego puede especificar el archivo de configuración en su punto de entrada CSS:
@config "../../tailwind.top-sellers.config.js";
@tailwind base;
@tailwind components;
@tailwind utilities;
También deberá incluir un atributo id o class en la vista de su tarjeta que coincida con el selector pasado a la estrategia de selector important de Tailwind:
<x-pulse::card id="top-sellers" :cols="$cols" :rows="$rows" class="$class">
...
</x-pulse::card>
#Captura y agregación de datos
Las tarjetas personalizadas pueden obtener y mostrar datos desde cualquier lugar; sin embargo, puede aprovechar el potente y eficiente sistema de grabación y agregación de datos de Pulse.
#Captura de entradas
Pulse le permite registrar "entradas" usando el método Pulse::record:
use Laravel\Pulse\Facades\Pulse;
Pulse::record('user_sale', $user->id, $sale->amount)
->sum()
->count();
El primer argumento proporcionado al método record es el type para la entrada que está registrando, mientras que el segundo argumento es la key que determina cómo se debe agrupar la información agregada. Para la mayoría de los métodos de agregación también deberá especificar un value para agregar. En el ejemplo anterior, el valor agregado es $sale->amount. Luego puede invocar uno o más métodos de agregación (como sum) para que Pulse capture valores pre-agregados en "cubos" para una recuperación eficiente posterior.
Los métodos de agregación disponibles son:
avgcountmaxminsum
Al construir un paquete de tarjetas que capture el ID del usuario autenticado, debe usar el método Pulse::resolveAuthenticatedUserId(), que respeta cualquier personalización del resolutor de usuarios hecha en la aplicación.
#Recuperación de datos agregados
Al extender el componente Livewire Card de Pulse, puede usar el método aggregate para recuperar datos agregados para el período que se está visualizando en el panel:
class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers', [
'topSellers' => $this->aggregate('user_sale', ['sum', 'count']);
]);
}
}
El método aggregate devuelve una colección de objetos PHP stdClass. Cada objeto contendrá la propiedad key capturada anteriormente, junto con claves para cada uno de los agregados solicitados:
@foreach ($topSellers as $seller)
{{ $seller->key }}
{{ $seller->sum }}
{{ $seller->count }}
@endforeach
Pulse recuperará principalmente datos de los cubos pre-agregados; por lo tanto, los agregados especificados deben haber sido capturados previamente usando el método Pulse::record. El cubo más antiguo generalmente caerá parcialmente fuera del período, por lo que Pulse agregará las entradas más antiguas para llenar el vacío y dar un valor preciso para todo el período, sin necesidad de agregar todo el período en cada solicitud de sondeo.
También puede recuperar un valor total para un tipo dado usando el método aggregateTotal. Por ejemplo, el siguiente método recuperaría el total de todas las ventas de usuarios en lugar de agruparlas por usuario.
$total = $this->aggregateTotal('user_sale', 'sum');
#Mostrar usuarios
Al trabajar con agregados que registran un ID de usuario como clave, puede resolver las claves a registros de usuario usando el método 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,
])
]);
El método find devuelve un objeto que contiene las claves name, extra y avatar, que puede pasar opcionalmente directamente al componente Blade <x-pulse::user-card>:
<x-pulse::user-card :user="{{ $seller->user }}" :stats="{{ $seller->sum }}" />
#Grabadoras personalizadas
Los autores de paquetes pueden querer proporcionar clases grabadoras para permitir a los usuarios configurar la captura de datos.
Las grabadoras se registran en la sección recorders del archivo de configuración config/pulse.php de la aplicación:
[
// ...
'recorders' => [
Acme\Recorders\Deployments::class => [
// ...
],
// ...
],
]
Las grabadoras pueden escuchar eventos especificando una propiedad $listen. Pulse registrará automáticamente los listeners y llamará al método record de las grabadoras:
<?php
namespace Acme\Recorders;
use Acme\Events\Deployment;
use Illuminate\Support\Facades\Config;
use Laravel\Pulse\Facades\Pulse;
class Deployments
{
/**
* Los eventos a escuchar.
*
* @var list<class-string>
*/
public array $listen = [
Deployment::class,
];
/**
* Registrar el despliegue.
*/
public function record(Deployment $event): void
{
$config = Config::get('pulse.recorders.'.static::class);
Pulse::record(
// ...
);
}
}