Kolejny krok (a może kroczek)! Tym razem, nawiązując do ogólnego schematu projektu (z tego artykułu), skupiłem się na części "Report site" - wynik tego "skupienia" dostępny jest tutaj (również z menu: projekty->rummager->statystyki). Efekt może i rozmachem nie powala, ale... najważniejsze, że jest "szkielet", "podstawa", "fundament" - resztę dopracuje się z czasem :) W sumie zależy on (ów "efekt") w dużej mierze od znajomości narzędzia "highcharts", a ja na razie nie znam go zbyt dobrze, strona wizualna jest więc taka jaką można uzyskać "out-of-the-box" - bez kombinowania.
Statystyki mają dziś swoją premierę w dwóch odsłonach - pierwsza to dostęp do statystyk zbieranych przez narzędzie Cacti, druga odsłona to implementacja usługi "Report site". O statystykach Cacti za chwilkę, teraz trochę technicznych szczegółów co do "Report site". Nawiązując ponownie do schematu projektu - bazą dla statystyk jest usługa "Service 2", implementowana przez serwis SOAPowy dostępny pod tym adresem (github). Oczywiście statystyki mogłyby być generowane bazując bezpośrednio na serwisie "Service 2", ale "Report site" zaimplementowany został z warstwą pośredniczącą. Dane z "Service 2" (dokładnie funkcji getScanStatsPerDay) są pobierane cyklicznie przez zadanie cron i przechowywane w lokalnej bazie danych serwisu "tools.luka.sh". Również ten serwis generuje stronę ze statystykami, dostępna jest ona pod tym adresem (teraz widzę, że favicon - na razie - zdradza framework wykorzystany przy budowie tego narzędzia :)). Tak generowane statystyki są wyświetlane na dedykowanej stronie w niniejszym serwisie. Opóźnienie (wynikające głównie ze sposobu generowania statystyk) nie powinno być większe niż dwa dni - większe oznacza jakiś problem. Statystyki przedstawiają dwa aspekty pracy serwisu w dwóch skalach czasowych - miesięczne i dzienne (dla bieżącego miesiąca) zestawienie ilości przeskanowanych hostów oraz ilości znalezionych serwerów smtp (na porcie 25) - czyli wydajność pracy procesów typu "workerSMTP".
Statystyki Cacti - dostępne pod tym adresem (hmmm... safari zgłasza problem: "Possible Phishing Site" dla powyższego adresu, jeżeli ktoś rzeczywiście obawia się o bezpieczeństwo można wykorzystać ten link a następnie autoryzować się jako użytkownik "guest" z hasłem "guest") - to informacje o wykorzystaniu dostępnych zasobów (CPU/RAM), wydajności proszczególnych procesów (serwer http / relacyjna baza danych) oraz całego systemu (w ujęciu globalnym). W skali roku widać dużą korelację pomiędzy statystyką przeskanowanych hostów a wykresami takimi jak wykorzystanie pasma czy ilość żądań do serwera http (co wydaje się być oczywiste :))... Wykorzystanie przestrzeni dyskowej zostało znacznie ograniczone przez wprowadzenie w sierpniu "odśmiecania" (proces wykonywany raz na tydzień, dodany w tym merdżu do branch-a develop). Również w sierpniu aplikacja dostała mocnej czkawki (co widać na wykresie Load Avarage), doprowadziło to nawet do wyłączenia serwera przez operatora usługi VPS, aktualnie stopniowo znów "podkręcam" obciążenie systemu (przez liczbę działających "worker-ów") starając się utrzymać stopień obciążenia na "średnim" poziomie, ale nie jest to niestety takie proste... wykorzystana przez operatora technologia wirtualizacji wydaje się posiadać trochę wad (np. niedostępne są dla mnie statystyki wykorzystania dysku (iostat) , oraz interferencja hostowanych systemów wydaje się być dość znaczna - dla tej samej liczby pracujących "worker-ów" system może wykazywać różne obciążenie w zależności od obciążenia przez pozostałe hostowane systemy - czyli systemy innych klientów operatora...). Oczywiście - wiele jest do optymalizacji, np. wdrożenie systemu kolejek (jak RabbitMQ) co mogłoby odciążyć bazę danych i pozwolić na zwiększenie (być może) maksymalnej ilości pracujących równolegle "worker-ów"... ale to aktualnie ma mały priorytet - skanowanie blisko 2mln hostów na dobę jest na razie wystarczające - teraz czas na pracę nad nowymi typami "worker-ów", które na podstawie aktualnie gromadzonych informacji będą realizować ich dalszą weryfikację... tak, teraz czas na domknięcie projektu w sferze "funkcjonalnej" :)