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

Laravel Route Statistics Laravel Package

bilfeldt/laravel-route-statistics

Logs Laravel route usage statistics by recording and aggregating requests/responses per route, user, and timeframe (hour/day/month) to minimize database storage. Helps spot heavy users, high-traffic endpoints, and suspicious unauthenticated activity.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require bilfeldt/laravel-route-statistics
    php artisan vendor:publish --provider="Bilfeldt\LaravelRouteStatistics\LaravelRouteStatisticsServiceProvider" --tag="migrations"
    php artisan migrate
    
  2. Enable Logging: Add the middleware globally in bootstrap/app.php:

    $middleware->prepend(\Bilfeldt\LaravelRouteStatistics\Http\Middleware\RouteStatisticsMiddleware::class);
    
  3. First Use Case: Immediately start analyzing route usage via Artisan:

    php artisan route:stats
    

Implementation Patterns

Core Workflows

  1. Selective Logging:

    • Use middleware on specific routes:
      Route::middleware(['routestatistics'])->group(function () {
          Route::get('/admin', 'AdminController@index');
      });
      
    • Conditional logging in controllers:
      $request->routeStatistics(); // Enable for specific requests
      
  2. Contextual Data: Attach metadata (e.g., team IDs) via middleware:

    public function handle($request, Closure $next) {
        $request->routeStatisticsContext(['team_id' => auth()->user()->team_id]);
        return $next($request);
    }
    
  3. Aggregation: Configure aggregation in config/routestatistics.php:

    'aggregation' => [
        'enabled' => true,
        'period' => 'hour', // 'minute', 'hour', 'day', 'month'
    ],
    
  4. Querying Data: Use model scopes for filtered stats:

    RouteStatistics::whereApi()->where('route', 'api.posts.store')->get();
    

Integration Tips

  • Queue Logging: Enable in config to offload DB writes:
    'queue' => [
        'enabled' => true,
        'connection' => 'database',
    ],
    
  • Custom Models: Extend RouteStatistics for domain-specific needs:
    class CustomRouteStatistic extends RouteStatistics {
        public function user() {
            return $this->belongsTo(User::class, 'user_id');
        }
    }
    

Gotchas and Tips

Pitfalls

  1. Performance:

    • Avoid global logging on high-traffic routes. Use middleware selectively.
    • Monitor DB growth with php artisan route:unused to purge stale routes.
  2. Aggregation Quirks:

    • Ensure date field is castable to Carbon (default in v4+).
    • Microseconds are zeroed during aggregation—verify timestamps in queries.
  3. Middleware Order: Place RouteStatisticsMiddleware before auth middleware to capture unauthenticated requests.

Debugging

  • Missing Logs: Check if middleware is registered or if the request macro is called.
    php artisan route:list --middleware=routestatistics
    
  • Context Data: Verify routeStatisticsContext() is called before the request completes.

Extension Points

  1. Custom Fields: Extend the RouteStatistics model and update the factory:
    class RouteStatistics extends Model {
        protected $casts = [
            'custom_field' => 'array',
        ];
    }
    
  2. Aggregation Logic: Override the aggregate() method in the model for custom rules.
  3. Artisan Commands: Extend RouteStatisticsCommand for domain-specific stats:
    class CustomStatsCommand extends RouteStatisticsCommand {
        protected function getRoutes() {
            return Route::getRoutes()->getByName('admin.*');
        }
    }
    
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.
directorytree/privacy-filter-classifier
directorytree/privacy-filter
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin
splash/metadata
splash/openapi
splash/scopes
splash/toolkit
testo/output-teamcity
testo/bridge-symfony
spatie/flare-daemon-runtime