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
Aucune branche associée trouvée
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) {
// Compiler les statistiques temporaires : visites et referers (si active)
//
function calculer_referers($date) {
// Referers sur tout le site
function calculer_100_referers() {
$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 ".
"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);
$encore = (mysql_num_rows($result) == $nombre_de_refs);
$referer_insert = "";
$referer_update = "";
......@@ -110,6 +115,7 @@ function calculer_referers($date) {
$referer_update[$visites][] = $referer_md5;
$referer_insert[] = "('$date', '$referer', $referer_md5, $visites)";
$referer_vus[] = $referer_md5;
}
// Mise a jour de la base
......@@ -120,15 +126,17 @@ function calculer_referers($date) {
$result = spip_query($query);
}
}
if (is_array($referer_insert)) {
$query_insert = "INSERT DELAYED IGNORE INTO spip_referers ".
"(date, referer, referer_md5, visites) VALUES ".join(', ', $referer_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 ".
"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);
$referer_insert = "";
......@@ -158,8 +166,26 @@ function calculer_referers($date) {
$result_insert = spip_query($query_insert);
}
$query_effacer = "DELETE FROM spip_referers_temp";
$result_effacer = spip_query($query_effacer);
if (is_array($referer_vus)) {
$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 = "") {
}
}
if (lire_meta('activer_statistiques_ref') != 'non') {
/* if (lire_meta('activer_statistiques_ref') != 'non') {
calculer_referers($date);
}
} */
}
......
......@@ -8,7 +8,6 @@ define("_INC_STATS", "1");
function ecrire_stats() {
global $id_article, $id_breve, $id_rubrique, $admin_ok;
$activer_referers = lire_meta('activer_statistiques_ref');
// Essai de fichier de log simplifie
$log_ip = $GLOBALS['REMOTE_ADDR'];
......@@ -29,9 +28,6 @@ function ecrire_stats() {
$log_id_num = 0;
}
$date = date("Y-m-d");
$last_date = lire_meta("date_statistiques");
// Conversion IP 4 octets -> entier 32 bits
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]);
......@@ -39,7 +35,19 @@ function ecrire_stats() {
else return;
// 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");
if ($GLOBALS['db_ok']) {
include_ecrire("inc_meta.php3");
......@@ -47,6 +55,11 @@ function ecrire_stats() {
ecrire_meta("date_statistiques", $date);
ecrire_metas();
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() {
}
// Log complexe (referers)
if ($activer_referers == 'oui') {
if (lire_meta('activer_statistiques_ref') == 'oui') {
$url_site_spip = lire_meta('adresse_site');
$url_site_spip = eregi_replace("^(https?|ftp://)www\.", "\\1(www)?\.", $url_site_spip);
$log_referer = $GLOBALS['HTTP_REFERER'];
......@@ -89,17 +102,15 @@ function ecrire_stats() {
}
// Effacer les referers
// traiter les referers toutes les heures
$date_refs = lire_meta('date_stats_referers');
if ((time() - $date_refs) > 24 * 3600) {
if ((time() - $date_refs) > 3600) {
include_ecrire("inc_connect.php3");
if ($GLOBALS['db_ok']) {
include_ecrire("inc_meta.php3");
ecrire_meta("date_stats_referers", time());
ecrire_meta('calculer_referers_now', 'oui');
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.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter