SDK Laravel

Páginas vistas automáticas del lado del servidor (middleware), una fachada para los eventos. El seguimiento se hace 100 % del lado del servidor, sin cookies de rastreo ni JS, invisible para los bloqueadores. Compatible con Laravel 10 a 13, PHP ≥ 8.1.

Instalación

composer require quiet-metrics/laravel-metrics

El service provider y el alias de fachada se registran automáticamente (package discovery).

Configuración

Las variables de entorno bastan en la mayoría de los casos:

QUIET_METRICS_PUBLIC_KEY=qm_pub_XXXXXXXXXXXXXXXXX
QUIET_METRICS_SECRET_KEY=qm_sec_XXXXXXXXXXXXXXXX
# QUIET_METRICS_ENDPOINT=https://quietmetrics.dev/api/v1/collect

Archivo de configuración publicable si es necesario (config/quiet-metrics.php):

php artisan vendor:publish --tag=quiet-metrics-config

Páginas vistas automáticas

El middleware quiet-metrics envía la página vista en terminate(), después del envío de la respuesta: ningún impacto en la latencia percibida. Por ruta o por grupo:

Route::middleware('quiet-metrics')->group(function () {
    Route::get('/', HomeController::class);
    // …
});

Para medir todo el tráfico web de una vez (Laravel 11+):

// bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
    $middleware->appendToGroup('web', \QuietMetrics\Laravel\Middleware\TrackPageview::class);
})

Se ignoran automáticamente: las peticiones no GET, las respuestas con error, el AJAX y las peticiones que esperan JSON; sus API y sus formularios no contaminan las estadísticas.

Eventos

use QuietMetrics\Laravel\Facades\QuietMetrics;

QuietMetrics::event('registro', ['plan' => 'pro']);

Desde un job, un comando o un listener (fuera de una petición HTTP), no hay URL actual: pásela explícitamente; de lo contrario, no se envía nada (abandono silencioso):

QuietMetrics::event('importacion-terminada', ['filas' => 1200], [
    'url' => 'https://misitio.es/imports',
]);

Casos particulares

Octane, workers persistentes. El contexto (URL, referrer, IP, User-Agent, idioma) proviene del objeto Request de cada petición, nunca de las superglobales. No hay nada que configurar.

Reverse proxy / CDN. El middleware lee $request->ip(): configure los trusted proxies de su aplicación Laravel como de costumbre, y la IP real del visitante llegará correctamente. La opción trust_proxy_headers del SDK base solo sirve fuera de Laravel.

Entornos. Utilice una clave de sitio distinta por entorno (.env de staging vs producción), o simplemente no ponga ninguna clave en staging: sin clave pública, no se envía nada.

Tests. El cliente es un singleton del contenedor: sustitúyalo para verificar sus eventos sin red.

use QuietMetrics\Client;

$fake = $this->mock(Client::class);
$fake->shouldReceive('event')->once()->with('registro', ['plan' => 'pro'], []);

$this->post('/register', [...])->assertRedirect();

Contrato de robustez

El envío es no bloqueante (socket fire-and-forget, ~1 ms percibido, respaldo cURL corto) y cualquier fallo es silencioso: la analítica nunca rompe el sitio anfitrión, incluso si la plataforma está inaccesible.

¿No encuentra su respuesta?

El soporte responde en días laborables.