Skip to content
Extraits de code Groupes Projets
Valider 26b7be2d rédigé par Fil's avatar Fil
Parcourir les fichiers

J'essaie de rendre le calcul des referers plus digeste par le serveur : on...

J'essaie de rendre le calcul des referers plus digeste par le serveur : on traite les md5(referers) par lots de 100... Du coup, au lieu de les dater de la veille, on les date du moment du calcul, et on lance le calcul toutes les heures.

A chaque fois qu'un lot de 100 est terminé, la fonction remet un meta qui lancera le calcukl des 100 suivants au prochain hit, jusqu'à épuisement du stock. C'est peut-être un peu overkill, vu que, du coup, ça va moins se remplir... mais on assure comme ça le vidage d'une base qui a des referrs à traiter "ras la gueule".

J'espère que le code est bon ;)
parent 8f87c92c
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -94,12 +94,17 @@ function stats_show_keywords($kw_referer, $kw_referer_host) { ...@@ -94,12 +94,17 @@ function stats_show_keywords($kw_referer, $kw_referer_host) {
// Compiler les statistiques temporaires : visites et referers (si active) // Compiler les statistiques temporaires : visites et referers (si active)
// //
function calculer_referers($date) { function calculer_100_referers() {
// Referers sur tout le site $nombre_de_refs = 100;
$date = date("Y-m-d");
// Selectionner 100 referers sur tout le site
$query = "SELECT COUNT(DISTINCT ip) AS visites, referer, HEX(referer_md5) AS md5 ". $query = "SELECT COUNT(DISTINCT ip) AS visites, referer, HEX(referer_md5) AS md5 ".
"FROM spip_referers_temp GROUP BY referer_md5"; "FROM spip_referers_temp GROUP BY referer_md5 LIMIT 0,$nombre_de_refs";
$result = spip_query($query); $result = spip_query($query);
$encore = (mysql_num_rows($result) == $nombre_de_refs);
$referer_insert = ""; $referer_insert = "";
$referer_update = ""; $referer_update = "";
...@@ -110,6 +115,7 @@ function calculer_referers($date) { ...@@ -110,6 +115,7 @@ function calculer_referers($date) {
$referer_update[$visites][] = $referer_md5; $referer_update[$visites][] = $referer_md5;
$referer_insert[] = "('$date', '$referer', $referer_md5, $visites)"; $referer_insert[] = "('$date', '$referer', $referer_md5, $visites)";
$referer_vus[] = $referer_md5;
} }
// Mise a jour de la base // Mise a jour de la base
...@@ -120,15 +126,17 @@ function calculer_referers($date) { ...@@ -120,15 +126,17 @@ function calculer_referers($date) {
$result = spip_query($query); $result = spip_query($query);
} }
} }
if (is_array($referer_insert)) { if (is_array($referer_insert)) {
$query_insert = "INSERT DELAYED IGNORE INTO spip_referers ". $query_insert = "INSERT DELAYED IGNORE INTO spip_referers ".
"(date, referer, referer_md5, visites) VALUES ".join(', ', $referer_insert); "(date, referer, referer_md5, visites) VALUES ".join(', ', $referer_insert);
$result_insert = spip_query($query_insert); $result_insert = spip_query($query_insert);
} }
// Referers par article // Ventiler ces referers article par article
$where = (is_array($referer_vus)) ? "AND referer_md5 IN (".join(',',$referer_vus).")" : "";
$query = "SELECT COUNT(DISTINCT ip) AS visites, id_objet, referer, HEX(referer_md5) AS md5 ". $query = "SELECT COUNT(DISTINCT ip) AS visites, id_objet, referer, HEX(referer_md5) AS md5 ".
"FROM spip_referers_temp WHERE type='article' GROUP BY id_objet, referer_md5"; "FROM spip_referers_temp WHERE type='article' $where GROUP BY id_objet, referer_md5";
$result = spip_query($query); $result = spip_query($query);
$referer_insert = ""; $referer_insert = "";
...@@ -158,8 +166,26 @@ function calculer_referers($date) { ...@@ -158,8 +166,26 @@ function calculer_referers($date) {
$result_insert = spip_query($query_insert); $result_insert = spip_query($query_insert);
} }
$query_effacer = "DELETE FROM spip_referers_temp"; if (is_array($referer_vus)) {
$result_effacer = spip_query($query_effacer); $query_effacer = "DELETE FROM spip_referers_temp WHERE referer_md5 IN (".join(",",$referer_vus).")";
$result_effacer = spip_query($query_effacer);
}
// a-t-on atteint le dernier referer ?
return $encore;
}
function calculer_referers() {
$encore = calculer_100_referers();
if ($encore) {
include_ecrire("inc_meta.php3");
ecrire_meta ("calculer_referers_now", "oui");
ecrire_metas();
} else {
// un peu de menage
supprimer_referers();
supprimer_referers("article");
}
} }
...@@ -214,9 +240,9 @@ function calculer_visites($date = "") { ...@@ -214,9 +240,9 @@ function calculer_visites($date = "") {
} }
} }
if (lire_meta('activer_statistiques_ref') != 'non') { /* if (lire_meta('activer_statistiques_ref') != 'non') {
calculer_referers($date); calculer_referers($date);
} } */
} }
......
...@@ -8,7 +8,6 @@ define("_INC_STATS", "1"); ...@@ -8,7 +8,6 @@ define("_INC_STATS", "1");
function ecrire_stats() { function ecrire_stats() {
global $id_article, $id_breve, $id_rubrique, $admin_ok; global $id_article, $id_breve, $id_rubrique, $admin_ok;
$activer_referers = lire_meta('activer_statistiques_ref');
// Essai de fichier de log simplifie // Essai de fichier de log simplifie
$log_ip = $GLOBALS['REMOTE_ADDR']; $log_ip = $GLOBALS['REMOTE_ADDR'];
...@@ -29,9 +28,6 @@ function ecrire_stats() { ...@@ -29,9 +28,6 @@ function ecrire_stats() {
$log_id_num = 0; $log_id_num = 0;
} }
$date = date("Y-m-d");
$last_date = lire_meta("date_statistiques");
// Conversion IP 4 octets -> entier 32 bits // Conversion IP 4 octets -> entier 32 bits
if (ereg("^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$", $log_ip, $r)) { if (ereg("^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$", $log_ip, $r)) {
$log_ip = sprintf("0x%02x%02x%02x%02x", $r[1], $r[2], $r[3], $r[4]); $log_ip = sprintf("0x%02x%02x%02x%02x", $r[1], $r[2], $r[3], $r[4]);
...@@ -39,7 +35,19 @@ function ecrire_stats() { ...@@ -39,7 +35,19 @@ function ecrire_stats() {
else return; else return;
// Archivage des visites temporaires // Archivage des visites temporaires
if ($date != $last_date) { $date = date("Y-m-d");
$last_date = lire_meta("date_statistiques");
if (lire_meta('calculer_referers_now') == 'oui') {
include_ecrire("inc_connect.php3");
if ($GLOBALS['db_ok']) {
include_ecrire("inc_meta.php3");
include_ecrire("inc_statistiques.php3");
ecrire_meta('calculer_referers_now', 'non');
ecrire_metas();
calculer_referers();
}
} else if ($date != $last_date) {
include_ecrire("inc_connect.php3"); include_ecrire("inc_connect.php3");
if ($GLOBALS['db_ok']) { if ($GLOBALS['db_ok']) {
include_ecrire("inc_meta.php3"); include_ecrire("inc_meta.php3");
...@@ -47,6 +55,11 @@ function ecrire_stats() { ...@@ -47,6 +55,11 @@ function ecrire_stats() {
ecrire_meta("date_statistiques", $date); ecrire_meta("date_statistiques", $date);
ecrire_metas(); ecrire_metas();
calculer_visites($last_date); calculer_visites($last_date);
// poser un message pour le prochain hit
if (lire_meta('activer_statistiques_ref') == 'oui') {
ecrire_meta('calculer_referers_now','oui');
ecrire_metas();
}
} }
} }
...@@ -61,7 +74,7 @@ function ecrire_stats() { ...@@ -61,7 +74,7 @@ function ecrire_stats() {
} }
// Log complexe (referers) // Log complexe (referers)
if ($activer_referers == 'oui') { if (lire_meta('activer_statistiques_ref') == 'oui') {
$url_site_spip = lire_meta('adresse_site'); $url_site_spip = lire_meta('adresse_site');
$url_site_spip = eregi_replace("^(https?|ftp://)www\.", "\\1(www)?\.", $url_site_spip); $url_site_spip = eregi_replace("^(https?|ftp://)www\.", "\\1(www)?\.", $url_site_spip);
$log_referer = $GLOBALS['HTTP_REFERER']; $log_referer = $GLOBALS['HTTP_REFERER'];
...@@ -89,17 +102,15 @@ function ecrire_stats() { ...@@ -89,17 +102,15 @@ function ecrire_stats() {
} }
// Effacer les referers // traiter les referers toutes les heures
$date_refs = lire_meta('date_stats_referers'); $date_refs = lire_meta('date_stats_referers');
if ((time() - $date_refs) > 24 * 3600) { if ((time() - $date_refs) > 3600) {
include_ecrire("inc_connect.php3"); include_ecrire("inc_connect.php3");
if ($GLOBALS['db_ok']) { if ($GLOBALS['db_ok']) {
include_ecrire("inc_meta.php3"); include_ecrire("inc_meta.php3");
ecrire_meta("date_stats_referers", time()); ecrire_meta("date_stats_referers", time());
ecrire_meta('calculer_referers_now', 'oui');
ecrire_metas(); ecrire_metas();
include_ecrire ("inc_statistiques.php3");
supprimer_referers();
supprimer_referers("article");
} }
} }
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter