Bicycle/Services/DataBase/Classes/Profiler.php
Egor Isaev 9d4edf147a dev
2026-08-07 11:40:03 +03:00

69 lines
2.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @package Bicycle
* @author Egor Isaev
* @description Profiler.php
* @copyright (c) 07/08/2026
*/
namespace Services\DataBase\Classes;
/**
* Накопитель таймингов запросов к БД — статический реестр на весь запрос
* (по образцу Log). Backend-agnostic сам по себе (принимает произвольный $driver),
* заполняется адаптерами вроде ProfilerPDO.
*/
class Profiler
{
/** @var array<int,array{sql:string,params:array,time_ms:float,driver:string}> */
private static array $_entries = [];
/**
* Добавляет запись о выполненном запросе.
*
* @param string $sql SQL-запрос
* @param array $params Параметры запроса
* @param float $time_ms Время выполнения в миллисекундах
* @param string $driver Имя драйвера (для отчёта, если профилируются разные бэкенды)
* @return void
*/
public static function log(string $sql, array $params, float $time_ms, string $driver = 'pdo'): void
{
self::$_entries[] = ['sql' => $sql, 'params' => $params, 'time_ms' => $time_ms, 'driver' => $driver];
}
/**
* @return array<int,array{sql:string,params:array,time_ms:float,driver:string}>
*/
public static function entries(): array
{
return self::$_entries;
}
/**
* @return float Суммарное время всех залогированных запросов, мс
*/
public static function totalTime(): float
{
return array_sum(array_column(self::$_entries, 'time_ms'));
}
/**
* @return int Число залогированных запросов
*/
public static function count(): int
{
return count(self::$_entries);
}
/**
* Очищает накопленные записи.
*
* @return void
*/
public static function reset(): void
{
self::$_entries = [];
}
}