Jestem właśnie po testach aktualnie działającego kodu na swoich lokalnych virtualkach. Wygląda to dobrze. Osiągnąłem stan w którym wszystko działa tak jak to było przed refactoringiem. Osiągnąłem dwa główne cele: uporządkowałem strukturę danych konfiguracyjnych oraz pozbyłem się sztywnego limitu vhostów apacza.
// struktura przechowujaca konfiguracje hosta typedef struct hostconfig { sysuser * sysUsers; // konta uzytkownikow w systemie httpdata httpd; // konfiguracja serwera www char * datatype; // typ: hostconfig (server) lub sysinfo (client) int confVer; // wersja konfiguracji } hostconfig;
Główna struktura pakietu
Tak jak wspomniałem wcześniej. Główna struktura została maksymalnie uogólniona. Ostatecznie znalazły się w niej: węzeł do struktury zawierającej dane kont systemowych, zmienna httpd za którą kryją się węzły do vhostów oraz kont htpasswd. Każdy kolejny obszar konfiguracyjny będzie wiązał się z dodaniem jednego elementu na tym poziomie.
Poza tym znalazły się tutaj ogólne dane dotyczące całego pakietu: typ pakietu (datatype) oraz wersja konfiguracji (confVer).
// ogolna struktura danych przechowujaca konfiguracje serwera www typedef struct httpdata { vhostData * vhost; // vhosty apacza htpasswdData * htpasswd; // konta htpasswd } httpdata;
Struktura konfiguracyjna apacza
Posiada dwa składniki, które są węzłami list łączonych zawierających konfigurację wszystkich dodanych do systemu vhostów oraz kont htpasswd. Jeśli kiedyś zajdzie potrzeba rozszerzenia konfiguracji apacza to w tej właśnie strukturze pojawią się nowe elementy.
Podsumowanie i plany rozwoju
Nowa struktura danych pozwoli w przyszłości na rozbudowę kodu w zasadzie bezinwazyjną. Tworzy ona szkielet całego programu. Dołożenie kolejnych funkcjonalności będzie się wiązało jedynie z dołożeniem kolejnych elementów do struktury danych. To jeszcze nie wszystko. Dokonując tych zmian nie sądziłem, że to dopiero początek. Aby agent mógł ogarniać więcej niż jeden obszar konfiguracyjny konieczne będzie dołożenie dodatkowej logiki oraz poczynienie kilku zmian w bazie danych. W tej chwili działa to dość topornie i wychodzą jakieś dziwne bugi związane z aktualizacją wersji konfiguracji na hostach. Mam nadzieję w kolejnych wpisach informować o kolejnych zmianach 🙂
Mała dygresja na koniec wpisu. Koniec przebudowy kodu okazał się jego początkiem 🙂