Moniotoring systemu – prawie finisz

2016-10-01

Podstrona „Informacje Ogólne” stała się dashboardem zawierającym informacje prezentowane w czasie rzeczywistym. Mamy więc zegary, które zmieniają swoje położenie w miarę utylizacji zasobów systemowych, wykres utylizacji interfejsu sieciowego oraz diodki sygnalizujące stan pracy uruchomionych usług.

Dashboard

Aby zrealizować to zadanie w głównej mierze oparłem się o bibliotekę Epoch. To ona odpowiada za wyświetlanie zegarów oraz rysowanie wykresów. Zegarem, którego wcześniej nie było jest ten od pomiaru utylizacji procesora. Aby zrealizować tą funkcjonalność zderzyłem się z pewnym problemem o którym nie wiedziałem, że istnieje 🙂

intel-processor
end

TODO

Funkcjonalnie temat monitoringu chcę zakończyć właśnie na dashboardzie wyświetlającym bieżącą utylizację systemu. Zbieranie długoterminowych statystyk i ich późniejsza analiza wykracza znacznie poza zakres tego projektu.

Z ważnych rzeczy zostało wyłączenie logowania zdarzeń na temat niedostępności usług na serwerach, które mają wyłączony monitoring. Obecnie zupełnie niepotrzebnie zapycha się tabelka z logami. Również zbędne są stare informacje na temat liczników danych z interfejsów sieciowych. One z kolei służą do rysowania wykresów interfejsu sieciowego.

Dopracowania wymaga też responsywność dashboardu. Przy niższych rozdzielczościach zlewają się na siebie zegary.

Pomiar utylizacji CPU

Początkowo sądziłem, że wystarczy zainicjować odpowiednią strukturę w programie i z niej po prostu odczytać potrzebne informacje. No więc trochę się pomyliłem, ale nie wiele 😉 Zacznę może od tego, że w tym celu wykorzystałem bibliotekę libgtop. Udostępnia ona strukturę o nazwie libgtop_cpu, która zawiera takie informacje jak cpu_total oraz cpu_idle. Są to liczniki, które zwracają liczbę taktów procesora, który spędził w danym obszarze. Liczniki przyrastają w sposób ciągły od momentu uruchomienia systemu. Cały trik polega teraz na tym, aby pobrać dane (cpu_total i cpu_idle), zapamiętać je w zmiennych statycznych a następnej iteracji pobrać dane ponownie i wykonać prostą arytmetykę, która zwróci nam procentowy przyrost danych.

 

Funkcja CPUusage(), którą stworzyłem to w głównej mierze code reuse funkcji cpu_get() z apletu appindicator. Dla swoich potrzeb zamiast wartości int zwracam string, który jest dla mnie prostszy w obsłudze w dalszym etapie przetwarzania informacji.