Skip to content
Extraits de code Groupes Projets
Valider f07c236e rédigé par esj's avatar esj
Parcourir les fichiers

Les fonctions de trace et mesure des requêtes ne sont pas à propremment parler...

Les fonctions de trace et mesure des requêtes ne sont pas à propremment parler du debug, on sépare les deux jeux de fonctions.
parent 334cd8a2
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -394,6 +394,7 @@ ecrire/public/index.php -text
ecrire/public/jointures.php -text
ecrire/public/normaliser.php -text
ecrire/public/quete.php -text
ecrire/public/tracer.php -text
ecrire/req/pg.php -text
ecrire/req/sqlite2.php -text
ecrire/req/sqlite3.php -text
......
......@@ -241,7 +241,7 @@ function exec_brouteur_frame_dist() {
}
}
if (count($GLOBALS['tableau_des_temps'])) {
include_spip('public/debug');
include_spip('public/tracer');
echo chrono_requete($GLOBALS['tableau_des_temps']);
}
echo "</div>";
......
......@@ -206,7 +206,7 @@ function ajax_retour($corps,$xml = true)
} else {
if (isset($GLOBALS['tableau_des_temps'])) {
include_spip('public/debug');
include_spip('public/tracer');
$fin = chrono_requete($GLOBALS['tableau_des_temps']);
} else $fin = '';
......
......@@ -324,7 +324,7 @@ function fin_page()
// avec &var_profile=1 on a le tableau de mesures SQL
if (@count($GLOBALS['tableau_des_temps'])) {
include_spip('public/debug');
include_spip('public/tracer');
$chrono = chrono_requete($GLOBALS['tableau_des_temps']);
} else $chrono = '';
......
......@@ -74,76 +74,6 @@ function affiche_erreurs_page($tableau_des_erreurs, $message='') {
. "</table>";
}
// http://doc.spip.org/@chrono_requete
function chrono_requete($temps)
{
$total = 0;
$hors = "<i>" . _T('zbug_hors_compilation') . "</i>";
$t = $q = $n = $d = array();
foreach ($temps as $key => $row) {
list($dt, $nb, $boucle, $query, $explain, $res) = $row;
$total += $dt;
$d[$boucle]+= $dt;
$t[$key] = $dt;
$q[$key] = $nb;
$e = "<tr><th colspan='2' style='text-align:center'>"
. (!$boucle ? $hors :
($boucle . '&nbsp;(' . @++$n[$boucle] . ")"))
. "</th></tr>"
. "<tr><td>Time</td><td>$dt</td></tr>"
. "<tr><td>Order</td><td>$nb</td></tr>"
. "<tr><td>Res</td><td>$res</td></tr>" ;
foreach($explain as $k => $v) {
$e .= "<tr><td>$k</td><td>"
. str_replace(';','<br />',$v)
. "</td></tr>";
}
$e = "<br /><table border='1'>$e</table>";
$temps[$key] = array($boucle, $e, $query);
}
array_multisort($t, SORT_DESC, $q, $temps);
arsort($d);
$i = 1;
$t = array();
foreach($temps as $k => $v) {
$boucle = array_shift($v);
$temps[$k] = $v;
$x = "<a style='font-family: monospace' title='"
. textebrut(preg_replace(',</tr>,', "\n",$v[0]))
. "' href='".quote_amp($GLOBALS['REQUEST_URI'])."#req$i'>"
. str_replace(' ', '&nbsp;', sprintf("%5d",$i))
. "</a>";
if (count($t[$boucle]) % 30 == 29) $x .= "<br />";
$t[$boucle][] = $x;
$i++;
}
if ($d['']) {
$d[$hors] = $d[''];
$n[$hors] = $n[''];
$t[$hors] = $t[''];
}
unset($d['']);
foreach ($d as $k => $v) {
$d[$k] = $n[$k] . "</td><td>$k</td><td>$v</td><td>"
. join('',$t[$k]);
}
$titre = '<br />'
. _T('zbug_statistiques')
. '<br />'
. "<table style='text-align: left; border: 1px solid;'><tr><td>"
. join("</td></tr>\n<tr><td>", $d)
. "</td></tr>\n"
. (_request('var_mode_objet') ? '' :
("<tr><td>" . count($temps) . " </td><td> " . _T('info_total') . '</td><td>' . $total . "</td></td><td></td></tr>"))
. "</table>";
return (_DIR_RESTREINT ? '' : affiche_erreurs_page($GLOBALS['tableau_des_erreurs']))
. affiche_erreurs_page($temps, $titre);
}
//
// Si une boucle cree des soucis, on peut afficher la requete fautive
......@@ -676,63 +606,4 @@ function count_occ($regs)
return $encore;
}
// http://doc.spip.org/@trace_query_start
function trace_query_start()
{
static $trace = '?';
if ($trace === '?') {
include_spip('inc/autoriser');
// gare au bouclage sur calcul de droits au premier appel
// A fortiori quand on demande une trace
$trace = isset($_GET['var_profile']) AND (autoriser('debug'));
}
return $trace ? microtime() : 0;
}
// http://doc.spip.org/@trace_query_end
function trace_query_end($query, $start, $result, $err, $serveur='')
{
global $tableau_des_erreurs;
if ($start)
trace_query_chrono($start, microtime(), $query, $result, $serveur);
if (!($err = sql_errno())) return $result;
$err .= ' '.sql_error();
if (autoriser('debug')) {
include_spip('public/debug');
$tableau_des_erreurs[] = array(
_T('info_erreur_requete'). " " . htmlentities($query),
"&laquo; " . htmlentities($err)," &raquo;");
}
return $result;
}
// http://doc.spip.org/@trace_query_chrono
function trace_query_chrono($m1, $m2, $query, $result, $serveur='')
{
static $tt = 0, $nb=0;
global $tableau_des_temps;
$x = _request('var_mode_objet');
if (isset($GLOBALS['debug']['aucasou'])) {
list(, $boucle, $serveur) = $GLOBALS['debug']['aucasou'];
if ($x AND !preg_match("/$boucle\$/", $x))
return;
if ($serveur) $boucle .= " ($serveur)";
$boucle = "<b>$boucle</b>";
} else {
if ($x) return;
$boucle = '';
}
list($usec, $sec) = explode(" ", $m1);
list($usec2, $sec2) = explode(" ", $m2);
$dt = $sec2 + $usec2 - $sec - $usec;
$tt += $dt;
$nb++;
$q = preg_replace('/([a-z)`])\s+([A-Z])/', '$1<br />$2',htmlentities($query));
$e = sql_explain($query, $serveur);
$r = str_replace('Resource id ','',(is_object($result)?get_class($result):$result));
$tableau_des_temps[] = array($dt, $nb, $boucle, $q, $e, $r);
}
?>
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2009 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
// http://doc.spip.org/@trace_query_start
function trace_query_start()
{
static $trace = '?';
if ($trace === '?') {
include_spip('inc/autoriser');
// gare au bouclage sur calcul de droits au premier appel
// A fortiori quand on demande une trace
$trace = isset($_GET['var_profile']) AND (autoriser('debug'));
}
return $trace ? microtime() : 0;
}
// http://doc.spip.org/@trace_query_end
function trace_query_end($query, $start, $result, $err, $serveur='')
{
global $tableau_des_erreurs;
if ($start)
trace_query_chrono($start, microtime(), $query, $result, $serveur);
if (!($err = sql_errno())) return $result;
$err .= ' '.sql_error();
if (autoriser('debug')) {
include_spip('public/debug');
$tableau_des_erreurs[] = array(
_T('info_erreur_requete'). " " . htmlentities($query),
"&laquo; " . htmlentities($err)," &raquo;");
}
return $result;
}
// http://doc.spip.org/@trace_query_chrono
function trace_query_chrono($m1, $m2, $query, $result, $serveur='')
{
static $tt = 0, $nb=0;
global $tableau_des_temps;
$x = _request('var_mode_objet');
if (isset($GLOBALS['debug']['aucasou'])) {
list(, $boucle, $serveur) = $GLOBALS['debug']['aucasou'];
if ($x AND !preg_match("/$boucle\$/", $x))
return;
if ($serveur) $boucle .= " ($serveur)";
$boucle = "<b>$boucle</b>";
} else {
if ($x) return;
$boucle = '';
}
list($usec, $sec) = explode(" ", $m1);
list($usec2, $sec2) = explode(" ", $m2);
$dt = $sec2 + $usec2 - $sec - $usec;
$tt += $dt;
$nb++;
$q = preg_replace('/([a-z)`])\s+([A-Z])/', '$1<br />$2',htmlentities($query));
$e = sql_explain($query, $serveur);
$r = str_replace('Resource id ','',(is_object($result)?get_class($result):$result));
$tableau_des_temps[] = array($dt, $nb, $boucle, $q, $e, $r);
}
function chrono_requete($temps)
{
$total = 0;
$hors = "<i>" . _T('zbug_hors_compilation') . "</i>";
$t = $q = $n = $d = array();
foreach ($temps as $key => $row) {
list($dt, $nb, $boucle, $query, $explain, $res) = $row;
$total += $dt;
$d[$boucle]+= $dt;
$t[$key] = $dt;
$q[$key] = $nb;
$e = "<tr><th colspan='2' style='text-align:center'>"
. (!$boucle ? $hors :
($boucle . '&nbsp;(' . @++$n[$boucle] . ")"))
. "</th></tr>"
. "<tr><td>Time</td><td>$dt</td></tr>"
. "<tr><td>Order</td><td>$nb</td></tr>"
. "<tr><td>Res</td><td>$res</td></tr>" ;
foreach($explain as $k => $v) {
$e .= "<tr><td>$k</td><td>"
. str_replace(';','<br />',$v)
. "</td></tr>";
}
$e = "<br /><table border='1'>$e</table>";
$temps[$key] = array($boucle, $e, $query);
}
array_multisort($t, SORT_DESC, $q, $temps);
arsort($d);
$i = 1;
$t = array();
foreach($temps as $k => $v) {
$boucle = array_shift($v);
$temps[$k] = $v;
$x = "<a style='font-family: monospace' title='"
. textebrut(preg_replace(',</tr>,', "\n",$v[0]))
. "' href='".quote_amp($GLOBALS['REQUEST_URI'])."#req$i'>"
. str_replace(' ', '&nbsp;', sprintf("%5d",$i))
. "</a>";
if (count($t[$boucle]) % 30 == 29) $x .= "<br />";
$t[$boucle][] = $x;
$i++;
}
if ($d['']) {
$d[$hors] = $d[''];
$n[$hors] = $n[''];
$t[$hors] = $t[''];
}
unset($d['']);
foreach ($d as $k => $v) {
$d[$k] = $n[$k] . "</td><td>$k</td><td>$v</td><td>"
. join('',$t[$k]);
}
$titre = '<br />'
. _T('zbug_statistiques')
. '<br />'
. "<table style='text-align: left; border: 1px solid;'><tr><td>"
. join("</td></tr>\n<tr><td>", $d)
. "</td></tr>\n"
. (_request('var_mode_objet') ? '' :
("<tr><td>" . count($temps) . " </td><td> " . _T('info_total') . '</td><td>' . $total . "</td></td><td></td></tr>"))
. "</table>";
return (_DIR_RESTREINT ? '' : affiche_erreurs_page($GLOBALS['tableau_des_erreurs']))
. affiche_erreurs_page($temps, $titre);
}
?>
......@@ -124,7 +124,11 @@ function spip_mysql_query($query, $serveur='',$requeter=true) {
// renvoyer la requete inerte si demandee
if (!$requeter) return $query;
$t = !isset($_GET['var_profile']) ? 0 : trace_query_start();
if (isset($_GET['var_profile'])) {
include_spip('public/tracer');
$t = trace_query_start();
} else $t = 0 ;
$r = $link ? mysql_query($query, $link) : mysql_query($query);
if ($e = spip_mysql_errno()) // Log de l'erreur eventuelle
......@@ -548,7 +552,11 @@ function spip_mysql_insert($table, $champs, $valeurs, $desc='', $serveur='',$req
if ($prefixe) $table = preg_replace('/^spip/', $prefixe, $table);
$t = !isset($_GET['var_profile']) ? 0 : trace_query_start();
if (isset($_GET['var_profile'])) {
include_spip('public/tracer');
$t = trace_query_start();
} else $t = 0 ;
$query="INSERT INTO $table $champs VALUES $valeurs";
# spip_log($query);
if (mysql_query($query, $link))
......
......@@ -111,7 +111,11 @@ function spip_pg_trace_query($query, $serveur='')
$link = $connexion['link'];
$db = $connexion['db'];
$t = !isset($_GET['var_profile']) ? 0 : trace_query_start();
if (isset($_GET['var_profile'])) {
include_spip('public/tracer');
$t = trace_query_start();
} else $t = 0 ;
$r = spip_pg_query_simple($link, $query);
if ($e = spip_pg_errno()) // Log de l'erreur eventuelle
......
......@@ -685,8 +685,11 @@ function spip_sqlite_insert($table, $champs, $valeurs, $desc='', $serveur='',$re
if ($prefixe) $table = preg_replace('/^spip/', $prefixe, $table);
$t = !isset($_GET['var_profile']) ? 0 : trace_query_start();
if (isset($_GET['var_profile'])) {
include_spip('public/tracer');
$t = trace_query_start();
} else $t = 0 ;
$query="INSERT OR REPLACE INTO $table $champs VALUES $valeurs";
if (!$requeter) return $query;
......@@ -1596,7 +1599,11 @@ class sqlite_traiter_requete{
// faire le tracage si demande
// http://doc.spip.org/@executer_requete
function executer_requete(){
$t = $this->tracer ? trace_query_start(): 0;
if ($this->tracer) {
include_spip('public/tracer');
$t = trace_query_start();
} else $t = 0 ;
# spip_log("requete: $this->serveur >> $this->query",'query'); // boum ? pourquoi ?
if ($this->link){
if ($this->sqlite_version == 3) {
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter