1. Go to this page and download the library: Download perfbase/laravel library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Perfbase\SDK\FeatureFlags;
// In config/perfbase.php
'flags' => FeatureFlags::DefaultFlags, // Recommended for most apps
'flags' => FeatureFlags::AllFlags, // All available features
'flags' => FeatureFlags::TrackCpuTime | FeatureFlags::TrackPdo, // Custom combination
use Perfbase\Laravel\Facades\Perfbase;
// Start a custom span
Perfbase::startTraceSpan('custom-operation', [
'operation_type' => 'data_processing',
'record_count' => '1000'
]);
// Add attributes during execution
Perfbase::setAttribute('processing_method', 'batch');
Perfbase::setAttribute('memory_usage', memory_get_usage());
try {
// Your custom logic here
processLargeDataset();
Perfbase::setAttribute('status', 'success');
} catch (Exception $e) {
Perfbase::setAttribute('status', 'error');
Perfbase::setAttribute('error_message', $e->getMessage());
} finally {
// Always stop the span
Perfbase::stopTraceSpan('custom-operation');
}
// Submit the trace data
Perfbase::submitTrace();
use Perfbase\SDK\Perfbase;
class DataProcessingService
{
public function __construct(private Perfbase $perfbase)
{
}
public function processData(array $data): array
{
$this->perfbase->startTraceSpan('data-processing', [
'record_count' => count($data),
'data_type' => 'user_records'
]);
$result = $this->performProcessing($data);
$this->perfbase->setAttribute('processed_count', count($result));
$this->perfbase->stopTraceSpan('data-processing');
return $result;
}
}
use Perfbase\Laravel\Interfaces\ProfiledUser;
class User extends Authenticatable implements ProfiledUser
{
public function shouldBeProfiled(): bool
{
// Profile admin users or users in beta testing
return $this->isAdmin() || $this->isBetaTester();
}
}
// The package won't break your app if Perfbase is unavailable
try {
Perfbase::startTraceSpan('critical-operation');
// Your code here
} catch (\Perfbase\SDK\Exception\PerfbaseExtensionException $e) {
// Extension not available - log but continue
Log::warning('Perfbase extension not available: ' . $e->getMessage());
}
// Disable Perfbase in tests
// phpunit.xml
<env name="PERFBASE_ENABLED" value="false"/>
// Or mock the facade in tests
public function test_something()
{
Perfbase::shouldReceive('startTraceSpan')->once();
Perfbase::shouldReceive('stopTraceSpan')->once();
// Your test code
}
class ProcessEmailCampaignJob implements ShouldQueue
{
public function handle()
{
// Automatic profiling happens via queue listener
// But you can add custom spans for detailed tracking
Perfbase::startTraceSpan('email-template-render');
$template = $this->renderTemplate();
Perfbase::stopTraceSpan('email-template-render');
Perfbase::startTraceSpan('email-send-batch');
$this->sendEmails($template);
Perfbase::stopTraceSpan('email-send-batch');
}
}