Antoniolav Posted August 10, 2015 Share Posted August 10, 2015 (edited) Bonjour, régulièrement, je constate des pics de fréquentation et plus particulièrement des visiteurs en ligne - Ces chiffres étant totalement démusurés (300 visiteurs en ligne...), je vérifie dans le back-office et je me rends compte qu'il s'agit surement de robots : Google Analytics marche quant à lui très bien, mais nous utilisons certaines stats de Prestashop pour du reporting... donc ce problème nous fausse pas mal de calcul. Du coup je suis parti jeter un coup d'oeil du côté de la requête SQL qui comptait ces connexions live (module "statslive) : private function getVisitorsOnline() { if ($maintenance_ips = Configuration::get('PS_MAINTENANCE_IP')) $maintenance_ips = implode(',', array_map('ip2long', array_filter(array_map('trim', explode(',', $maintenance_ips))))); if (Configuration::get('PS_STATSDATA_CUSTOMER_PAGESVIEWS')) { $sql = 'SELECT c.id_guest, c.ip_address, c.date_add, c.http_referer, pt.name as page FROM `'._DB_PREFIX_.'connections` c LEFT JOIN `'._DB_PREFIX_.'connections_page` cp ON c.id_connections = cp.id_connections LEFT JOIN `'._DB_PREFIX_.'page` p ON p.id_page = cp.id_page LEFT JOIN `'._DB_PREFIX_.'page_type` pt ON p.id_page_type = pt.id_page_type INNER JOIN `'._DB_PREFIX_.'guest` g ON c.id_guest = g.id_guest WHERE (g.id_customer IS NULL OR g.id_customer = 0) '.Shop::addSqlRestriction(false, 'c').' AND cp.`time_end` IS NULL AND TIME_TO_SEC(TIMEDIFF(\''.pSQL(date('Y-m-d H:i:00', time())).'\', cp.`time_start`)) < 900 '.($maintenance_ips ? 'AND c.ip_address NOT IN ('.preg_replace('/[^,0-9]/', '', $maintenance_ips).')' : '').' GROUP BY c.id_connections ORDER BY c.date_add DESC'; } else { $sql = 'SELECT c.id_guest, c.ip_address, c.date_add, c.http_referer, "-" as page FROM `'._DB_PREFIX_.'connections` c INNER JOIN `'._DB_PREFIX_.'guest` g ON c.id_guest = g.id_guest WHERE (g.id_customer IS NULL OR g.id_customer = 0) '.Shop::addSqlRestriction(false, 'c').' AND TIME_TO_SEC(TIMEDIFF(\''.pSQL(date('Y-m-d H:i:00', time())).'\', c.`date_add`)) < 900 '.($maintenance_ips ? 'AND c.ip_address NOT IN ('.preg_replace('/[^,0-9]/', '', $maintenance_ips).')' : '').' ORDER BY c.date_add DESC'; } $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); return array($results, Db::getInstance()->NumRows()); } J'ai essayé de rajouter un "Distinct", en vain. La solution serait de ne pas compter une même adresse IP plusieurs fois, même si il y a 2 sessions espacées de plusieurs minutes pendant la dernière demi-heure. Une petite idée ? Merci d'avance Edited August 10, 2015 by Antoniolav (see edit history) Link to comment Share on other sites More sharing options...
Antoniolav Posted August 11, 2015 Author Share Posted August 11, 2015 Bonjour à tous, je n'ai pas vraiment avancé sur le sujet depuis hier, je n'arrive pas à modifier la requête pour lui indiquer de ne pas prendre en compte plusieurs fois la même adresse IP dans les stats live. Un petit coup de main ? Link to comment Share on other sites More sharing options...
Lactor Posted August 11, 2015 Share Posted August 11, 2015 (edited) Bonjour Antoniolav, Désolée, je n'ai absolument aucune idée pour t'aider ): Je vais m'y pencher, c'est plutôt intéressant et ça a l'air de fausser les stats de tout le monde (du moins, ceux qui regardent et qui ne s'en fichent pas n_n). J'ai pas énormément d'idée, mais peut-être rajouter une condition pour ne pas prendre une ip sembable à moins d'une heure (ou de X temps) de décalage, plutôt qu'un distinct ? Ce n'est qu'une supposition, je ne sais pas si ça marchera. Bon courage à toi ! Bonne journée, Cordialement, Lactor Edited August 11, 2015 by Lactor (see edit history) Link to comment Share on other sites More sharing options...
Antoniolav Posted August 11, 2015 Author Share Posted August 11, 2015 (edited) Salut Lactor, yes c'est en effet assez problématique. En modifiant le GROUP BY à la fin et en remplaçant c.id_connections par c.ip_address, ça marchera peut-être .. mais impossible de vérifier tant que le bug ne se reproduit pas. Je vais donc garder le fichier .php ouvert et tester cette piste dès que le bug se reproduira ! EDIT 16h39 : mon changement sur le group by n'a pas marché... j'ai à l'instant même un doublon. Toujours en recherche d'aide donc Edited August 11, 2015 by Antoniolav (see edit history) Link to comment Share on other sites More sharing options...
siriek Posted October 19, 2015 Share Posted October 19, 2015 Salut Lactor, tu as essayé d'intégrer la fonction php array_unique dans ta requête? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now