Шаблон репозитория для практического трека «Go в DevOps».
Агент должен собирать метрики двух типов:
gauge, тип float64
counter, тип int64
В качестве источника метрик используйте пакет runtime.
К метрикам пакета runtime добавьте другие:
-
Имя метрики:
"PollCount": -
- тип
counter— счётчик, увеличивающийся на 1 при каждом обновлении метрики из пакета runtime (на каждый pollInterval — см. ниже).
- тип
-
Имя метрики:
"RandomValue": -
- тип
gauge— обновляемое рандомное значение.
- тип
-
По умолчанию приложение должно обновлять метрики из пакета
runtimeс заданной частотой: -
pollInterval— 2 секунды.
-
По умолчанию приложение должно отправлять метрики на сервер с заданной частотой:
-
reportInterval— 10 секунд.
Метрики нужно отправлять по протоколу HTTP, методом POST:
- по умолчанию на адрес:
127.0.0.1, порт:8080; - в формате:
http://<АДРЕС_СЕРВЕРА>/update/<ТИП_МЕТРИКИ>/<ИМЯ_МЕТРИКИ>/<ЗНАЧЕНИЕ_МЕТРИКИ>; Content-Type: text/plain.
Разработайте сервер по сбору рантайм-метрик, который собирает репорты от агентов по протоколу HTTP. Сервер должен собирать и хранить произвольные метрики двух типов:
- gauge, тип
float64, новое значение должно замещать предыдущее; - counter, тип
int64, новое значение должно добавляться к предыдущему (если оно ранее уже было известно серверу).
Метрики должны приниматься сервером по протоколу HTTP, методом POST:
- по умолчанию открывать порт
8080на адресе127.0.0.1; - в формате
http://<АДРЕС_СЕРВЕРА>/update/<ТИП_МЕТРИКИ>/<ИМЯ_МЕТРИКИ>/<ЗНАЧЕНИЕ_МЕТРИКИ>; Content-Type: text/plain;- при успешном приёме возвращать статус:
http.StatusOK.
Сервер должен возвращать текущее значение запрашиваемой метрики в текстовом виде по запросу:
GEThttp://<АДРЕС_СЕРВЕРА>/value/<ТИП_МЕТРИКИ>/<ИМЯ_МЕТРИКИ>(со статусомhttp.StatusOK).- При попытке запроса неизвестной серверу метрики сервер должен возвращать
http.StatusNotFound. - По запросу
GEThttp://<АДРЕС_СЕРВЕРА>/сервер должен отдаватьHTML-страничкусо списком имён и значений всех известных ему на текущий момент метрик.
Покройте код агента и сервера юнит-тестами.