From 64ba48ba113e08161c4d6effe3fe91f1e9fd2666 Mon Sep 17 00:00:00 2001 From: Miguel Angel Date: Fri, 13 Dec 2024 16:57:20 -0400 Subject: [PATCH] feat: add configuration option to enable/disable server timing --- .../Http/Middleware/ServerTimingMiddleware.php | 4 ++++ .../Providers/ProcessMakerServiceProvider.php | 10 ++++++---- .../Traits/PluginServiceProviderTrait.php | 16 +++++++++++++++- config/app.php | 1 + tests/Feature/ServerTimingMiddlewareTest.php | 18 ++++++++++++++++++ 5 files changed, 44 insertions(+), 5 deletions(-) diff --git a/ProcessMaker/Http/Middleware/ServerTimingMiddleware.php b/ProcessMaker/Http/Middleware/ServerTimingMiddleware.php index b90ce654f4..3638bd9ec0 100644 --- a/ProcessMaker/Http/Middleware/ServerTimingMiddleware.php +++ b/ProcessMaker/Http/Middleware/ServerTimingMiddleware.php @@ -23,6 +23,10 @@ public function __construct() */ public function handle(Request $request, Closure $next): Response { + if (!config('app.server_timing.enabled')) { + return $next($request); + } + // Start time for controller execution $startController = microtime(true); diff --git a/ProcessMaker/Providers/ProcessMakerServiceProvider.php b/ProcessMaker/Providers/ProcessMakerServiceProvider.php index 38bde2a4e2..f4e2f9be92 100644 --- a/ProcessMaker/Providers/ProcessMakerServiceProvider.php +++ b/ProcessMaker/Providers/ProcessMakerServiceProvider.php @@ -73,10 +73,12 @@ public function boot(): void public function register(): void { - // Listen to query events and accumulate query execution time - DB::listen(function ($query) { - self::$queryTime += $query->time; - }); + if (config('app.server_timing.enabled')) { + // Listen to query events and accumulate query execution time + DB::listen(function ($query) { + self::$queryTime += $query->time; + }); + } // Dusk, if env is appropriate // TODO Remove Dusk references and remove from composer dependencies diff --git a/ProcessMaker/Traits/PluginServiceProviderTrait.php b/ProcessMaker/Traits/PluginServiceProviderTrait.php index 16436d319d..b27e02482d 100644 --- a/ProcessMaker/Traits/PluginServiceProviderTrait.php +++ b/ProcessMaker/Traits/PluginServiceProviderTrait.php @@ -30,6 +30,21 @@ public function __construct($app) { parent::__construct($app); + $this->bootServerTiming(); + } + + /** + * The `bootServerTiming` function sets up timing measurements for the booting and booted events of the packages + * + * @return void If the condition `config('app.server_timing.enabled')` is false, nothing is being returned as the + * function will exit early. + */ + protected function bootServerTiming(): void + { + if (!config('app.server_timing.enabled')) { + return; + } + $package = $this->getPackageName(); $this->booting(function () use ($package) { @@ -43,7 +58,6 @@ public function __construct($app) ProcessMakerServiceProvider::setPackageBootedTime($package, self::$bootTime); }); - } /** diff --git a/config/app.php b/config/app.php index ca6b69e43f..4727a17ded 100644 --- a/config/app.php +++ b/config/app.php @@ -268,6 +268,7 @@ ], 'server_timing' => [ + 'enabled' => env('SERVER_TIMING_ENABLED', true), 'min_package_time' => env('SERVER_TIMING_MIN_PACKAGE_TIME', 5), // Minimum time in milliseconds ], ]; diff --git a/tests/Feature/ServerTimingMiddlewareTest.php b/tests/Feature/ServerTimingMiddlewareTest.php index d82aed00d8..7cf7072400 100644 --- a/tests/Feature/ServerTimingMiddlewareTest.php +++ b/tests/Feature/ServerTimingMiddlewareTest.php @@ -134,4 +134,22 @@ public function testServerTimingOnLogin() $this->assertStringContainsString('controller;dur=', $serverTiming[1]); $this->assertStringContainsString('db;dur=', $serverTiming[2]); } + + public function testServerTimingIfIsDisabled() + { + config(['app.server_timing.enabled' => false]); + + Route::middleware(ServerTimingMiddleware::class)->get('/test', function () { + // Simulate a query + DB::select('SELECT SLEEP(1)'); + + return response()->json(['message' => 'Test endpoint']); + }); + + // Send a GET request + $response = $this->get('/test'); + $response->assertStatus(200); + // Assert the response has not the Server-Timing header + $response->assertHeaderMissing('Server-Timing'); + } }