Jump to content

Statistiques biaisées par les robots !


Recommended Posts

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 :

 

267591statsrobots.jpg

 

 

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 by Antoniolav (see edit history)
Link to comment
Share on other sites

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 by Lactor (see edit history)
Link to comment
Share on other sites

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 by Antoniolav (see edit history)
Link to comment
Share on other sites

  • 2 months later...

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...