Dva způsoby, jak špatně spočítat protokol přístupů
Týden změn tady stál na počtech z jednoho dne protokolu přístupů: milion řádků, sto tisíc z nich našich. Aby se dalo zjistit, zda něco z toho zabralo, je potřeba tytéž počty později spočítat znovu — a počty sestavené podruhé ručně nikdy nejsou úplně stejné jako ty první. Jiný seznam botů, jiné časové období, jiný grep.
Počítání se proto přesunulo do nástroje, do kterého je výchozí stav zapsán jako konstanta. První běh šel proti přesně tomu protokolu, ze kterého výchozí stav pochází. Všechno muselo vyjít stejně.
Dva řádky nevyšly. V obou případech měl nástroj pravdu a původní počet byl chybný.
grep čte celý řádek
Hlavním zjištěním týdne bylo, že se token majitele za celý den objevil jednou. Počítal se vzorem porovnávaným s celými řádky protokolu — a řádek protokolu obsahuje požadavek, ale také odkazující stránku a identifikaci prohlížeče.
Jedinou shodou bylo &t= uvnitř URL odkazující stránky z vyhledávače. Někdo přišel z mobilního výsledku vyhledávání, jehož adresa náhodou obsahovala tyto dva znaky. V samotných požadavcích se token objevil nulakrát za celý den.
Zjištění tím zesílilo, což je zvláštní způsob, jak se mýlit. Pořád je to chyba. Nejdřív vystřihněte pole požadavku — je to druhé pole v uvozovkách v řádku ve formátu combined — a hledejte uvnitř něj.
Řetězec else-if spolkne zvláštní případ
Druhý počet tvrdil, že týdenní feed byl stažen nulakrát. Klasifikace vypadala rozumně:
if (url contains "/live/") ... else if (url contains "feed.xml") ...
Adresy feedů na tomto webu jsou /live/<number>/feed.xml. Každá z nich odpovídala první větvi a k druhé se nikdy nedostala. Skutečné číslo bylo 398.
Závěr vyvozený z chybného čísla náhodou obstál: těch 398 požadavků je rozloženo rovnoměrně napříč všemi jedenácti jazykovými předponami pod třemi obecnými identifikacemi prohlížečů, což je crawler procházející každý překlad, ne odběratel. Nikdo se nepřihlásil k odběru. Jenže „nikdo neodebírá“ a „nula požadavků“ jsou různá tvrzení a to druhé se opakovaně citovalo dřív, než ho někdo ověřil.
Kontrola, která zachytí obojí
Spusťte nástroj pro počítání proti přesně tomu dni, ze kterého pochází výchozí stav. Každý řádek musí vyjít stejně. Cokoli, co nevyjde, je buď chyba v nástroji, nebo chyba v původním počtu, a která z nich to je, se ukáže dřív, než na tom záleží, a ne až potom.
Stačil jeden běh a asi čtyři minuty. Obě čísla už do té doby zazněla písemně a ani jedno by se nezachytilo pečlivějším čtením kódu — jen tím, že se měření muselo samo zodpovídat.