From 618c6e717523c6a7e55552b71252b7372c728479 Mon Sep 17 00:00:00 2001 From: Sven Rymenants Date: Wed, 19 Jun 2024 19:41:35 +0200 Subject: [PATCH 01/12] Add migration, support for parameters, add truncate command --- .gitignore | 1 + config/route-statistics.php | 10 ++++ database/factories/RouteStatisticFactory.php | 1 + ...ameters_to_route_statistics_table.php.stub | 22 +++++++++ src/Commands/LaravelRouteTruncateCommand.php | 28 +++++++++++ src/LaravelRouteStatisticsServiceProvider.php | 3 ++ src/Models/RouteStatistic.php | 1 + tests/TestCase.php | 14 +++++- tests/Unit/RouteStatisticModelTest.php | 49 +++++++++++++++++++ 9 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 database/migrations/add_parameters_to_route_statistics_table.php.stub create mode 100644 src/Commands/LaravelRouteTruncateCommand.php diff --git a/.gitignore b/.gitignore index 0ba21f1..21dabd5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ .php_cs .php_cs.cache .phpunit.result.cache +.phpunit.cache build composer.lock coverage diff --git a/config/route-statistics.php b/config/route-statistics.php index 6c7d5d3..b03b860 100644 --- a/config/route-statistics.php +++ b/config/route-statistics.php @@ -12,6 +12,16 @@ */ 'enabled' => env('ROUTE_STATISTICS_ENABLED', true), + /* + |-------------------------------------------------------------------------- + | Store parameters + |-------------------------------------------------------------------------- + | + | If this setting is set to true the route parameters will also be logged. + | + */ + 'store_parameters' => env('ROUTE_STORE_PARAMETERS', false), + /* |-------------------------------------------------------------------------- | Aggregation diff --git a/database/factories/RouteStatisticFactory.php b/database/factories/RouteStatisticFactory.php index e64e413..68c54f0 100644 --- a/database/factories/RouteStatisticFactory.php +++ b/database/factories/RouteStatisticFactory.php @@ -15,6 +15,7 @@ public function definition() 'method' => $this->faker->randomElement(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']), 'route' => $this->faker->domainWord().'.'.$this->faker->randomElement(['index', 'create', 'store', 'show', 'edit', 'update', 'destroy']), 'status' => $this->faker->randomElement([200, 201, 202, 204, 300, 301, 302, 303, 304, 400, 401, 402, 403, 404, 405, 406, 422, 429, 500, 501, 502, 503, 504]), + 'parameters' => $this->faker->json(), 'ip' => $this->faker->ipv4(), 'date' => $this->faker->dateTime(), 'counter' => $this->faker->randomNumber(4), diff --git a/database/migrations/add_parameters_to_route_statistics_table.php.stub b/database/migrations/add_parameters_to_route_statistics_table.php.stub new file mode 100644 index 0000000..5879ad9 --- /dev/null +++ b/database/migrations/add_parameters_to_route_statistics_table.php.stub @@ -0,0 +1,22 @@ +json('parameters')->after('route')->nullable(); + }); + } + + public function down() + { + Schema::table('route_statistics', function (Blueprint $table) { + $table->dropColumn('parameters'); + }); + } +}; diff --git a/src/Commands/LaravelRouteTruncateCommand.php b/src/Commands/LaravelRouteTruncateCommand.php new file mode 100644 index 0000000..6f180f5 --- /dev/null +++ b/src/Commands/LaravelRouteTruncateCommand.php @@ -0,0 +1,28 @@ +components->error('Failed to truncate route usage statistics: '.$ex->getMessage()); + } + + $this->components->info('Route usage statistics truncated'); + + return Command::SUCCESS; + } +} diff --git a/src/LaravelRouteStatisticsServiceProvider.php b/src/LaravelRouteStatisticsServiceProvider.php index e74dc1f..353c3c4 100644 --- a/src/LaravelRouteStatisticsServiceProvider.php +++ b/src/LaravelRouteStatisticsServiceProvider.php @@ -2,6 +2,7 @@ namespace Bilfeldt\LaravelRouteStatistics; +use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteTruncateCommand; use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteStatisticsCommand; use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteUnusedCommand; use Bilfeldt\LaravelRouteStatistics\Http\Middleware\RouteStatisticsMiddleware; @@ -60,6 +61,7 @@ private function publishMigrations() { $this->publishes([ __DIR__.'/../database/migrations/create_route_statistics_table.php.stub' => database_path('migrations/'.date('Y_m_d_His', time()).'_create_route_statistics_table.php'), + __DIR__.'/../database/migrations/add_parameters_to_route_statistics_table.php.stub' => database_path('migrations/'.date('Y_m_d_His', time()).'_add_parameters_to_route_statistics_table.php'), // you can add any number of migrations here ], 'migrations'); } @@ -69,6 +71,7 @@ private function bootCommands() if ($this->app->runningInConsole()) { $this->commands([ LaravelRouteStatisticsCommand::class, + LaravelRouteTruncateCommand::class, LaravelRouteUnusedCommand::class, ]); } diff --git a/src/Models/RouteStatistic.php b/src/Models/RouteStatistic.php index 632bc05..3c949ae 100644 --- a/src/Models/RouteStatistic.php +++ b/src/Models/RouteStatistic.php @@ -85,6 +85,7 @@ public function getLogAttributes(Request $request, $response, ?int $time = null, 'team_id' => $this->getRequestTeam($request)?->getKey(), 'method' => $request->getMethod(), 'route' => $request->route()?->getName() ?? $request->route()?->uri(), + 'parameters' => config('route-statistics.store_parameters') ? json_encode($request->route()->originalParameters()) : null, 'status' => $response->getStatusCode(), 'ip' => $request->ip(), 'date' => $this->getDate(), diff --git a/tests/TestCase.php b/tests/TestCase.php index cd04265..317fb39 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -35,7 +35,17 @@ public function getEnvironmentSetUp($app) 'prefix' => '', ]); - $migration = include __DIR__.'/../database/migrations/create_route_statistics_table.php.stub'; - $migration->up(); + $this->runMigrations([ + 'create_route_statistics_table', + 'add_parameters_to_route_statistics_table', + ]); + } + + private function runMigrations(array $fileNames): void + { + foreach ($fileNames as $fileName) { + $class = require __DIR__.'/../database/migrations/'.$fileName.'.php.stub'; + ($class)->up(); + } } } diff --git a/tests/Unit/RouteStatisticModelTest.php b/tests/Unit/RouteStatisticModelTest.php index 2af737b..de53512 100644 --- a/tests/Unit/RouteStatisticModelTest.php +++ b/tests/Unit/RouteStatisticModelTest.php @@ -5,6 +5,7 @@ use Bilfeldt\LaravelRouteStatistics\Jobs\CreateLog; use Bilfeldt\LaravelRouteStatistics\Models\RouteStatistic; use Bilfeldt\LaravelRouteStatistics\Tests\TestCase; +use Illuminate\Routing\Route; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Queue; @@ -46,4 +47,52 @@ public function test_get_log_attributes(): void { $this->markTestIncomplete('Mock the request and response to ensture the correct attributes are returned'); } + + public function test_logs_parameters_if_config_enabled(): void + { + Config::set('route-statistics.store_parameters', true); + + $route = 'home'; + $params = [ + 'param1' => 'one', + 'param2' => 'two', + ]; + $request = \Illuminate\Http\Request::create($route.'/'.join('/', $this->get_route_parameters($params)), 'GET'); + $this->app['router']->get($route.'/'.join('/', $this->get_route_keys($params)), fn () => 'Test route response'); + $response = $this->app['router']->dispatch($request); + + (new RouteStatistic)->log($request, $response, 1, 2); + + $log = RouteStatistic::first(); + $this->assertEquals(json_encode($params), $log->parameters); + } + + public function test_logs_parameters_if_config_disabled(): void + { + Config::set('route-statistics.store_parameters', false); + + $route = 'home'; + $params = [ + 'param1' => 'one', + 'param2' => 'two', + ]; + $request = \Illuminate\Http\Request::create($route.'/'.join('/', $this->get_route_parameters($params)), 'GET'); + $this->app['router']->get($route.'/'.join('/', $this->get_route_keys($params)), fn () => 'Test route response'); + $response = $this->app['router']->dispatch($request); + + (new RouteStatistic)->log($request, $response, 1, 2); + + $log = RouteStatistic::first(); + $this->assertNull($log->parameters); + } + + private function get_route_parameters(array $parameters): array + { + return array_values($parameters); + } + + private function get_route_keys(array $parameters): array + { + return array_map(fn($parameter) => '{'.$parameter.'}', array_keys($parameters)); + } } From dbb4fa64be7065c60ac313040ba7bfaa957976e3 Mon Sep 17 00:00:00 2001 From: Sven Rymenants Date: Wed, 19 Jun 2024 19:44:52 +0200 Subject: [PATCH 02/12] Fix styling errors --- src/Commands/LaravelRouteTruncateCommand.php | 4 +--- src/Http/Middleware/RouteStatisticsMiddleware.php | 1 - src/LaravelRouteStatisticsServiceProvider.php | 2 +- tests/TestCase.php | 2 +- tests/Unit/RouteStatisticModelTest.php | 11 +++++------ 5 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/Commands/LaravelRouteTruncateCommand.php b/src/Commands/LaravelRouteTruncateCommand.php index 6f180f5..e75b871 100644 --- a/src/Commands/LaravelRouteTruncateCommand.php +++ b/src/Commands/LaravelRouteTruncateCommand.php @@ -2,7 +2,6 @@ namespace Bilfeldt\LaravelRouteStatistics\Commands; -use Exception; use Illuminate\Console\Command; use TypeError; @@ -16,8 +15,7 @@ public function handle(): int { try { call_user_func_array([config('route-statistics.model'), 'truncate'], []); - } - catch(TypeError $ex) { + } catch (TypeError $ex) { $this->components->error('Failed to truncate route usage statistics: '.$ex->getMessage()); } diff --git a/src/Http/Middleware/RouteStatisticsMiddleware.php b/src/Http/Middleware/RouteStatisticsMiddleware.php index 63101a7..8aed5fd 100644 --- a/src/Http/Middleware/RouteStatisticsMiddleware.php +++ b/src/Http/Middleware/RouteStatisticsMiddleware.php @@ -12,7 +12,6 @@ class RouteStatisticsMiddleware * Handle an incoming request. * * @param \Illuminate\Http\Request $request - * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) diff --git a/src/LaravelRouteStatisticsServiceProvider.php b/src/LaravelRouteStatisticsServiceProvider.php index 353c3c4..c4d46b3 100644 --- a/src/LaravelRouteStatisticsServiceProvider.php +++ b/src/LaravelRouteStatisticsServiceProvider.php @@ -2,8 +2,8 @@ namespace Bilfeldt\LaravelRouteStatistics; -use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteTruncateCommand; use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteStatisticsCommand; +use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteTruncateCommand; use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteUnusedCommand; use Bilfeldt\LaravelRouteStatistics\Http\Middleware\RouteStatisticsMiddleware; use Bilfeldt\RequestLogger\RequestLoggerFacade; diff --git a/tests/TestCase.php b/tests/TestCase.php index 317fb39..593fb1f 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -45,7 +45,7 @@ private function runMigrations(array $fileNames): void { foreach ($fileNames as $fileName) { $class = require __DIR__.'/../database/migrations/'.$fileName.'.php.stub'; - ($class)->up(); + $class->up(); } } } diff --git a/tests/Unit/RouteStatisticModelTest.php b/tests/Unit/RouteStatisticModelTest.php index de53512..221a830 100644 --- a/tests/Unit/RouteStatisticModelTest.php +++ b/tests/Unit/RouteStatisticModelTest.php @@ -5,7 +5,6 @@ use Bilfeldt\LaravelRouteStatistics\Jobs\CreateLog; use Bilfeldt\LaravelRouteStatistics\Models\RouteStatistic; use Bilfeldt\LaravelRouteStatistics\Tests\TestCase; -use Illuminate\Routing\Route; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\Queue; @@ -57,8 +56,8 @@ public function test_logs_parameters_if_config_enabled(): void 'param1' => 'one', 'param2' => 'two', ]; - $request = \Illuminate\Http\Request::create($route.'/'.join('/', $this->get_route_parameters($params)), 'GET'); - $this->app['router']->get($route.'/'.join('/', $this->get_route_keys($params)), fn () => 'Test route response'); + $request = \Illuminate\Http\Request::create($route.'/'.implode('/', $this->get_route_parameters($params)), 'GET'); + $this->app['router']->get($route.'/'.implode('/', $this->get_route_keys($params)), fn () => 'Test route response'); $response = $this->app['router']->dispatch($request); (new RouteStatistic)->log($request, $response, 1, 2); @@ -76,8 +75,8 @@ public function test_logs_parameters_if_config_disabled(): void 'param1' => 'one', 'param2' => 'two', ]; - $request = \Illuminate\Http\Request::create($route.'/'.join('/', $this->get_route_parameters($params)), 'GET'); - $this->app['router']->get($route.'/'.join('/', $this->get_route_keys($params)), fn () => 'Test route response'); + $request = \Illuminate\Http\Request::create($route.'/'.implode('/', $this->get_route_parameters($params)), 'GET'); + $this->app['router']->get($route.'/'.implode('/', $this->get_route_keys($params)), fn () => 'Test route response'); $response = $this->app['router']->dispatch($request); (new RouteStatistic)->log($request, $response, 1, 2); @@ -93,6 +92,6 @@ private function get_route_parameters(array $parameters): array private function get_route_keys(array $parameters): array { - return array_map(fn($parameter) => '{'.$parameter.'}', array_keys($parameters)); + return array_map(fn ($parameter) => '{'.$parameter.'}', array_keys($parameters)); } } From b63659123dc0d67817009b8c51a39d26e3f8e51e Mon Sep 17 00:00:00 2001 From: Sven Rymenants Date: Wed, 19 Jun 2024 19:46:49 +0200 Subject: [PATCH 03/12] Add parameters to README file --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5e2ca41..c3d6d12 100644 --- a/README.md +++ b/README.md @@ -147,6 +147,7 @@ This package works as follows: - `team_id`: The team id associated with the request (if available) - `method`: The HTTP method (`GET/POST/...`) - `route`: The route name (if available) or the route URI (eg `/posts/{post}`) + - `parameters`: The route parameters passed (if enabled else `null`) - `status`: The HTTP status (eg `202`) - `ip`: The request ip - `date`: The date of the request as datetime (can be aggregated) From 488695888255d8b6a809dc682d2c98d4e6e77714 Mon Sep 17 00:00:00 2001 From: Sven Rymenants Date: Fri, 21 Jun 2024 11:17:46 +0200 Subject: [PATCH 04/12] Fix missing parameters entry in console stats command --- src/Commands/LaravelRouteStatisticsCommand.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Commands/LaravelRouteStatisticsCommand.php b/src/Commands/LaravelRouteStatisticsCommand.php index c3738ff..548f64d 100644 --- a/src/Commands/LaravelRouteStatisticsCommand.php +++ b/src/Commands/LaravelRouteStatisticsCommand.php @@ -29,11 +29,14 @@ class LaravelRouteStatisticsCommand extends Command public function handle() { $query = $this->getQuery(); + $fields = $this->getFields(); if ($this->option('group')) { $query->select($this->option('group')) ->addSelect(DB::raw('MAX(date) as last_used')) ->addSelect(DB::raw('SUM(counter) as counter')); + } else { + $query->select($fields); } $this->applyFilters($query); @@ -43,7 +46,7 @@ public function handle() $results = $query->limit($this->option('limit'))->get(); $this->table( - $this->getFields(), + $fields, $results->toArray() ); @@ -111,16 +114,17 @@ protected function getFields(): array return array_merge($this->option('group'), ['last_used', 'counter']); } - return [ + return array_filter([ 'id', 'user_id', 'team_id', 'method', 'route', 'status', + config('route-statistics.store_parameters') === true ? 'parameters' : null, 'ip', 'date', 'counter', - ]; + ]); } } From bf93e209d2c737e98d4a0b3286f76ce1f45b65e5 Mon Sep 17 00:00:00 2001 From: Sven Rymenants Date: Sat, 22 Jun 2024 00:49:06 +0200 Subject: [PATCH 05/12] Return phpdoc comment, use array casting, select columns by function --- .../LaravelRouteStatisticsCommand.php | 25 +++++++++++++++---- .../Middleware/RouteStatisticsMiddleware.php | 1 + src/Models/RouteStatistic.php | 1 + 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/Commands/LaravelRouteStatisticsCommand.php b/src/Commands/LaravelRouteStatisticsCommand.php index 548f64d..5913e53 100644 --- a/src/Commands/LaravelRouteStatisticsCommand.php +++ b/src/Commands/LaravelRouteStatisticsCommand.php @@ -2,6 +2,7 @@ namespace Bilfeldt\LaravelRouteStatistics\Commands; +use Bilfeldt\LaravelRouteStatistics\Models\RouteStatistic; use Illuminate\Console\Command; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Facades\DB; @@ -29,25 +30,34 @@ class LaravelRouteStatisticsCommand extends Command public function handle() { $query = $this->getQuery(); - $fields = $this->getFields(); if ($this->option('group')) { $query->select($this->option('group')) ->addSelect(DB::raw('MAX(date) as last_used')) ->addSelect(DB::raw('SUM(counter) as counter')); } else { - $query->select($fields); + $query->select($this->getColumns()); } $this->applyFilters($query); $this->applyGrouping($query); $this->applySorting($query); - $results = $query->limit($this->option('limit'))->get(); + $results = $query + ->limit($this->option('limit')) + ->get() + ->map(function (RouteStatistic $item) { + $data = $item->toArray(); + if (array_key_exists('parameters', $data)) { + $data['parameters'] = json_encode($data['parameters']); + } + + return $data; + }); $this->table( - $fields, - $results->toArray() + $this->getFields(), + $results ); return Command::SUCCESS; @@ -114,6 +124,11 @@ protected function getFields(): array return array_merge($this->option('group'), ['last_used', 'counter']); } + return $this->getColumns(); + } + + protected function getColumns() + { return array_filter([ 'id', 'user_id', diff --git a/src/Http/Middleware/RouteStatisticsMiddleware.php b/src/Http/Middleware/RouteStatisticsMiddleware.php index 8aed5fd..63101a7 100644 --- a/src/Http/Middleware/RouteStatisticsMiddleware.php +++ b/src/Http/Middleware/RouteStatisticsMiddleware.php @@ -12,6 +12,7 @@ class RouteStatisticsMiddleware * Handle an incoming request. * * @param \Illuminate\Http\Request $request + * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) diff --git a/src/Models/RouteStatistic.php b/src/Models/RouteStatistic.php index 3c949ae..a594336 100644 --- a/src/Models/RouteStatistic.php +++ b/src/Models/RouteStatistic.php @@ -23,6 +23,7 @@ class RouteStatistic extends Model implements RequestLoggerInterface protected $casts = [ 'date' => 'datetime', + 'parameters' => 'array', ]; //====================================================================== From 8923ec679ab0a6ce6f5dc5440122e4f32248303a Mon Sep 17 00:00:00 2001 From: Sven Rymenants Date: Sat, 22 Jun 2024 09:49:31 +0200 Subject: [PATCH 06/12] Removed truncate command from PR --- src/Commands/LaravelRouteTruncateCommand.php | 26 -------------------- 1 file changed, 26 deletions(-) delete mode 100644 src/Commands/LaravelRouteTruncateCommand.php diff --git a/src/Commands/LaravelRouteTruncateCommand.php b/src/Commands/LaravelRouteTruncateCommand.php deleted file mode 100644 index e75b871..0000000 --- a/src/Commands/LaravelRouteTruncateCommand.php +++ /dev/null @@ -1,26 +0,0 @@ -components->error('Failed to truncate route usage statistics: '.$ex->getMessage()); - } - - $this->components->info('Route usage statistics truncated'); - - return Command::SUCCESS; - } -} From 7f8d608e31f97ee81233e52d2ec535ae5782b54b Mon Sep 17 00:00:00 2001 From: Sven Rymenants Date: Sat, 22 Jun 2024 22:41:37 +0200 Subject: [PATCH 07/12] Improve column remapping code for route:stats command --- .../LaravelRouteStatisticsCommand.php | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/Commands/LaravelRouteStatisticsCommand.php b/src/Commands/LaravelRouteStatisticsCommand.php index 5913e53..8ed59a9 100644 --- a/src/Commands/LaravelRouteStatisticsCommand.php +++ b/src/Commands/LaravelRouteStatisticsCommand.php @@ -35,28 +35,24 @@ public function handle() $query->select($this->option('group')) ->addSelect(DB::raw('MAX(date) as last_used')) ->addSelect(DB::raw('SUM(counter) as counter')); - } else { - $query->select($this->getColumns()); } $this->applyFilters($query); $this->applyGrouping($query); $this->applySorting($query); + $fields = $this->getFields(); + $results = $query ->limit($this->option('limit')) ->get() - ->map(function (RouteStatistic $item) { - $data = $item->toArray(); - if (array_key_exists('parameters', $data)) { - $data['parameters'] = json_encode($data['parameters']); - } - - return $data; - }); + ->map(fn (RouteStatistic $data): array => array_map( + fn (mixed $item): mixed => is_array($item) ? json_encode($item) : $item, + $data->only($fields) + )); $this->table( - $this->getFields(), + $fields, $results ); @@ -124,11 +120,6 @@ protected function getFields(): array return array_merge($this->option('group'), ['last_used', 'counter']); } - return $this->getColumns(); - } - - protected function getColumns() - { return array_filter([ 'id', 'user_id', From f78491b55f1ee66691a802ed53edbab0c07fbf88 Mon Sep 17 00:00:00 2001 From: Sven Rymenants Date: Sat, 22 Jun 2024 22:50:25 +0200 Subject: [PATCH 08/12] Removed LaravelRouteTruncateCommand from the service provider --- src/LaravelRouteStatisticsServiceProvider.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/LaravelRouteStatisticsServiceProvider.php b/src/LaravelRouteStatisticsServiceProvider.php index c4d46b3..5730063 100644 --- a/src/LaravelRouteStatisticsServiceProvider.php +++ b/src/LaravelRouteStatisticsServiceProvider.php @@ -3,7 +3,6 @@ namespace Bilfeldt\LaravelRouteStatistics; use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteStatisticsCommand; -use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteTruncateCommand; use Bilfeldt\LaravelRouteStatistics\Commands\LaravelRouteUnusedCommand; use Bilfeldt\LaravelRouteStatistics\Http\Middleware\RouteStatisticsMiddleware; use Bilfeldt\RequestLogger\RequestLoggerFacade; @@ -71,7 +70,6 @@ private function bootCommands() if ($this->app->runningInConsole()) { $this->commands([ LaravelRouteStatisticsCommand::class, - LaravelRouteTruncateCommand::class, LaravelRouteUnusedCommand::class, ]); } From c1521ad486f33fb088b99cb37a6f6199f54c524d Mon Sep 17 00:00:00 2001 From: Anders Bilfeldt Date: Fri, 5 Jul 2024 14:49:06 +0200 Subject: [PATCH 09/12] Add a protected function --- src/Commands/LaravelRouteStatisticsCommand.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Commands/LaravelRouteStatisticsCommand.php b/src/Commands/LaravelRouteStatisticsCommand.php index 8ed59a9..3379e65 100644 --- a/src/Commands/LaravelRouteStatisticsCommand.php +++ b/src/Commands/LaravelRouteStatisticsCommand.php @@ -46,10 +46,7 @@ public function handle() $results = $query ->limit($this->option('limit')) ->get() - ->map(fn (RouteStatistic $data): array => array_map( - fn (mixed $item): mixed => is_array($item) ? json_encode($item) : $item, - $data->only($fields) - )); + ->map(fn (RouteStatistic $model): array => $this->toTableRow($model, $fields)); $this->table( $fields, @@ -133,4 +130,17 @@ protected function getFields(): array 'counter', ]); } + + /** + * @param RouteStatistic $model + * @param $fields array + * @return array + */ + protected function toTableRow(RouteStatistic $model, array $fields): array + { + return array_map( + fn (mixed $item): mixed => is_array($item) ? json_encode($item) : $item, + $model->only($fields) + ); + } } From 251f0fcc41229b972ca63a0f4e8838cca5270761 Mon Sep 17 00:00:00 2001 From: Anders Bilfeldt Date: Fri, 5 Jul 2024 14:49:33 +0200 Subject: [PATCH 10/12] Skip json encoding --- src/Models/RouteStatistic.php | 2 +- tests/Unit/RouteStatisticModelTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Models/RouteStatistic.php b/src/Models/RouteStatistic.php index a594336..605b2ca 100644 --- a/src/Models/RouteStatistic.php +++ b/src/Models/RouteStatistic.php @@ -86,7 +86,7 @@ public function getLogAttributes(Request $request, $response, ?int $time = null, 'team_id' => $this->getRequestTeam($request)?->getKey(), 'method' => $request->getMethod(), 'route' => $request->route()?->getName() ?? $request->route()?->uri(), - 'parameters' => config('route-statistics.store_parameters') ? json_encode($request->route()->originalParameters()) : null, + 'parameters' => config('route-statistics.store_parameters') ? $request->route()->originalParameters() : null, 'status' => $response->getStatusCode(), 'ip' => $request->ip(), 'date' => $this->getDate(), diff --git a/tests/Unit/RouteStatisticModelTest.php b/tests/Unit/RouteStatisticModelTest.php index 221a830..a157aee 100644 --- a/tests/Unit/RouteStatisticModelTest.php +++ b/tests/Unit/RouteStatisticModelTest.php @@ -63,7 +63,7 @@ public function test_logs_parameters_if_config_enabled(): void (new RouteStatistic)->log($request, $response, 1, 2); $log = RouteStatistic::first(); - $this->assertEquals(json_encode($params), $log->parameters); + $this->assertEquals($params, $log->parameters); } public function test_logs_parameters_if_config_disabled(): void From 6119ed8d3fe500ee2fed6b3d6f321eafb24b13d6 Mon Sep 17 00:00:00 2001 From: Anders Bilfeldt Date: Fri, 5 Jul 2024 14:51:02 +0200 Subject: [PATCH 11/12] Change config key --- config/route-statistics.php | 2 +- src/Commands/LaravelRouteStatisticsCommand.php | 2 +- src/Models/RouteStatistic.php | 2 +- tests/Unit/RouteStatisticModelTest.php | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/route-statistics.php b/config/route-statistics.php index b03b860..dc80025 100644 --- a/config/route-statistics.php +++ b/config/route-statistics.php @@ -20,7 +20,7 @@ | If this setting is set to true the route parameters will also be logged. | */ - 'store_parameters' => env('ROUTE_STORE_PARAMETERS', false), + 'store_route_parameters' => env('ROUTE_STATISTICS_STORE_ROUTE_PARAMETERS', false), /* |-------------------------------------------------------------------------- diff --git a/src/Commands/LaravelRouteStatisticsCommand.php b/src/Commands/LaravelRouteStatisticsCommand.php index 3379e65..be76d9e 100644 --- a/src/Commands/LaravelRouteStatisticsCommand.php +++ b/src/Commands/LaravelRouteStatisticsCommand.php @@ -124,7 +124,7 @@ protected function getFields(): array 'method', 'route', 'status', - config('route-statistics.store_parameters') === true ? 'parameters' : null, + config('route-statistics.store_route_parameters') === true ? 'parameters' : null, 'ip', 'date', 'counter', diff --git a/src/Models/RouteStatistic.php b/src/Models/RouteStatistic.php index 605b2ca..a2f7642 100644 --- a/src/Models/RouteStatistic.php +++ b/src/Models/RouteStatistic.php @@ -86,7 +86,7 @@ public function getLogAttributes(Request $request, $response, ?int $time = null, 'team_id' => $this->getRequestTeam($request)?->getKey(), 'method' => $request->getMethod(), 'route' => $request->route()?->getName() ?? $request->route()?->uri(), - 'parameters' => config('route-statistics.store_parameters') ? $request->route()->originalParameters() : null, + 'parameters' => config('route-statistics.store_route_parameters') ? $request->route()->originalParameters() : null, 'status' => $response->getStatusCode(), 'ip' => $request->ip(), 'date' => $this->getDate(), diff --git a/tests/Unit/RouteStatisticModelTest.php b/tests/Unit/RouteStatisticModelTest.php index a157aee..83bcd2a 100644 --- a/tests/Unit/RouteStatisticModelTest.php +++ b/tests/Unit/RouteStatisticModelTest.php @@ -49,7 +49,7 @@ public function test_get_log_attributes(): void public function test_logs_parameters_if_config_enabled(): void { - Config::set('route-statistics.store_parameters', true); + Config::set('route-statistics.store_route_parameters', true); $route = 'home'; $params = [ @@ -68,7 +68,7 @@ public function test_logs_parameters_if_config_enabled(): void public function test_logs_parameters_if_config_disabled(): void { - Config::set('route-statistics.store_parameters', false); + Config::set('route-statistics.store_route_parameters', false); $route = 'home'; $params = [ From fb5eec09f7a894733ae31f95820d6ebde8e75f97 Mon Sep 17 00:00:00 2001 From: Anders Bilfeldt Date: Fri, 5 Jul 2024 14:55:15 +0200 Subject: [PATCH 12/12] StyleCI --- src/Commands/LaravelRouteStatisticsCommand.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Commands/LaravelRouteStatisticsCommand.php b/src/Commands/LaravelRouteStatisticsCommand.php index be76d9e..43f13e4 100644 --- a/src/Commands/LaravelRouteStatisticsCommand.php +++ b/src/Commands/LaravelRouteStatisticsCommand.php @@ -132,8 +132,8 @@ protected function getFields(): array } /** - * @param RouteStatistic $model - * @param $fields array + * @param RouteStatistic $model + * @param $fields array * @return array */ protected function toTableRow(RouteStatistic $model, array $fields): array