Skip to content

Implementacja Monitora

grabarczyk-t edited this page Jun 1, 2014 · 11 revisions

Wstęp

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

Szczegóły implementacyjne

Wszystkie klasy i pakiety znajdują się w pakiecie pl.edu.agh.dsm.monitor

Ogólny opis działania

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

Konfiguracja

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

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

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

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" />

Implementacja kontrolerów REST

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.

Uruchomienie:

Uruchamianie Projektu: uruchamianie monitora

Clone this wiki locally