Skip to content

Instantly share code, notes, and snippets.

@filippotoso
Last active April 30, 2025 06:17
Show Gist options
  • Save filippotoso/8b10d27b3c2853f882069f9d2a75443a to your computer and use it in GitHub Desktop.
Save filippotoso/8b10d27b3c2853f882069f9d2a75443a to your computer and use it in GitHub Desktop.
A simple Laravel Profiler class
<?php
namespace App\Components;
use Illuminate\Support\Facades\DB;
/**
* Class Profiler
* @package App\Components
*
* Copyright 2025 Filippo Toso - http://github.com/filippotoso/
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the “Software”), to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
*/
class Profiler
{
protected static array $measures = [];
public static function reset()
{
static::$measures = [];
}
public static function start(string $name, bool $withQueryLog = false)
{
if ($withQueryLog) {
DB::enableQueryLog();
}
static::$measures[$name] = [
'start' => microtime(true),
'stop' => null,
'duration' => null,
'queries' => [],
'querylog' => $withQueryLog,
];
}
public static function stop(string $name)
{
$queryLog = (static::$measures[$name]['querylog'] ?? false);
$now = microtime(true);
static::$measures[$name] = array_merge(static::$measures[$name] ?? [], [
'stop' => $now,
'duration' => $now - (static::$measures[$name]['start'] ?? 0),
'queries' => ($queryLog) ? DB::getQueryLog() : [],
]);
}
public static function measures()
{
return static::$measures;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment