PHP code example of iazaran / trace-replay

1. Go to this page and download the library: Download iazaran/trace-replay 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/ */

    

iazaran / trace-replay example snippets


protected $middlewareGroups = [
    'web' => [
        // ...
        \TraceReplay\Http\Middleware\TraceMiddleware::class,
    ],
];

->withMiddleware(function (Middleware $middleware) {
    $middleware->append(\TraceReplay\Http\Middleware\TraceMiddleware::class);
})

return [
    'enabled' => env('TRACE_REPLAY_ENABLED', true),

    // 0.1 = trace 10% of requests/jobs/commands
    'sample_rate' => env('TRACE_REPLAY_SAMPLE_RATE', 1.0),

    // Disable on low-cost production servers if query-log overhead is too high
    'track_db_queries' => env('TRACE_REPLAY_TRACK_DB', true),

    // Truncate captured JSON fields after 64 KB by default
    'max_payload_size' => env('TRACE_REPLAY_MAX_PAYLOAD_SIZE', 65536),

    // Automatically mask these keys in payloads, headers, and URL query strings
    'mask_fields' => ['password', 'token', 'api_key', 'authorization', 'cookie', 'secret'],

    // Query bindings can contain PII; keep disabled in production unless needed
    'track_db_query_bindings' => env('TRACE_REPLAY_TRACK_DB_BINDINGS', false),

    // Dashboard security: add a Gate for tighter production access
    'middleware' => ['web', 'auth'],
    'route_prefix' => env('TRACE_REPLAY_ROUTE_PREFIX', 'trace-replay'),

    // Replay safety: mutating methods are blocked and override hosts are restricted
    'replay' => [
        'allow_mutating_methods' => env('TRACE_REPLAY_REPLAY_MUTATING', false),
        'allowed_hosts' => array_filter(explode(',', env('TRACE_REPLAY_REPLAY_ALLOWED_HOSTS', ''))),
    ],

    // Agent/MCP API is disabled until this token is set
    'api' => [
        'token' => env('TRACE_REPLAY_API_TOKEN'),
        'middleware' => ['api'],
        'route_prefix' => env('TRACE_REPLAY_API_ROUTE_PREFIX', 'api/trace-replay'),
        'max_steps' => env('TRACE_REPLAY_API_MAX_STEPS', 500),
    ],

    // AI Troubleshooting (Drivers: openai, anthropic, ollama)
    'ai' => [
        'driver' => env('TRACE_REPLAY_AI_DRIVER', 'openai'),
        'api_key' => env('TRACE_REPLAY_AI_KEY'),
        'model' => env('TRACE_REPLAY_AI_MODEL', 'gpt-4o'),
        'base_url' => env('TRACE_REPLAY_AI_BASE_URL'),
    ],

    // Async batch persistence via queue (Reduces overhead)
    'queue' => [
        'enabled' => env('TRACE_REPLAY_QUEUE_ENABLED', false),
    ],

    // Auto-tracing
    'auto_trace' => [
        'jobs'     => true,
        'commands' => false,
        'livewire' => true,
        'capture_job_payload' => false,
    ],
];

use TraceReplay\Facades\TraceReplay;

class BookingService
{
    public function handleBooking(array $payload): void
    {
        TraceReplay::start('Flight Booking', ['channel' => 'web']);

        try {
            $inventory = TraceReplay::step('Validate Inventory', function () use ($payload) {
                return Inventory::check($payload['flight_id']);
            });

            TraceReplay::checkpoint('Inventory validated', ['seats_left' => $inventory->seats]);

            TraceReplay::context(['user_tier' => auth()->user()->tier]);

            TraceReplay::step('Charge Credit Card', function () use ($payload) {
                return PaymentGateway::charge($payload['amount']);
            });

            TraceReplay::end('success');

        } catch (\Exception $e) {
            TraceReplay::end('error');
            throw $e;
        }
    }
}

use TraceReplay\Facades\TraceReplay;

public function test_booking_records_steps()
{
    $fake = TraceReplay::fake();

    $this->post('/book', ['flight_id' => 123]);

    $fake->assertTraceStarted('Flight Booking');
    $fake->assertStepRecorded('Validate Inventory');
    $fake->assertStepRecorded('Charge Credit Card');
    $fake->assertCheckpointRecorded('Inventory validated');
    $fake->assertTraceEnded('success');
    $fake->assertTraceCount(1);
}

'middleware' => ['web', 'auth', 'can:view-trace-replay'],

// app/Providers/AuthServiceProvider.php
Gate::define('view-trace-replay', function ($user) {
    return in_array($user->email, config('trace-replay.admin_emails', []));
});

// app/Console/Kernel.php
$schedule->command('trace-replay:prune --days=30')->daily();
bash
php artisan trace-replay:install
php artisan migrate
bash
php artisan vendor:publish --tag=trace-replay-config
bash
php artisan migrate
bash
php artisan vendor:publish --tag=trace-replay-views
bash
php artisan trace-replay:doctor
bash
php artisan trace-replay:export {id} --format=json
php artisan trace-replay:export {id} --format=csv
php artisan trace-replay:export {id} --format=json --output=/tmp/trace.json
php artisan trace-replay:export --status=error --format=json  # Export all error traces