Integrating with Laravel Queues and Horizon
If you are making use of the Laravel Queues feature, then instrumenting the duration of individual jobs inside the workers can increase insight into the performance of your background jobs.
Instrumentation of worker jobs requires manual integration the moment. You need
to hook into the before
, after
and failing
events, for example from an
AppServiceProvider
or from a dedicated Tideways service provider:
<?php
declare(strict_types=1);
namespace App\Providers;
use Tideways\Profiler;
use Illuminate\Support\Facades\Queue;
use Illuminate\Support\ServiceProvider;
use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\Events\JobProcessing;
use Illuminate\Queue\Events\JobFailed;
class TidewaysProvider extends ServiceProvider
{
private $sampleRate = 10;
private $service = 'worker';
public function boot()
{
if (!class_exists('Tideways\Profiler')) {
return;
}
Queue::before(function (JobProcessing $event) {
// Assumption: API Key is set via php.ini or environment variable
// Set 'api_key' option otherwise
Profiler::start(array(
'sample_rate' => $this->sampleRate
));
Profiler::setServiceName($this->service);
Profiler::setTransactionName($event->job->resolveName());
});
Queue::after(function (JobProcessed $event) {
Profiler::stop();
});
Queue::failing(function (JobFailed $event) {
Profiler::logException($event->exception);
});
}
public function register()
{
}
}
The API Key must be set via php.ini or environment variable if not provided to Profiler::start .
|
Register the TidewaysProvider
in config/app.php
file by adding it to the providers
key in the array:
<?php
'providers' => [
// Other Service Providers
App\Providers\TidewaysProvider::class,
],
Still need help?
Email [email protected]