25 May 16:38
Należy pobrać i rozpakować załączony do zadania plik z aplikacją.
Załączona aplikacja jest omówiona w instrukcji do ćwiczenia.
Aplikacja zawiera już wszystkie niezbędne do jej działania moduły JS, nie ma potrzeby niczego doinstalowywać.
Serwer źródła danych https://bdijs.ontime24.ovh/api/z12/signal/s1 , z którego aplikacja pobiera dane pomiarowe, udostępnia 6 źródeł danych pomiarowych.
Są to dane w formacie JSON zwracane na ścieżkach:
/api/z12/signal/s1
/api/z12/signal/s2
/api/z12/signal/s3
/api/z12/signal/s4
/api/z12/signal/s5
/api/z12/signal/s6
źródła te, wykonują pomiar i udostępniają nową wartość, wraz z nazwą i znacznikiem czasu, kodem błędu (kod = 0: brak błędu, kod > 0 wystąpił błąd).
Wartość pomiaru można pobrać w dowolnym momencie, i wielokrotnie.
Uwaga! Aplikacja ma w bazie mongo przechowywać kolejne informację z ostatnich 200 sekund pomiarów. Próbki nie mogą się duplikować (muszą mieć różne wartości atrybutu timestamp). Pobieraj rezultat ze źródła cyklicznie, częściej niż co sekundę i wykorzystaj znacznik czasu do identyfikacji powtórzenia pobranego wyniku. Zapisuj jedynie unikalne próbki.
W zadaniu należy zmodyfikować przekazaną aplikację w taki sposób by na stronie prezentacji danych aplikacji (strona z wykresem on-line) znalazły się elementy za pomocą których można zmieniać źródło danych wyświetlanych na wykresie, bez przeładowania całej strony HTML. Np. 'guziki' s1,s2,s3,... po kliknięciu których zmienia się źródło danych dla wykresu.
Aplikacja po stronie serwera (back-end) ma w sposób ciągły pobierać próbki ze wszystkich 6 źródeł i zapisywać je w bazie danych (ostatnie 200 sekund dla każdego źródła). Próbki starsze niż 200s należy usuwać z bazy na bieżąco. Front-end aplikacji w przeglądarce ma również w sposób ciągły aktualizować stan wykresu pobierając co sekundę próbki z ostatnich 200 sekund, tak by samo przełączanie zawartości wykresu odbywało się gładko zawsze pokazując ostanie 200s sygnału. Na wykresie ma być widoczna skala czasu wynikająca z pobranych znaczników czasu dla kolejnych próbek (tak jak w kodzie źródłowym).
W zadaniu należy zachować obecny w kodzie źródłowym podział kodu na elementy funkcjonalne jak db, services, utils, model, routes, middleware itd.