Due modi di contare male il proprio log
Informazioni sui contenuti e sulla loro verifica
In questo articolo
Una settimana di modifiche qui poggiava su conteggi presi da un giorno del registro degli accessi: un milione di righe, centomila delle quali nostre. Per sapere se qualcosa abbia funzionato, quegli stessi conteggi vanno rifatti più avanti — e conteggi messi insieme a mano una seconda volta non sono mai esattamente quelli della prima. Un’altra lista di bot, un altro intervallo di date, un altro grep.
Il conteggio si è quindi trasferito in uno strumento con la base scritta dentro come costante. La prima esecuzione è andata contro proprio il registro da cui la base proveniva. Tutto doveva risultare uguale.
Due righe non lo erano. Entrambe le volte lo strumento aveva ragione e il conteggio originale torto.
grep legge l’intera riga
Il risultato principale della settimana era che il token del proprietario fosse comparso una volta in un giorno intero. Era stato contato con un modello applicato a righe intere di registro — e una riga di registro contiene la richiesta, ma anche il referrer e l’identificativo del browser.
Quell’unica corrispondenza era un &t= dentro l’URL di provenienza di un motore di ricerca. Qualcuno è arrivato da un risultato di ricerca mobile il cui indirizzo conteneva per caso quei due caratteri. Nelle richieste vere e proprie il token è comparso zero volte.
Il risultato è diventato più netto, che è un modo strano di avere torto. Torto lo aveva comunque. Ritaglia prima il campo della richiesta — è il secondo campo tra virgolette di una riga di registro combinato — e cerca lì dentro.
Una catena else-if inghiotte il caso specifico
Il secondo conteggio diceva che il feed settimanale era stato scaricato zero volte. La classificazione sembrava ragionevole:
if (l’indirizzo contiene "/live/") ... else if (l’indirizzo contiene "feed.xml") ...
Gli indirizzi del feed su questo sito sono /live/<numero>/feed.xml. Ognuno di essi corrispondeva al primo ramo e non raggiungeva mai il secondo. Il numero vero era 398.
La conclusione tratta dal numero sbagliato è sopravvissuta per caso: quelle 398 richieste si distribuiscono uniformemente su tutti e undici i prefissi di lingua sotto tre identificativi di browser generici, e questo è un crawler che prende ogni traduzione, non un abbonato. Nessuno si era abbonato. Ma «nessuno si è abbonato» e «zero richieste» sono affermazioni diverse, e la seconda è stata citata più volte prima che qualcuno la verificasse.
La verifica che le prende entrambe
Lo strumento di conteggio va eseguito contro esattamente il giorno da cui viene la base di riferimento. Ogni riga deve risultare uguale. Tutto ciò che non lo è, è o un difetto dello strumento o un difetto del conteggio originale, e si scopre quale dei due prima che abbia importanza, anziché dopo.
Ci è voluta una esecuzione e circa quattro minuti. Entrambi i numeri erano già comparsi per iscritto a quel punto, e nessuno dei due sarebbe stato colto da una lettura più attenta del codice — solo obbligando la misurazione a rispondere di sé.