Open salberski opened 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.
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)
I jeszcze jedno: czy każdy sensor będzie miał taką samą listę pomiarów (cpuUsage, memoryUsage, discUsage)?
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?
@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.
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).
{ "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.
Mam dwa pytania do tego jsona:
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.
Jeszcze jedno pytanie:
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.
@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
Sorry, przypadkowo zamknąłem Issue...
"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:
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ć
Ok, to super, możesz wkleić aktualnego JSONa wychodzącego z sensora tutaj w wątku? :)
{"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ć
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?
Szczerze to nie mam jeszcze pomyslu gdzie activemq mozemy postawic ...
Nie mniej jednak dorobie do monitora odbior z activemq i wtedy bedziemy myslec.
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 .
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?
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.
Jak mam uzyskać dostęp do klas DAO? Po prostu je stworzyć za pomocą new, czy przewidujecie jakieś wstrzykiwanie lub metodę statyczną?
Na razie stworzyć za pomocą new. Jutro wrzucę UniversalService, w którym jedną metodą będzie można wrzucić wszystkie dane zawarte w jsonie.
Bardziej mi chodzi o odczytywanie danych z bazy. Bo piszesz o jsonie, który przychodzi z sensora, nie?
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.
@kamciak i @Tomek3 Dołożę moduł
monitor-persistence
do projektumonitor-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łumonitor-persistence
.