Wpis z mikrobloga

Hej!

piszę w #python moduł monitorujący #rpi poprzez wykonywanie komend w #linux. Nic skomplikowanego, sprawdzanie połączenia z netem, sprawdzanie dostępnych aktualizacji, temperatury, kontrola led i wysyłanie powiadomień.

Podejście numer 1:
napisałem to funkcjami - jeden check jedna funkcja, skrypt wykonywał wszystkie funkcje z góry do dołu. Pojawiały się wady takiego rozwiązania: mimo, że funkcje był podobne (wykonaj komendę, sprawdź/obrób zawartość, ustal wynik, jeżeli NOK to ledy i powiadomienie) to implementacja nowej funkcjonaliści wiązała się z poprawienie każdej funkcji z osobna - fatalne skalowanie.

Podejście numer 2 (nieskończone):
przepisałem strukturę w klasy i wykorzystałem dziedziczenie. Mam klasę "check" i po niej dziedziczącą np. "checkNetwork", "checkUpdate" itd. każdy obiekt jest wątkiem działającym w pętli. Skalowanie się poprawiało bo wrzucam atrybut w parent'a i mam to we wszystkich child'ach. Mimo to nie jest idealnie bo np. zmiana led'ów nie jest logiczną częścią klasy "check" i nagle próba integracji funkcji "led" z klasami "check" nagle przysparza mi problemów. Nie wiem jak projektować klasy aby się dowolnie (typu push/poll) komunikowały ze sobą w czasie.

Zauważyłem, że to nie język programowania mnie ogranicza się sama logika, co polecacie do przeczytania? Czy to jakieś paradygmat programowania? Jakieś best practices? Styl jaki chcę osiągnąć ma jakąś nazwę? Programowanie "stanowe"?

#programowanie #linux
  • 3
@aHmuX: Message bus? Masz strumień wiadomości i każdy podsystem podłączony do całości może wysyłać i/lub odbierać wiadomości ze strumienia. System logowania jest zwyczajnie dodatkowym komponentem w całości, więc zawsze możesz wymienić na cokolwiek tam chcesz.
@aHmuX: ja bym wypierdzielił do JSON'a lub YAMLA wyniki z każdego checka, a jednemu - osobnemu serwisowi kazał cyklicznie interpretować zebrane dane (lub "on write" przy pomocy np. inotify).
Powstaje wtedy coś w rodzaju API pomiędzy warstwą sprawdzającą, a raportującą. Zobacz, że mniej więcej tak to też w linuxie wygląda: katalog /proc i /dev (też trochę /var)