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 🙂
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.