Ребенок находится в зоне с центром в 57.988962, 56.204668 и радиусом 15м. Часы ребенка с периодичностью в 0 - 100 миллисекунд посылают свои координаты в некий сервис, задача которого состоит в том, что оповестить родителя этого ребенка, если ребенок покинул указанную зону. Необходимо реализовать сервис, который будет принимать http-post запросы, в теле которых передается json формате
{
"id": 0,
"child_id": 0,
"latitude": 57.9889708,
"longitude": 56.2047503,
"accuracy": 14 // погрешность в метрах (радиус)
}
Задача сервиса определить, когда ребенок уже точно покинул зону и уведомить родителя, совершив пустой http-get запрос по адресу "/notify/parent", чем раньше сервис уведомит родителя - тем лучше, но стоит помнить, что ложные уведомления могут нервировать родителя. Важно помнить, что координаты могут быть не точны и ориентироваться на их надежность не стоит.
Для симуляции ситуации в папке bin/ находится бинарник, который отправит около 300 координат в http-post запросах на указанный в аргументе target, после отправки останется слушать addr/notify/parent (addr указывается в аргументах вызова бинарника, по умолчанию 127.0.0.1:4080), когда сервис отправит запрос на addr/notify/parent в логе child-бинарника будет сообщение о том сколько секунд прошло с момента реального выхода и сервис завершит работу. Единственно правильного ответа нет, существует приближенный ответ.
Пример:
- Создаем свой сервис на go, запускаем его например на адресе 127.0.0.1:4079
- Запускаем: child_parent_simulator_darwin_amd64 start -target http://127.0.0.1:4079/set-coord -addr 127.0.0.1:4080
- Когда сервис определит выход из зоны он должен сделать пустой http-get запрос по адресу 127.0.0.1:4080/notify/parent
- После этого в stdout child_parent_simulator_darwin_amd64 должен быть лог о получении уведомления и его работа прекратится
Итогом решения задачи является ссылка на репозиторий с открытым исходным кодом и инструкцией по запуску сервиса для проверки