Данный сервис реализован на языке Go с использованием библиотеки Gin и JavaScript с библиотекой React. Для работы с PostgreSQL использовался драйвер pgx, для миграций lib/pq. Для миграции использовалась библиотека goose, миграции выполняются автоматически при запуске сервиса. Тип операции зависит от определенного запроса. Для данных из файла конфигурации используется Viper. При запуске сервиса происходят автоматические пинги контейнеров Docker, и при этом сохраняется информация в базу данных PostgreSQL. Для отправки и получения информации о пингах используется брокер RabbitMQ в качестве сервиса очередей. Для пингов используется библиотека pro-bing. На сайте, реализованном в JS, берутся данные через API Backend и отображаются данные по всем IP адресам в виде таблицы: IР адрес, время пинга, дата последней успешной попытки. Для отображения данных в html используется bootstrap, для запроса в API axios. Фронтенд разворачивается в контейнере с Nginx. Эндпоинты также доступны для запроса. Реализованы операции сохранения и получения. В Makefile прописаны возможные варианты запуска API и миграции. Приложение покрыто логами для информировани и дебага.
Для клонирования репозитория нужно использовать команду
git clone --recursive https://github.com/bllooop/monitoringapi.git
Либо сначала такую команду
git clone https://github.com/bllooop/monitoringapi.git
и далее
git submodule update --init --recursive
Для сборки и запуска приложения нужно ввести в консоль команду
make build
или эту команду
docker-compose up --build
http://localhost:3000/ Отобразится веб-сайт с данными по пингам контейнеров.
Также, можно напрямую выполнить запрос получения данных по запросу
curl --location --request GET 'http://localhost:8000/api/data/get' \
--header 'Content-Type: application/json' \
--data ''
После успешного запроса будет выведена информация по контейнерам, сохраненная в базу данных. Но основным методом использования приложения является открытие веб-сайта по ссылке выше.
Для различных методов и вызовов функций реализована обработка ошибок, в зависимости от категории ошибки, выдается текст и код ошибки.