DevelopersOrganizationFork / monitor-back

monitor back office
0 stars 0 forks source link

Baza danych - warstwa persystencji #8

Open salberski opened 9 years ago

salberski commented 9 years ago

@kamciak i @Tomek3 Dołożę moduł monitor-persistence do projektu monitor-back. Jak tylko wybierzecie baze danych, będziecie mogli ją skonfigurować z tomcatem i utwórzcie też warstwe DAO (data access object) korzystając z JPA, to wszystko w ramach modułu monitor-persistence.

kamciak commented 9 years ago

@salberski W jakim celu w architekturze systemu istnieje tabela "ActiveHost"? Jezeli mamy jakies dostepne hosty (AvailableHost) dla których zbierane są dane w trybie ciągłym to po co jeszcze coś takiego jak Active? Czy może chodzi o to, że dany host jest włączony/wyłączony - w takim przypadku lepszym rozwiązaniem byłaby kolumna w hostach niż osobna tabela.

Tomek3 commented 9 years ago

Jeżeli chodzi o to, aby w tabeli ActiveHost przechowywać hosty, które aktualnie badane są przez klienta to trzeba jeszcze jakoś rozróżnić do której instacji klienta one należą (o ile będzie taka możliwość aby jednocześnie działało kilka klientów i każdy miał swoją listę hostów na których operuje)

Tomek3 commented 9 years ago

I jeszcze jedno: czy każdy sensor będzie miał taką samą listę pomiarów (cpuUsage, memoryUsage, discUsage)?

kamciak commented 9 years ago

aaa

Co powiecie wstępnie na coś takiego? Co do measurement jest jeszcze jeden pomysł - stworzenie oddzielnych tabel dla pomiarów typu CPU, Pamięc itp. - to by dawało większy partycjonowanie, jednak dodanie nowego typu pomiaru wymuszałoby dodanie nowej tabeli. W tym momencie wystarczy dodać rekord do measurementType. Co sądzicie?

KamilSzelag commented 9 years ago

@Tomek3 kończę implementacje sensora, chwile walczyłem z kolejką JMS, ale chyba już mi się udało, wiec pod wieczór postaram się podać finalnego jsona. Wydaje mi się, że większość sensorów będzie miała te same dane, ale nie jest to obowiązkowe.

salberski commented 9 years ago

Prawda, słusznie zauważyliście ActiveHost jest zbędną tabelą (i nazwę tabeli AvailableHost można zamienić na samo Host).

Tabela MeasurementType też jest zbędna, wystarczy dodać kolumnę Type (Varchar) do tabeli Measurement, a po stronie appki za typ odpowiadałby odpowiedni enum (mapowany na varchar w bazie danych).

KamilSzelag commented 9 years ago

{ "measurement": { "mem": { "total": 17039118336, "ram": 16256, "used": 3819094016, "actualUsed": 3613442048 }, "cpu": { "user": 79358607, "sys": 195551045, "nice": 0, "idle": 648477841, "wait": 0, "irq": 2246701, "softIrq": 0, "stolen": 0, "total": 2308469122 }, "network": { "networkInfo": { "00:50:56:C0:00:08": { "download": 7283945, "upload": 2543230 }, "00:50:56:C0:00:01": { "download": 0, "upload": 195962 }, "F8:2F:A8:ED:39:7B": { "download": 3289665969, "upload": 191193596 } } }, "disk": { "read": 0, "write": 0 } }, "host": { "hostname": "Kamil-komputer", "ip": "62.179.1.62" }, "name": "Tutaj jeszcze nie wiem co będzie, najlepiej jakieś unikane id" }

Zmianie ulegną jeszcze informacje odnośnie cpu, będę chciał tutaj zostawić tylko used i total.

reynev commented 9 years ago

Mam dwa pytania do tego jsona:

  1. "mem" - rozumiem, że to pamięć operacyjna, tylko nie do końca wiem ile z tych pomiarów mamy zapisywać do bazy. Czym się różni "used" od "actualUsed"? Co pokazuje wskaźnik "ram"? Może wystarczy wysyłać: "used" i "total"
  2. "cpu" - tutaj monitor ma zsumować wszystkie składniki i podzielić przez total? Jeśli nie, to można się zastanowwić nad opisaniem tych danych.
KamilSzelag commented 9 years ago

Co do pamięci można wysyłać tylko used, nie ma dokumentacji do tej biblioteki wiec sam do końca nie wiem. Trzeba mieć ogólne pojęcie co oznacza used a co actualUsed - do doczytania, przeze mnie lub Sylwaka. //Edit chyba już wiem used - oznacza pewnie średnia w jakimś czasie, wybrał bym to, ponieważ nie będzie pików actualUsed w danej chwili Cpu tutaj jest niestety gorzej na podstawie tych odczytów trzeba obliczyć ile jest used. Z tego co się trochę orientuje to w procesorach liczy się to trochę inaczej niż w przypadku pamięci ram. Moim zdaniem sensor ma robić tylko odczyt a w monitorze powinny być wszelkie obliczenia. Pytanie tylko czy przed zapisem do bazy czy zapisujemy w bazie used i total i obliczamy tylko procent.

reynev commented 9 years ago

Jeszcze jedno pytanie:

  1. W jakich jednostkach podajesz te dane? CPU i RAM w sumie mnie nie interesują (o ile każda wartość w cpu/ram jest podana w tej samej jednostce), ale disc i network fajnie opisać co oznaczają.

Przygotuje właśnie opis taska odnośnie pobrania wiadomości od sensora z JMS, przetworzeniem jej i zapisem do bazy, więc to będzie po stronie monitora. Tylko potrzebuje informacji co oznaczają dane, które wysyłacie.

reynev commented 9 years ago

@kamciak - schemat bazy danych jest taki jak w dokumencie 'Monitor - Architektura Systemu' (tzn bez tabeli MeasurementType? Są jakieś ustalenia jak zapisujemy typy measurementów? 1.Tekstowo jako skróty (np. NetUp), czy

  1. Liczbami (0 - cpu, 1 - ram)? Jak dla mnie najlepiej zostawić tabelę MeasurementType, wypełnić ją danymi i nie ruszać - będzie tabelą słownikową. Rozwiązanie 1. powoduje nadmiarowość danych, a rozwiązanie 2. jest magiczne - bez kodu programu nie wiadomo co oznaczają poszczególne liczby.

Sorry, przypadkowo zamknąłem Issue...

salberski commented 9 years ago

"network": { "networkInfo": { "00:50:56:C0:00:08": { "download": 7283945, "upload": 2543230 }, "00:50:56:C0:00:01": { "download": 0, "upload": 195962 }, "F8:2F:A8:ED:39:7B": { "download": 3289665969, "upload": 191193596 } } },

raczej powinna być tam lista:

"network": { "networkList": [{ "mac": "00:50:56:C0:00:08", "download": 7283945, "upload": 2543230 }, { "mac": "00:50:56:C0:00:01", "download": 0, "upload": 195962 }, ... }] },

Jeśli chodzi o network, to przesyłane są informacje o wszystkich kartach sieciowych w komputerze (ethernet, wifi, mogą być jeszcze jakieś wirtualne i inne), czy można wykryć, główną kartę sieciową (ta która działa w aktualnym połączeniu)? W jaki sposób ma być przedstawiony wynik w monitorze-front? Aktualny download/upload w Mb/s?

Co do tabel w bazie, to skoro obliczenie aktualnego wykorzystania CPU jest dość skomplikowane, dane trzeba będzie gromadzić w taki sposób, żeby odwzorować strukturę Kamila na tabele.

Czyli można to przedstawić w taki sposób: tabela:

  1. MEASUREMENT: -id -cpuId /klucz obcy do tabeli CPU -memoryId /klucz obcy do MEMORY -networkId /klucz obcy do NETWORK
  2. CPU -id -user -sys -idle -...
  3. MEMORY -id -total -used -...
  4. NETWORK -id -mac -... (tutaj trzeba sprecyzować czy w ramach jednego pomiaru dostaniemy informacje z jednej karty sieciowej czy musimy dostać listę)
KamilSzelag commented 9 years ago

Co do network to tak jest teraz robione, tzn wykrywamy kartę, która jest aktywna. Przykładowo podpinasz się wifi i będzie informacja o karcie z wifi. Podpinasz się lan będzie informacja o lan.

Co do download/upload jest średnia ze 100ms.

Co do procesora to trzeba się dowiedzieć jak te wartości przeliczać później na procenty. Co do mac to tu jest jakiś bug, który będę musiał poprawić

salberski commented 9 years ago

Ok, to super, możesz wkleić aktualnego JSONa wychodzącego z sensora tutaj w wątku? :)

KamilSzelag commented 9 years ago

{"host":{"hostname":"Kamil-komputer","ip":"192.168.240.2"},"name":"192.168.243.108","measurement":{"mem":{"total":17039118336,"ram":16256,"used":4437909504,"actualUsed":4242898944},"cpu":{"user":87421169,"sys":198503186,"nice":0,"idle":728413279,"wait":0,"irq":2555326,"softIrq":0,"stolen":0,"total":2535844482},"network":{"mac":"20:89:84:FE:2D:39","ip":"192.168.243.108","stat":{"download":176500,"upload":23200}},"disk":{"read":0,"write":0}}}

Tylko to name będzie inne ale jeszcze nie mam pomysłu, chyba gdzieś wklejałem już to.

2015-04-04 17:34 GMT+02:00 Sebastian Alberski notifications@github.com:

Ok, to super, możesz wkleić aktualnego JSONa wychodzącego z sensora tutaj w wątku? :)

— Reply to this email directly or view it on GitHub https://github.com/DevelopersOrganizationFork/monitor-back/issues/8#issuecomment-89598923 .

@salberski napisz czy jest ok tzn disk zmieni się na total i used jeszcze, ale pewny nie jestem czy się da tak zrobić

salberski commented 9 years ago

Wygląda ok, pytanie do naszych bazodanowców czy mamy już jakąś zdalną bazę danych z którą możemy się połączyć i zapisywać dane z sensora?

Silwest commented 9 years ago

Szczerze to nie mam jeszcze pomyslu gdzie activemq mozemy postawic ...

Nie mniej jednak dorobie do monitora odbior z activemq i wtedy bedziemy myslec.

KamilSzelag commented 9 years ago

Z monitorem będzie podobny problem, powinien być jeden. Jak się nie da to może tymczasowo zrobimy tak: ActiveMQ połączymy z Monitorem i jak ktoś odpali u siebie monitor to razem z nim AcitveMQ, monitor będzie odpowiadał za zapisywanie do zdalnej bazy danych itp. Ustawienia powinny być tak skonstruowane, żeby wszystko działało na localhost i było łatwo modyfikowalne. Baza danych będzie jedna wspólna dzięki temu będzie można odczyt robić ze wszystkich pomiarów. W ramach jednego komputera będzie można postawić kilka wirtualnych maszyn i odpalić taki sensor, dzięki temu przetestujemy czy działa to tak jak jest w założeniach.

Jedyny problem jaki w tym widzę to jednoczesny insert do bazy, nie wiem jak to zadziała.

W dniu 27 kwietnia 2015 14:05 użytkownik Silwest notifications@github.com napisał:

Szczerze to nie mam jeszcze pomyslu gdzie activemq mozemy postawic ...

Nie mniej jednak dorobie do monitora odbior z activemq i wtedy bedziemy myslec.

— Reply to this email directly or view it on GitHub https://github.com/DevelopersOrganizationFork/monitor-back/issues/8#issuecomment-96622787 .

kamciak commented 9 years ago

new_db_mode

reynev commented 9 years ago

Tabela Sensor nie jest nadmiarowa? Skoro jeden host ma jeden sensor i wiele measurementów jest z jednego sensora, to chyba możnaby zmienić na: wiele measurementów jest z jednego hosta, nie? Bo teraz też jeden sensor może być w wielu hostach, przez co jeden measurement mógłby być z wielu hostów, a to raczej nie możliwe.

Poza tym podrzuciłem do klasy MeasurementDao metodę findByHostId(int hostId) do wypełnienia. Tzn podrzucę przy commicie.

Jeszcze pytanie o poszczególne measurementy - jak mam obiekt Measurement, to żeby mieć np. wyniki CPU muszę wyszukać obiekt CPU z id takim jak w MeasurementPK.cPUCPUId?

kamciak commented 9 years ago

Jeżeli chodzi o tabelę Sensor, to rzeczywiście, dyskutowaliśmy nad tym i tak, trzeba się będzie jej pozbyć - relacja 1 do 1 z hostem, wiec bez sensu trzymac dwie tabele. Dodatkowo id hosta ma byc jego adresem mac.

Jeżeli o measurementy chodzi, to jest dokladnie tak jak napisales. Zmiany struktury bazy wrzucimy pewnie dopiero jutro.

reynev commented 9 years ago

Jak mam uzyskać dostęp do klas DAO? Po prostu je stworzyć za pomocą new, czy przewidujecie jakieś wstrzykiwanie lub metodę statyczną?

Tomek3 commented 9 years ago

Na razie stworzyć za pomocą new. Jutro wrzucę UniversalService, w którym jedną metodą będzie można wrzucić wszystkie dane zawarte w jsonie.

reynev commented 9 years ago

Bardziej mi chodzi o odczytywanie danych z bazy. Bo piszesz o jsonie, który przychodzi z sensora, nie?

Tomek3 commented 9 years ago

Tak. Z każdej tabeli można wyciągać poprzez klasę DAO po id. Dodatkowo tak jak mówiłeś pomiary będą wyciągane poprzez findByHostId.