Aplikacja konsumująca API, przetwarzająca JSON na obiekt i wysyłająca dane we wiadomości e-mail z HTML
Kwarantanna. Dzień n-ty.
Newsletter Postmana nt. tzw. „spraw bieżących” ( https://covid-19-apis.postman.com/ ) zainspirował mnie do napisania aplikacji z wykorzystaniem tego API. Jako, że temat najwyraźniej niestety zostanie z nami jeszcze jakiś czas to myślę, że nie jest to ostateczna wersja projektu, swoją drogą przełomowego, bo wkraczam na nieznane terytoria popularnych bibliotek. Zaskakujące są ich możliwości konfiguracji, elastyczność (log4j).
Poniższy projekt ma charakter ćwiczeniowo-edukacyjno-warsztatowy, moją wersje aplikacji znajdziesz wkrótce na GitHubie
Cel
Otrzymać na skrzynkę raport dzienny ze statystyką zachorowań.
Wymagania
- pobrać dane z publicznego API
- dane w postaci JSONa przekształcić na obiekt
- przygotować strawny dla oka mail
- wysłać wiadomość
- plik konfiguracyjny
- przygotować środowisko do wdrożenia
- system budowania
- testy
- logi
Realizacja cz. 1 – kod
Składniki:
- IDE Intelij Idea
- Java 8 + Maven
+ JUnit4 - GSON – parsowanie plików JSON
- OkHttp – klient HTTP, użyjemy go do pobierania danych z zasobów darmowego API
- Apache Common, Mail – całkiem przyjemna biblioteka do wysyłania
- log4j2 – logowanie
Kod pod linkiem: https://github.com/connoisseur0/CoronaMailing
TODO:
- testy
- serializacja danych (DB)
- wykres
Realizacja cz. 2 – wdrożenie
Składniki
- Raspberry Pi 4
- CentOs 7 (AltArch)
- OpenJdk
- cron
- fat .jar (.jar z zależnościami)
- plik properties (.xml)
Na Malince zainstalowałem CentOs 7 (architektura ARM – nie jest tutaj dostępna 8), sieć,serwer FTP, przerzucam .jar z aplikacją. Instaluje OpenJdk.
Umieszczam aplikacje w katalogu.
Nie zapominamy o umieszczeniu pliku properties w tym samym katalogu!
Przechodze do katalogu i odpalam aplikację poleceniem:
1 |
java -jar app.jar |
Jednorazowe wykonanie aplikacji wysyła maila. Sprawdzam. Trafił na skrzynkę. Jest Ok.
Teraz mogę przystąpić do konfiguracji harmonogramu zadań – „cron”, tak bym dostawał codziennie wieczorem raport.
Upewniamy się czy czas na serwerze jest ok (TODO: konfiguracja synchronizacji z serwerem czasu).
Teraz tworzę skrypt .sh uruchamiajacy, ktory bedzie odpalany w harmonogramie:
1 |
java -jar app.jar |
Uruchamiam crontab przy uzyciu edytora nano:
1 |
EDITOR=nano crontab –e |
Dopisuję wiersz (jeśli chcesz dowiedzieć się więcej o składni to zapraszam do notatki [LINK[), skrypt start.sh odpala się codziennie o 19:30:
1 |
30 19 * * * /home/arek/start.sh |
Sprawdzamy wpis poleceniem.
1 |
crontab –l |
Powinien zwrócić wpis.
To tyle.
Pozostało czekać na wiadomość.