Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Pulse Guzzle Recorder Laravel Package

muhammadhuzaifa/laravel-pulse-guzzle-recorder

Laravel Pulse Guzzle Recorder adds a Pulse card and recorder that captures outgoing Guzzle HTTP requests—URL, method, status code, duration, and errors—so you can monitor third-party API traffic and slow dependencies right inside your Laravel Pulse dashboard. Easy to install and configure.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — This is a thin adapter, not a platform: a Guzzle middleware, a Pulse recorder class, and a service provider that writes into Pulse's existing slow-outgoing-request store and reuses the Slow Outgoing Requests dashboard card. That is the correct shape. Pulse already owns ingestion, retention, card rendering, and alert hooks; this package contributes only instrumentation for a traffic class Pulse cannot see — Guzzle clients constructed directly rather than through Laravel's Http facade (Stripe/AWS/OpenAI SDKs, Elasticsearch clients, legacy service wrappers). The gap is real: Pulse's built-in SlowOutgoingRequests recorder is event-based and blind to raw Guzzle usage. The package is additive, reversible, and confined to the observability layer with no coupling into domain code.

Integration feasibility — Install is a composer require, a config publish, and a recorder entry in config/pulse.php. The friction is not the package, it is Guzzle: the middleware observes only clients whose HandlerStack includes it. Apps that centralize client construction (factory, base SDK wrapper, container binding) get full coverage from one change; apps where vendors instantiate their own clients get partial coverage — and partial coverage is worse than none, because the dashboard then looks authoritative. There is also an overlap question: Http:: calls are already recorded by Pulse, so double-wrapped clients double-count. That needs an explicit exclusion rule, not a hope.

Technical risk — Concentrated in the dependency's maturity rather than its design. 17 stars, zero dependents, single maintainer, and a release date (2026-06-15) that should be confirmed as real cadence rather than metadata artifact. The coupling point is Pulse's table schema and recorder contract, which a Pulse major version can change. The code surface is small — on the order of a few hundred lines — so the dominant risk is abandonment, not complexity, and the mitigation is a cheap fork. Secondary risks: URI columns capturing tokens or query-string secrets, unbounded pulse_* table growth, middleware ordering changing what duration is actually measured, and async/pooled requests being timed incorrectly.

Key questions

  • Does the recorder dedupe against Pulse's built-in SlowOutgoingRequests for Http:: traffic, or is exclusion manual?
  • Is the middleware auto-registered on a default handler stack, or must every client opt in? What is the documented pattern for third-party SDKs that own their stack?
  • What is the default threshold, and is it configurable per host, per method, or with ignore patterns?
  • Are request/response bodies or headers persisted, or only URI, method, duration, and status?
  • Does the recorder swallow its own exceptions so instrumentation can never fail a business call?
  • Which Laravel / PHP / Pulse / Guzzle version matrix is actually exercised in CI?
  • How are Guzzle promises (sendAsync, Pool) timed — full resolution time or time-to-first-byte?
  • Is there sampling or rate-limiting support, and does it respect PULSE_ENABLED and non-production environments?
  • Is this actively maintained, or effectively "vendored at first use"?

Integration Approach

Stack fit — Best fit is a Laravel 10/11/12 monolith or service already running Pulse as its primary APM-lite surface with meaningful third-party SDK traffic. Poor fit: teams standardized on Datadog/New Relic/OpenTelemetry (this creates a second, inconsistent telemetry path) and any non-Laravel PHP service. Treat it as filling one card, not as an observability strategy.

Migration path — Nothing to migrate; this is net-new instrumentation. The actual decision is whether Guzzle-direct traffic should be visible in the same pane as everything else (yes for most Laravel shops) versus instrumented at the SDK layer via OpenTelemetry (better if traces are already exported). Pick one; running both produces contradictory numbers.

Compatibility — Pin exact Laravel, Pulse, and Guzzle versions in composer. Confirm the app's Pulse storage driver (database vs. Redis ingestion) and that the Slow Outgoing Requests card is enabled before installing. Verify every target client exposes a handler config, and explicitly flag any SDK that builds its own handler stack internally.

Sequencing

  1. Confirm Pulse is healthy, the card is enabled, and retention/trim is configured — otherwise the recorder just accelerates disk pressure.
  2. Install in staging with a deliberately high threshold (1000–2000 ms) and sampling on.
  3. Instrument exactly one non-critical client; verify rows land with sane durations and correct URIs.
  4. Prove no duplication against Http::-based traffic, and prove instrumentation is exception-safe by forcing a timeout, a 5xx, and a DNS failure.
  5. Add URI scrubbing for query strings, signed URLs, and tokens before any production traffic.
  6. Roll out to remaining clients through the central client factory, and document that factory as the mandatory construction path.
  7. Add a threshold alert on the card once a baseline exists.
  8. Only then lower the threshold to surface "medium" slowness.

Operational Impact

Maintenance — Low ongoing effort, low bus factor. Assign an owner and a quarterly review against Pulse releases, and keep a fork ready. Because the package is small, forking is a days-not-weeks proposition and should be planned for rather than treated as a crisis. Add a contract test asserting the Pulse table schema the recorder writes to, so a Pulse upgrade fails loudly in CI instead of silently in production.

Support — Community-only, no SLA, escalation path is "we own it." Record the recorder configuration and threshold rationale in the repo so the reasoning is not in one engineer's head.

Scaling — Middleware overhead is negligible next to network I/O. The scaling concern is write volume: on high-outbound-throughput services, every slow call becomes an entry, and Pulse ingestion plus retention becomes the cost center. Mitigate with a higher threshold, sampling, and shorter retention on pulse_* tables. Above roughly thousands of outbound calls per second, this belongs in a sampled tracing pipeline instead.

Failure modes

  • Silent blind spots: uninstrumented clients let the team read "no slow calls" as "no slow calls."
  • Double counting: Http:: traffic recorded twice inflates counts and corrupts threshold tuning.
  • Instrumentation-induced outage: if recording is not exception-safe, an observability defect becomes an availability defect. Verify explicitly.
  • PII leakage: URIs and query strings land on a dashboard the whole team can read; signed URLs and API keys must be scrubbed in the recorder.
  • Schema breakage: a Pulse upgrade renames or alters columns and writes start failing quietly.
  • Unbounded growth: missing retention bloats the database until someone notices.
  • Async distortion: pools and sendAsync may record durations that don't reflect user experience, or attribute the time to the wrong request.
  • Environment leakage: staging or local noise polluting production dashboards if PULSE_ENABLED isn't respected.

Ramp-up — A Laravel developer instruments the first client in under an hour. The real ramp is organizational: agreeing what "slow" means, setting thresholds per dependency, and deciding who acts on the card. Budget half a day of engineering plus a short runbook. The TPM's work here is defining the SLO and the ownership, not the integration.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names