Бројачот на прегледи што го претвори нашиот каталог во 502
Испорака
Страницата што ги наведува сите комплети што ги продаваме одговори со 502 Bad Gateway на секој посетител околу 41 час по лансирањето. Страницата на секој комплет работеше, почетната страница работеше, плаќањето работеше. Расипаниот дел беа неколку редови што ги броеа прегледите на страниците.
Бубачката
Серверот на нашата продавница ги брои посетите на страниците на комплетите. За да дознае за кој комплет е барањето, го зеде вториот дел од патеката:
self._count_view(path.strip("/").split("/")[1] if path.count("/") >= 2 else "")
За /kits/studio/ тоа е studio. За самиот каталог, /kits/, патеката има две коси црти, па заштитниот механизам го пушти, но по отстранувањето на косите црти останува само еден дел, а [1] фрли IndexError. Ракувачот е стандардниот http.server на Python: исклучок во do_GET ја затвора врската без одговор, а Cloudflare му прикажа на посетителот 502.
Поправката е една мала функција што враќа празен низ кога делот недостасува. Бројот на прегледи никогаш не требаше ништо освен името на комплетот; никогаш не требаше да може да ја расипа страницата што ја брои.
Зошто ниту една од нашите проверки не го виде тоа
- Watchdog за достапност отвора само почетни страници. Почетната страница беше во ред.
- Чекорот за објавување го провери секој комплет што го испрати: неговата страница, неговото пренасочување за плаќање, платениот пат од почеток до крај. Никогаш не ја отвори листата на сите комплети.
- Аналитиката не можеше да го покаже тоа. Кодот што би ги броел посетителите на каталогот беше кодот што се урна. Серверскиот дневник го имаше одговорот сè време: 17 траги во тие 41 час, секоја од нив барање, од лице или ползач, што доби грешка наместо страницата.
Што се промени
- Секоја страница, од надвор, секој час. Мала задача ја чита картата на местата и отвора секоја англиска страница и, по ред, една од другите 42 јазици, преку Cloudflare како посетител. Два неуспешни извршувања по ред испраќаат е-пошта; опоравувањето испраќа друга.
- Чекорот за објавување ги отвора сите англиски страници по повторното градење на сајтот, и одбива да заврши ако една не одговори со 200.
- Индексните страници се бројат како страници. Страниците што ги наведуваат другите страници се тие што посетителот ги достигнува први, а тие беа тие што никој не ги тестираше.
Заклучокот
Помошните задачи во обработувач на барања, како броење, евидентирање или следење, никогаш не смеат да го уништат барањето, а проверка на страница која ги опфаќа само страниците што штотуку сте ги промениле ги пропушта оние што водат кон нив. Watch-от во Night Watch зема било која листа на страници, секоја со текст што мора да го содржи, а не само почетни страници.