I N F O R M A T Y K A S T O S O W A N A E A I I E A G H Dokumentacja techniczna Mobilny asystent administratora Łukasz Świder Radosław Gabiga Łukasz Podolski Paweł Knap Marec Cabaj Maciej Stygar Aleksander Steliga 2011-11-28 Projekt zrealizowany w ramach przedmiotu Zarządzanie Projektem Informatycznym Informatyka Stosowana 2011
I. Wstęp. 1. Opis systemu. Celem projektu było stworzenie systemu umożliwiającemu administratorowi sprawdzanie stanu zarządzanych systemów w dowolnej chwili. Cały system składa się z trzech komponentów serwera zbierającego dane z monitorowanych systemów, agentów działających na monitorowanych maszynach oraz aplikacji dla administratora prezentującej stan systemów. Aplikacja dla administratora jest aplikacją mobilną, a jej platformą docelową Android (2.2+). 2. Komponenty i ich nazewnictwo w systemie. Serwer: AdminAssistantSerwer Agent: AdminAssistantAgent Aplikacja na androida: AndroidAssistant 3. Architektura System wykorzystuje architekturę klient-serwer, gdzie obsługiwane są dwa typy klientów agenci oraz aplikacja mobilna. Serwer obsługuje wielu agentów wysyłających dane, oraz aplikację mobilną udostępnia jej dane o stanie podłączonych agentów, a także realizuje jej żądania o natychmiastowym pobraniu nowego info o danym agencie. 4. Informacje o stanie maszyny przesyłane w wykonanym systemie. Informacje o procesorze i jego stanie(m.in. model, taktowanie, obciążenie poszczególnych rdzeni i ogółem) Informacje o systemie plików (systemu plików i napędy optyczne dostępne w systemie rozmiar, ilość wolnego/zajętego miejsca, zajęte miejsce procentowo, typ systemu plików) Informacje o pamięci w systemie (pamięć ogółem, zajęta, wolna, swap ogółem, zajęta, wolna, RAM) Informacje o interfejsie sieciowym(primary inerface, ip address, mac address, host name itp.) Lista uruchomionych procesów(pid, właściciel, czas startu, zajętość pamięci, nazwa) Up-time systemu Informacje o wersji systemu operacyjnego. II. Technologia wykonania systemu Całość systemu wykonana została w języku Java. Aplikacja mobilna stworzona została na platformę Android(2.2+). Dzięki użyciu języka Java system jest przenośny i komponenty mogą być uruchamiane
na maszynach z różnymi systemami operacyjnymi (więcej w punkcie platformy docelowe). Jedynym wymaganiem które musi spełniać system operacyjny do uruchomienia agenta lub serwera jest zainstalowane JRE (Java Runtime Environment). III. Podział na moduły i opis działania 1. Moduły własne. 1.1 Agent. Agent (AdminAssistantAgent) jego celem jest zbieranie i cykliczne wysyłanie danych o systemie na serwer, a także natychmiastowe wysyłanie danych na żądanie serwera. Składa się z następujących modułów. 1.1.1 Moduł pozyskiwania danych z systemu. Dane z systemu pozyskiwane są za pomocą biblioteki SIGAR (więcej w Moduły zewnętrzne ) SystemInfo jest to klasa w której przechowywane są wszystkie zebrane informacje o systemie łącznie z czasem pozyskania informacji i wprowadzonym id maszyny. Obiekt tej klasy wysyłany jest do serwera. SystemInfoBuilder jest to klasa której metoda getsysteminfo() wywołuje funkcje biblioteki SIGAR w celu stworzenia aktualnego info o stanie systemu. 1.1.2 Moduł komunikacji z serwerem. Agent nawiązuje połączenie z serwerem otwierając Socket o zadanym adresie ip i porcie. Do komunikacji wykorzystywane są strumienie Input/Output ObjectStream. Wszystkie komunikaty wysyłane są jako obiekty klasy String, natomiast dane jako obiekty klasy SystemInfo Agent wysyła do serwera swoje id jako żądanie zalogowania. Jeśli użytkownik o takim id nie jest aktualnie zalogowany serwer zwraca wiadomość accepted. Po zalogowaniu agent zaczyna cykliczne pytanie serwera o konieczność aktualizacji informacji o monitorowanym systemie. Co 1s wysyłany jest komunikat po czym sprawdzana jest odpowiedź serwera. Jeśli odpowiedź serwera brzmi request tworzone jest nowe info o stanie systemu i obiekt klasy SystemInfo jest wysyłany przez strumień. Dane o stanie systemu są także wysyłane cyklicznie co określony czas (określany przed uruchomieniem agenta) do strumienia wysyłany jest wtedy obiekt klasy SystemInfo. Client jest to klasa zapewniająca komunikację z serwerem. Posiada metody openconnection(), otwierającą połączenie z serwerem, login() logującą agenta na serwerze, oraz send() wysyłającą dane do serwera. xagent klasa obsługująca agenta z graficznym interfejsem użytkownika Agent klasa obsługująca agenta konsolowego 1.2 Serwer. Serwer (AdminAssistantServer) jego celem jest zbieranie danych wysyłanych przez agentów oraz udostępnianie tych danych aplikacji mobilnej, gdzie są one prezentowane administratorowi.
Połączenia z agentami są podtrzymywane przez cały czas ich działania. Połączenia z aplikacją mobilną kończą się zaraz po spełnieniu żądania. Składa się z następujących modułów Moduł obsługi przychodzących połączeń Klasa Server Metoda run() tworzy ServerSocket na zadanym porcie i w pętli akceptuje kolejne połączenia i zleca ich obsługę. Odczytuje ze strumienia dwa typy obiektów String jako żądanie zalogowania od nowego agenta oraz AndroidRequest jako żądanie od aplikacji mobilnej. 1.2.1 Moduł obsługi połączeń z agentami. Klasa ConnectionHandler klasa implementująca interfejs Runnable, obiekt tej klasy tworzony jest po podłączeniu się nowego agenta w celu obsługi połączenia z nim odbiór i wysyłanie komunikatów odbiór danych, wysyłanie żądań uaktualnienia. Dla obsługi połączenia z każdym agentem tworzony jest nowy wątek. Wątek kończy się po rozłączeniu agenta. 1.2.2 Moduł obsługi połączeń z aplikacją mobilną. Klasa AdnroidConnectionHandler klasa implementująca interfejs Runnable, obiekt tej klasy tworzony jest po otrzymaniu żądania od aplikacji mobilnej (AndroidRequest) w celu obsługi tego żądania. Dla obsługi żądania tworzony jest nowy wątek, który kończy się bezpośrednio po obsłudze żądania. 1.3 Aplikacja mobilna. Aplikacja mobilna na platformę Android (AndroidAssistant) aplikacja ma za zadanie pomagać administratorowi w monitorowaniu stanu systemów, poprzez prezentację ich kluczowych aspektów. Aplikacja pokazuje podłączonych agentów, umożliwia pobieranie ostatnich danych jakie wysłali oni na serwer, a także dostarcza możliwość wysłania do serwera żądania o natychmiastowe pobranie nowych danych od danego agenta po czym prezentuje otrzymane w odpowiedzi dane. Aplikacja komunikuje się z serwerem wykorzystując Socket. Wysyła do serwera obiekty typu AndroidRequest, otrzymuje od serwera listę z informacjami o stanie wszystkich podłączonych agentów, lub jednego agenta w odpowiedzi na żądanie jego update a ( klasa SystemInfo ). 2. Moduły zewnętrzne. 2.1 Hyperic SIGAR API. Agenci do pozyskiwania danych systemowych wykorzystują bibliotekę Hyperic SIGAR API http://support.hyperic.com/display/sigar/home, dostępną na licencji http://www.apache.org/licenses/license-2.0 biblioteka SIGAR API jest multiplatformowym rozwiązaniem dającym dostęp do danych systemowych takich jak informacje o pamięci, systemach plików, uruchomionych procesach itp. SIGAR API dostarcza bibliotekę języka Java która do pozyskiwania danych o systemach wykorzystuje natywne biblioteki stworzone w języku C dla poszczególnych systemów operacyjnych, dzięki czemu pozwala na monitorowanie stanu większości systemów operacyjnych dostępnych obecnie na rynku.
IV. Docelowe platformy uruchomieniowe Serwer może zostać uruchomiony na dowolnym systemie operacyjnym z zainstalowanym JRE. Aplikacja mobilna może zostać uruchomiony no dowolnym urządzeniu wyposażonym w platformę Android (2.2+) Agent może zostać uruchomiony na dowolnym systemie operacyjnym z zainstalowanym JRE oraz wspieranym przez Sigar większa część systemów rodzin Windows, Linux, Mac OS X, pełna lista wspieranych platform dostępna na http://www.apache.org/licenses/license-2.0