mirror of
https://github.com/dg/dibi.git
synced 2025-07-31 19:30:30 +02:00
removed support for FirePHP
This commit is contained in:
@@ -13,9 +13,6 @@ Tracy\Debugger::enable();
|
|||||||
$dibi = new Dibi\Connection([
|
$dibi = new Dibi\Connection([
|
||||||
'driver' => 'sqlite3',
|
'driver' => 'sqlite3',
|
||||||
'database' => 'data/sample.s3db',
|
'database' => 'data/sample.s3db',
|
||||||
'profiler' => [
|
|
||||||
'run' => true,
|
|
||||||
],
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
@@ -13,9 +13,6 @@ Tracy\Debugger::enable();
|
|||||||
$dibi = new Dibi\Connection([
|
$dibi = new Dibi\Connection([
|
||||||
'driver' => 'sqlite3',
|
'driver' => 'sqlite3',
|
||||||
'database' => 'data/sample.s3db',
|
'database' => 'data/sample.s3db',
|
||||||
'profiler' => [
|
|
||||||
'run' => true,
|
|
||||||
],
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
@@ -19,8 +19,7 @@ $dibi = new Dibi\Connection([
|
|||||||
'database' => 'data/sample.s3db',
|
'database' => 'data/sample.s3db',
|
||||||
// enable query logging to this file
|
// enable query logging to this file
|
||||||
'profiler' => [
|
'profiler' => [
|
||||||
'run' => true,
|
'file' => 'log/log.sql',
|
||||||
'file' => 'data/log.sql',
|
|
||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -37,6 +36,6 @@ try {
|
|||||||
|
|
||||||
|
|
||||||
// outputs a log file
|
// outputs a log file
|
||||||
echo '<h2>File data/log.sql:</h2>';
|
echo '<h2>File log/log.sql:</h2>';
|
||||||
|
|
||||||
echo '<pre>', file_get_contents('data/log.sql'), '</pre>';
|
echo '<pre>', file_get_contents('log/log.sql'), '</pre>';
|
||||||
|
@@ -1,47 +0,0 @@
|
|||||||
<?php
|
|
||||||
declare(strict_types=1);
|
|
||||||
ob_start(); // needed by FirePHP
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html><link rel="stylesheet" href="data/style.css">
|
|
||||||
|
|
||||||
<h1>Using Profiler | dibi</h1>
|
|
||||||
|
|
||||||
<?php
|
|
||||||
|
|
||||||
if (@!include __DIR__ . '/../vendor/autoload.php') {
|
|
||||||
die('Install packages using `composer install`');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$dibi = new Dibi\Connection([
|
|
||||||
'driver' => 'sqlite3',
|
|
||||||
'database' => 'data/sample.s3db',
|
|
||||||
'profiler' => [
|
|
||||||
'run' => true,
|
|
||||||
],
|
|
||||||
]);
|
|
||||||
|
|
||||||
|
|
||||||
// execute some queries...
|
|
||||||
for ($i = 0; $i < 20; $i++) {
|
|
||||||
$res = $dibi->query('SELECT * FROM [customers] WHERE [customer_id] < ?', $i);
|
|
||||||
}
|
|
||||||
|
|
||||||
// display output
|
|
||||||
?>
|
|
||||||
<p>Last query: <strong><?= dibi::$sql; ?></strong></p>
|
|
||||||
|
|
||||||
<p>Number of queries: <strong><?= dibi::$numOfQueries; ?></strong></p>
|
|
||||||
|
|
||||||
<p>Elapsed time for last query: <strong><?= sprintf('%0.3f', dibi::$elapsedTime * 1000); ?> ms</strong></p>
|
|
||||||
|
|
||||||
<p>Total elapsed time: <strong><?= sprintf('%0.3f', dibi::$totalTime * 1000); ?> ms</strong></p>
|
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<p>Dibi can log to your Firebug Console. You first need to install the Firefox, Firebug and FirePHP extensions. You can install them from here:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>Firebug: https://addons.mozilla.org/en-US/firefox/addon/1843
|
|
||||||
<li>FirePHP: http://www.firephp.org/
|
|
||||||
</ul>
|
|
@@ -46,7 +46,7 @@ class Connection implements IConnection
|
|||||||
* - lazy (bool) => if true, connection will be established only when required
|
* - lazy (bool) => if true, connection will be established only when required
|
||||||
* - result (array) => result set options
|
* - result (array) => result set options
|
||||||
* - formatDateTime => date-time format (if empty, DateTime objects will be returned)
|
* - formatDateTime => date-time format (if empty, DateTime objects will be returned)
|
||||||
* - profiler (array or bool)
|
* - profiler (array)
|
||||||
* - run (bool) => enable profiler?
|
* - run (bool) => enable profiler?
|
||||||
* - file => file to log
|
* - file => file to log
|
||||||
* - substitutes (array) => map of driver specific substitutes (under development)
|
* - substitutes (array) => map of driver specific substitutes (under development)
|
||||||
@@ -97,20 +97,9 @@ class Connection implements IConnection
|
|||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
|
|
||||||
// profiler
|
// profiler
|
||||||
$profilerCfg = &$config['profiler'];
|
if (isset($config['profiler']['file']) && (!isset($config['profiler']['run']) || $config['profiler']['run'])) {
|
||||||
if (is_scalar($profilerCfg)) {
|
$filter = $config['profiler']['filter'] ?? Event::QUERY;
|
||||||
$profilerCfg = ['run' => (bool) $profilerCfg];
|
$this->onEvent[] = [new Loggers\FileLogger($config['profiler']['file'], $filter), 'logEvent'];
|
||||||
}
|
|
||||||
if (!empty($profilerCfg['run'])) {
|
|
||||||
$filter = $profilerCfg['filter'] ?? Event::QUERY;
|
|
||||||
|
|
||||||
if (isset($profilerCfg['file'])) {
|
|
||||||
$this->onEvent[] = [new Loggers\FileLogger($profilerCfg['file'], $filter), 'logEvent'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Loggers\FirePhpLogger::isAvailable()) {
|
|
||||||
$this->onEvent[] = [new Loggers\FirePhpLogger($filter), 'logEvent'];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->substitutes = new HashMap(function ($expr) { return ":$expr:"; });
|
$this->substitutes = new HashMap(function ($expr) { return ":$expr:"; });
|
||||||
|
@@ -1,92 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This file is part of the "dibi" - smart database abstraction layer.
|
|
||||||
* Copyright (c) 2005 David Grudl (https://davidgrudl.com)
|
|
||||||
*/
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Dibi\Loggers;
|
|
||||||
|
|
||||||
use Dibi;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dibi FirePHP logger.
|
|
||||||
*/
|
|
||||||
class FirePhpLogger
|
|
||||||
{
|
|
||||||
use Dibi\Strict;
|
|
||||||
|
|
||||||
/** maximum number of rows */
|
|
||||||
public static $maxQueries = 30;
|
|
||||||
|
|
||||||
/** maximum SQL length */
|
|
||||||
public static $maxLength = 1000;
|
|
||||||
|
|
||||||
/** size of json stream chunk */
|
|
||||||
public static $streamChunkSize = 4990;
|
|
||||||
|
|
||||||
/** @var int */
|
|
||||||
public $filter;
|
|
||||||
|
|
||||||
/** @var float Elapsed time for all queries */
|
|
||||||
public $totalTime = 0;
|
|
||||||
|
|
||||||
/** @var int Number of all queries */
|
|
||||||
public $numOfQueries = 0;
|
|
||||||
|
|
||||||
/** @var array */
|
|
||||||
private static $fireTable = [['Time', 'SQL Statement', 'Rows', 'Connection']];
|
|
||||||
|
|
||||||
|
|
||||||
public static function isAvailable(): bool
|
|
||||||
{
|
|
||||||
return isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'FirePHP/');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function __construct(int $filter = null)
|
|
||||||
{
|
|
||||||
$this->filter = $filter ?: Dibi\Event::QUERY;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* After event notification.
|
|
||||||
*/
|
|
||||||
public function logEvent(Dibi\Event $event): void
|
|
||||||
{
|
|
||||||
if (headers_sent() || ($event->type & $this->filter) === 0 || count(self::$fireTable) > self::$maxQueries) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$this->numOfQueries) {
|
|
||||||
header('X-Wf-Protocol-dibi: http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
|
|
||||||
header('X-Wf-dibi-Plugin-1: http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.2.0');
|
|
||||||
header('X-Wf-dibi-Structure-1: http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
|
|
||||||
}
|
|
||||||
$this->totalTime += $event->time;
|
|
||||||
$this->numOfQueries++;
|
|
||||||
self::$fireTable[] = [
|
|
||||||
sprintf('%0.3f', $event->time * 1000),
|
|
||||||
strlen($event->sql) > self::$maxLength ? substr($event->sql, 0, self::$maxLength) . '...' : $event->sql,
|
|
||||||
$event->result instanceof \Exception ? 'ERROR' : (string) $event->count,
|
|
||||||
$event->connection->getConfig('driver') . '/' . $event->connection->getConfig('name'),
|
|
||||||
];
|
|
||||||
|
|
||||||
$payload = json_encode([
|
|
||||||
[
|
|
||||||
'Type' => 'TABLE',
|
|
||||||
'Label' => 'dibi profiler (' . $this->numOfQueries . ' SQL queries took ' . sprintf('%0.3f', $this->totalTime * 1000) . ' ms)',
|
|
||||||
],
|
|
||||||
self::$fireTable,
|
|
||||||
]);
|
|
||||||
foreach (str_split($payload, self::$streamChunkSize) as $num => $s) {
|
|
||||||
$num++;
|
|
||||||
header("X-Wf-dibi-1-1-d$num: |$s|\\"); // protocol-, structure-, plugin-, message-index
|
|
||||||
}
|
|
||||||
header("X-Wf-dibi-1-1-d$num: |$s|");
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user