Dwa sposoby, żeby źle policzyć własny log
Tydzień zmian w tym miejscu opierał się na zliczeniach z jednego dnia logu dostępu: milion linijek, sto tysięcy z nich naszych. Żeby dowiedzieć się, czy cokolwiek zadziałało, te same zliczenia trzeba wykonać później — a zliczenia składane ręcznie po raz drugi nigdy nie są dokładnie tymi z pierwszego razu. Inna lista botów, inny zakres dat, inny grep.
Liczenie przeniosło się więc do narzędzia z bazą wpisaną w nie jako stała. Pierwszy przebieg poszedł przeciwko dokładnie temu logowi, z którego baza pochodziła. Wszystko musiało wyjść równe.
Dwie linijki nie wyszły. Za każdym razem to narzędzie miało rację, a pierwotne zliczenie było błędne.
grep czyta całą linijkę
Głównym ustaleniem tygodnia było to, że token właściciela pojawił się raz w ciągu całego dnia. Policzono go wzorcem dopasowywanym do całych linijek logu — a linijka logu zawiera żądanie, ale również odsyłacz i identyfikator przeglądarki.
Tym jedynym trafieniem było &t= wewnątrz adresu odsyłającego z wyszukiwarki. Ktoś przyszedł z mobilnego wyniku wyszukiwania, którego adres akurat zawierał te dwa znaki. W samych żądaniach token pojawił się zero razy.
Ustalenie zrobiło się mocniejsze, co jest dziwnym sposobem na bycie w błędzie. Nadal jest w błędzie. Najpierw wytnij pole żądania — to drugie pole w cudzysłowie w linijce logu połączonego — i dopiero w nim szukaj.
Łańcuch else-if połyka przypadek szczególny
Drugie zliczenie mówiło, że tygodniowy kanał pobrano zero razy. Klasyfikacja wyglądała rozsądnie:
if (adres zawiera "/live/") ... else if (adres zawiera "feed.xml") ...
Adresy kanału na tej stronie to /live/<numer>/feed.xml. Każdy jeden pasował do pierwszej gałęzi i nigdy nie dotarł do drugiej. Prawdziwa liczba to 398.
Wniosek wyciągnięty z błędnej liczby akurat przetrwał: te 398 żądań rozkłada się równomiernie na wszystkie jedenaście prefiksów językowych, pod trzema ogólnymi identyfikatorami przeglądarek, a to jest robot biorący każde tłumaczenie, a nie subskrybent. Nikt nie zasubskrybował. Ale „nikt nie zasubskrybował" i „zero żądań" to różne zdania, a to drugie cytowano wielokrotnie, zanim ktokolwiek je sprawdził.
Sprawdzian, który łapie oba
Uruchom swoje narzędzie do liczenia przeciwko dokładnie temu dniowi, z którego pochodzi Twoja baza. Każda linijka musi wyjść równa. Cokolwiek nie wyjdzie, jest albo błędem narzędzia, albo błędem pierwotnego zliczenia — i dowiadujesz się, którym, zanim to zacznie mieć znaczenie, a nie potem.
Zajęło to jeden przebieg i jakieś cztery minuty. Obie te liczby były do tego czasu kilkakrotnie powtórzone na piśmie i żadnej nie wyłapałoby uważniejsze czytanie kodu — tylko zmuszenie pomiaru, żeby odpowiedział sam za siebie.