-
Notifications
You must be signed in to change notification settings - Fork 0
Implementacja Monitora
DSM-monitor jest modułem projektu DSM, którego zadaniem jest zbieranie pomiarów od monitorów oraz udostępnianie ich klientom.
Monitor napisany został w Javie z użyciem Spring Framework. W implementacji została wykorzystana technologia spring-boot, dzięki której konfiguracja serwera została znacząco uproszczona. Wspólne elementy Katalogu i Monitora znajdują się w DSM-common.jar. Zależności między modułowe są obsługiwane za pomocą technologi Maven
Wszystkie klasy i pakiety znajdują się w pakiecie pl.edu.agh.dsm.monitor
Główną klasą programu jest MonitorConfig. Moduł umożliwia zbieranie pomiarów od sensorów za pomocą protokołu UDP. Komunikację z monitorem i rejestrowanie dokonywanych pomiarów oraz udostępnianie zdefiniowanych pomiarów przez klientów. Do komunikacji wykorzystywany jest REST API
Główne elementy konfiguracyjne to port, na którym działa aplikacja, adres katalogu oraz port do nasłuchiwania pakietów UDP Konfiguracja
Struktura projektu opiera się na ideach MVC i DDD (pomysł zaczerpnięty z prezentacji Crafted Design).
Główne założenia:
- Podział na core i mechanizmy dostępu (np. web, rest, udp, itp)
Struktura Core'a:
- package
core.model- zawiera wyraźnie umiejscowione obiekty domenowe- wiadomo co stanowi sedno aplikacji
- tu umiejscowione są wszystkie encje domenowe i klasy pomocnicze z nimi związane
- funkcjonalności umiejscowione są w serwisach domenowych
- zawiera interfejsy do komunikacji z zewnętrznymi obiektami (np. bazy danych, web serwisy)
- package
core.usecase- przejrzysty interfejs aplikacji- wiadomo co aplikacja robi
- stanowi fasadę aplikacji dla użytkowników
- usecase'y wywołują odpowiednie serwisy domenowe, definiują flow operacji, a nie jej implementację
- jest odzwierciedleniem wymagań funkcjonalnych użytkownika
- package
core.infrastructure- osobne miejsce na infrastrukturę aplikacji- integracja z technologiami i usługami
- funkcjonalności i obiekty, które bezpośrednio nie stanowią domeny aplikacji
Struktura Web
- package
web.controller- obsługa żądań - wywołanie usecase'ów - package
web.view- obiekty definiujące widok, walidatory - package
web.infrastructure- parsery, konwertery
Komunikacja z katalogiem zawarta jest w klasie CatalogueProxyImpl. Do wysyłania wiadomości wykorzystano Spring RestTemplate. Jeżeli katalog będzie nieaktywny monitor nie będzie mógł dodać własnych pomiarów.
Komunikacja z Sensorem odbywa się poprzez protokół UDP. Do implementacji socket'u wykorzystano spring-integration. Konfiguracja socket'u znajduje się w pliku udp-client-context.xml. Wykorzystanie wyżej wymienionego modułu pozwoliło oddzielić logikę związaną z komunikacją od logiki biznesowej.
<int-ip:udp-inbound-channel-adapter
id="receiverChannel" channel="objectMapperInput" port="${udp.client.port}"
multicast="false" check-length="false" pool-size="${udp.client.pool-size}" lookup-host="false" />
<int:json-to-object-transformer
input-channel="objectMapperInput" type="pl.edu.agh.dsm.monitor.dto.SimpleMeasurementDataDto"
output-channel="processSensorData" />
<int:service-activator input-channel="processSensorData"
ref="sensorDataReceiverService" method="processSensorData" />
<bean id="sensorDataReceiverService" class="pl.edu.agh.dsm.monitor.service.SensorDataReceiverServiceImpl" />
W klasach MeasurementsController, ComplexMeasurementsController oraz SystemResourcesController zaimplementowano mapowania adresów URL zgodnych z API REST. Przy tworzeniu kontrolerów wykorzystano spring-mvc oraz spring-hal. Większa część konfiguracji opiera się na adnotacjach.