Weave Code
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

Kernel Laravel Package

app-dev-panel/kernel

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require app-dev-panel/kernel
    

    Add to config/app.php under providers:

    AppDevPanel\Kernel\KernelServiceProvider::class,
    
  2. First Use Case: Debugging a Request Enable the kernel in AppServiceProvider:

    public function boot()
    {
        if (app()->environment('local')) {
            \AppDevPanel\Kernel\Facades\Kernel::enable();
        }
    }
    
    • Trigger Debugging: Visit any route or throw an exception.
    • View Output: Check the panel UI (auto-generated at /app-dev-panel or configured path).
  3. Key Files to Explore

    • config/app-dev-panel.php (core configuration)
    • app/Providers/AppDevPanelServiceProvider.php (if extended)
    • resources/views/vendor/app-dev-panel/ (customization hooks)

Implementation Patterns

1. Debugger Lifecycle Integration

  • Hook into Events: Use Kernel::onRequest() or Kernel::onException() to inject custom data:
    Kernel::onRequest(function ($request) {
        Kernel::collect('custom_data', ['user_id' => auth()->id()]);
    });
    
  • Conditional Debugging: Disable in production via environment checks:
    if (app()->environment(['local', 'staging'])) {
        Kernel::enable();
    }
    

2. Collectors for Data Aggregation

  • Built-in Collectors:
    • Kernel::collect('request') → Full request data.
    • Kernel::collect('response') → Response headers/status.
    • Kernel::collect('database') → Query logs (if DB::enableQueryLog() is set).
  • Custom Collectors:
    Kernel::collect('custom_metric', fn() => [
        'memory_usage' => memory_get_usage(true),
        'peak_memory' => memory_get_peak_usage(true),
    ]);
    
  • Storage Backends: Configure in config/app-dev-panel.php:
    'storage' => [
        'driver' => 'file', // or 'database', 'redis'
        'path' => storage_path('app-dev-panel'),
    ],
    

3. PSR Proxy System (Read-Only)

  • Proxy HTTP Requests:
    $proxy = Kernel::proxy('https://api.example.com/data');
    $response = $proxy->get();
    Kernel::collect('proxy_response', $response->getBody());
    
  • Use Case: Debug external API calls without modifying existing code.

4. Storage and Retention

  • Auto-Purge: Configure retention in config/app-dev-panel.php:
    'retention' => [
        'days' => 7, // Keep data for 7 days
        'max_entries' => 1000, // Limit total entries
    ],
    
  • Manual Clearing:
    php artisan app-dev-panel:clear
    

5. Integration with Laravel Ecosystem

  • Queue Jobs:
    Kernel::onJobProcessed(function ($job, $result) {
        Kernel::collect('job_result', [
            'job' => get_class($job),
            'status' => $result->status(),
        ]);
    });
    
  • Events:
    Event::listen(function ($event) {
        Kernel::collect('event', [
            'name' => $event::class,
            'payload' => $event->toArray(),
        ]);
    });
    

Gotchas and Tips

Pitfalls

  1. Performance Overhead

    • Issue: Collectors can slow down requests if overused.
    • Fix: Disable in production and use selectively:
      if (app()->environment('local')) {
          Kernel::collect('slow_query', fn() => DB::getQueryLog());
      }
      
  2. Storage Permissions

    • Issue: File storage fails if storage_path('app-dev-panel') lacks write permissions.
    • Fix: Run:
      chmod -R 775 storage/app-dev-panel
      
  3. Database Storage Quirks

    • Issue: Large debug data may bloat the database.
    • Fix: Use redis driver for temporary storage or limit retention:
      'retention' => ['days' => 1],
      
  4. Proxy System Limitations

    • Issue: PSR proxy only supports GET/POST by default.
    • Fix: Extend the proxy class or use Guzzle directly:
      $client = Kernel::proxy('https://api.example.com')->withOptions([
          'timeout' => 10,
      ]);
      

Debugging Tips

  1. Disable All Collectors Temporarily

    Kernel::disableCollectors();
    

    Re-enable specific ones:

    Kernel::enableCollectors(['request', 'response']);
    
  2. Log Kernel Events Add to AppServiceProvider:

    Kernel::onEvent(function ($event) {
        Log::debug('Kernel event:', ['event' => $event]);
    });
    
  3. Custom UI Overrides Override panel views in resources/views/vendor/app-dev-panel/:

    cp vendor/app-dev-panel/kernel/resources/views/vendor/app-dev-panel/* resources/views/vendor/app-dev-panel/
    

Extension Points

  1. Create a Custom Collector

    Kernel::extendCollector('cache_stats', function () {
        return [
            'hits' => Cache::stats()['hits'] ?? 0,
            'misses' => Cache::stats()['misses'] ?? 0,
        ];
    });
    
  2. Modify Storage Driver Publish config and extend:

    php artisan vendor:publish --provider="AppDevPanel\Kernel\KernelServiceProvider" --tag="config"
    

    Then override App\Providers\AppDevPanelServiceProvider::boot() to bind a custom storage handler.

  3. Hook into Debugger UI Use Kernel::addPanelTab() to inject custom tabs:

    Kernel::addPanelTab('custom_tab', function () {
        return view('app-dev-panel::custom-tab', [
            'data' => Kernel::getCollected('custom_data'),
        ]);
    });
    
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.
testo/facade
headercat/phpstan-extension-ide-helper
yosymfony/parser-utils
innmind/black-box
babenkoivan/elastic-migrations
babenkoivan/elastic-adapter
sandermuller/package-boost-php
sandermuller/boost-core
depa/sulu-google-reviews-bundle
croct/plug-symfony
develia/commons
dmstr/symfony-system-resources-bundle
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
renatomarinho/laravel-page-speed
develia/geo-bundle
austinheap/laravel-database-encryption
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle