DevelopersOrganizationFork / monitor-back

monitor back office
0 stars 0 forks source link

Zapis pomiarów do bazy #11

Open marcinpilat opened 9 years ago

marcinpilat commented 9 years ago

Zapisywanie przetworzonych pomiarów do bazy danych w tabeli Measurement z odpowiednim MeasurementType.

Lista pomiarów:

KamilSzelag commented 9 years ago

Myślę, że w bazie danych powinniśmy zapisywać used i total a nie wartości procentowe. disc write/disc read - jeszcze nie zaimplementowane będzie w [byte/s] network download/upload - [byte/s] ram - [byte/s]

marcinpilat commented 9 years ago

Tak jak pisałem w innym issue - procentowe podawanie pomiarów będzie prostsze. Nie mówiąc o tym, że nie wiem jaka jednostka jest podawana w cpu, a sama wartość (bez odniesienia do wartości maksymalnej) niewiele mówi. Podobnie jest w przypadku network i disc usage - ale w tych przypadkach ciężko wyznaczyć maks. prędkość.

KamilSzelag commented 9 years ago

W disk da się wyznaczyć max prędkość. ssd odczyt z dowolnego miejsca jest zawsze taki sam hdd średnia 3 pomiarów

marcinpilat commented 9 years ago

Niby tak, ale dalej pozostaje sprawa sieci i tego, żeby z sensora szły też informacje na temat maks prędkości dysków. No i co nam da zapisywanie pomiarów na zasadzie: total/used, zamiast jednej wartości procentowej.

KamilSzelag commented 9 years ago

A tak w ogóle to ja myślałem, że w dyskach będziemy czytali maxRead i maxWrite, odpowiednio używane wartości. No w sumie to mały projekt jest wiec może i procentowe wystarczy, tylko jak na przykład okaże się, że trzeba coś jeszcze wyliczać oprócz wartości procentowej, to niestety nie będziemy mieli już tej informacji itd.

KamilSzelag commented 9 years ago

No i zapomniałem chyba o najważniejszym czyli czasie pomiarów.

marcinpilat commented 9 years ago

Dla mnie podawanie procentowe pomiarów wyczerpuje wymagania projektu:)

Czas pomiaru już jest wzięty pod uwagę w polu bazy danych, pytanie, czy przesyłasz czas z sensora, czy bierzemy czas kiedy monitor odczyta wartości z kolejki JMS. Dokładniejsza będzie opcja 1.

KamilSzelag commented 9 years ago

Chodziło mi oczywiście o czas odczytu sensora. Jeszcze tego nie dodałem

salberski commented 9 years ago

Też mi się wydawało, że fajniej byłoby zapisać nieruszone dane z sensora, a później je przerabiać, no ale z drugiej strony przyspieszymy trochę odczyt ;p więc na ten moment niech zostanie tak, że w bazie lądują procenty :+1:

salberski commented 9 years ago

Przemyślałem sprawę, jestem za tym co @KamilSzelag napisał wcześniej, czyli chodzi o to, żeby do bazy szło dokładnie to co przychodzi z sensora, w czystej niezmienionej postaci, bez strat informacji. Z punktu widzenia logiki programu nic nie zyskamy wykonując obliczenia przed zapisem, a tracimy dane i sens istnienia monitora, bo równie dobrze sensor mógłby obliczyć wartości procentowe, a nie o to chodzi. Obliczenia powinny być wykonywane przy wyciąganiu danych, użytkownik wybiera zakres i sposób wykonywania obliczeń i najrozsądniej jest wykonać obliczenia na żądanie użytkownika.

marcinpilat commented 9 years ago

Nie zgodzę się:) Monitor zbiera informacje i je przechowuje. Teoretycznie dane mogą być zapisywane tak jak przychodzą z sensora i obliczane, ale nie widzę takiego wymagania w specyfikacji. Rozumiem, że gdybyśmy robili bardziej rozbudowaną aplikację, to zapisywanie wszystkich danych ma sens w imię ew. przyszłych analiz, ale tu raczej nie. Nie jest to nie wiadomo co, żeby przestawić się na to, co wy proponujecie, tylko pytanie, czy jest taka potrzeba.

salberski commented 9 years ago

Sensor jest odpowiedzialny tylko i wyłącznie za pobranie i przesłanie odpowiednich parametrów z systemu, nie wykonuje żadnych obliczeń. Tutaj mam nadzieje, że wszyscy się zgadzamy.

Monitor odbiera dane, utrwala je, i może z nimi robić co mu się podoba.

Projektując system powinniśmy kierować się zasadą open/closed, czyli system/moduły/klasy/metody powinny być otwarte na rozszerzenia, zamknięte na modyfikacje. Propozycja przeliczania wartości przed zapisem do bazy jak najbardziej spełnia wymagania, tyle że przy jakichkolwiek zmianach wymagań (pokazanie max/total byłoby niemożliwe / wymagałoby dużej ingerencji w system od zaorania bazy danych do zmian w logice systemu).

Z naszego punktu widzenia (spełnienia minimalnych wymagań) nie ma żadnej różnicy (w nakładzie kodzeniogodzin) w tym czy serwis odpowiadający za przeliczenie wartości będzie wywoływany przed zapisem danych do bazy czy przy odczytywaniu wartości z bazy danych. Czyli co chcę przez to powiedzieć, tą samą robotą (niewiele większym nakładem pracy, jedyne rozszerzenie to bardziej rozbudowane encje i stworzenie DTOsów, żeby przesłać restem), można zrobić system rozszerzalny, można to podkreślić w dokumentacji, jest to zdecydowany atut systemu. ;p

Silwest commented 9 years ago

Tak jak pisalem w innym issue sciaganie z kolejki juz dziala, jedyne co pozostalo do dopisanie wrzucania do bazy danych.