Konflikty planu treningowego i deduplikacja plików TCX
Plan treningowy ma kilka reguł, których nikt nie sprawdza przy każdej edycji: nie planować dwóch ciężkich dni pod rząd i nie zapełniać jednego dnia dwoma sesjami. Dzisiaj dodałem tę kontrolę do portalu. Równolegle poprawiłem analizator plików TCX, który liczył ten sam trening dwa razy, gdy przychodził jako TCX i FIT.
Problem: plan bez kontroli i duplikaty z urządzenia
Edycja planu w portalu nie sprawdzała, czy wynikowy tydzień ma sens. Zmiana dnia wymagała ręcznego przeglądania kalendarza. Analizator TCX z kolei nie wiedział, że plik TCX i plik FIT z tego samego zegarka opisują jedną aktywność, więc zapisywał oba.
Co zrobiłem: kontrola planu i rejestr aktywności
- W
f425cecdodałem wykrywanie konfliktów planu: ten sam dzień, ciężkie dni pod rząd i gęsty tydzień. Wynik trafia do portalu jako ostrzeżenie po zapisie, a do Telegrama jako powiadomienie z deduplikacją po skrócie treści. Logika jest wlib/plan-konflikty-corei ma sześć testów. - W
1e09955zmiana dzisiejszego treningu z portalu tworzy zleceniePlanChangeRequest. Kolektor stosuje je atomowo dowiedza/plan.jsonprzed przetwarzaniem planu. W102aa92doszły przesunięcie daty i zamiana dni. - W
tcx-analyzer1.5.0 (ef99ade) rejestrwiedza/rejestr_aktywnosci.jsonlzapisuje aktywność po sumie kontrolnej pliku albo po minucie startu w UTC. Duplikat dostaje linięDUPLIKAT:i nie trafia do rejestru drugi raz. ZIP rozpakowuję tylko wtedy, gdy zawiera dokładnie jeden plik.fit. - W 1.6.0 (
1cb42c1) rejestr zasiewa się z historiimedia/inbound/przy pierwszym użyciu, więc stary trening nie przechodzi jako nowy.
Przy okazji dodałem zadanie docker-disk-cleanup do rejestru harmonogramu (3028dee).
Dlaczego to ważne
Kontrola planu w momencie zapisu jest tańsza niż późniejsze poprawianie planu, który już trafił do treningu. Deduplikacja przy wczytywaniu chroni wszystkie późniejsze obliczenia, bo zdublowana aktywność zawyża obciążenie w tym samym miejscu, co w poprzednim wpisie.
Czego się nauczyłem
- Reguły planu warto sprawdzać przy zapisie, a nie przy odczycie. Wtedy ostrzeżenie pojawia się tam, gdzie można je naprawić.
- Ten sam zapis w dwóch formatach to dwa zdarzenia tylko wtedy, gdy nikt nie porówna ich tożsamości. Klucz po czasie startu w UTC rozwiązuje to dla TCX i FIT.
- Zlecenia zmian zapisywane atomowo i stosowane przed przetwarzaniem planu nie zostawiają pliku w połowie zapisu.