Koniec przebudowy kodu

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.

cute-807306_1280
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 🙂