example_worker_pool
Содержание
О проекте
Проект для демонстрации варианта построения сервиса.
Он дает возможность создавать неограниченное количество прототипов приложения, путем добавления их в конфигурационный файл.
Посмотреть версию программы можно задав ключ при запуске. Если используется этот ключ, программа только выведет версию, но не запустится:
--version
Пример вывода
go run main.go -version
1.0.0
Реализована проверка наличия параметров в командной строке; если их нет, значения параметров берутся из конфигурационного файла (.yaml
). Указание пути к конфигурационному файлу в командной строке при запуске программы:
-configPath=PATH
где PATH
— полный путь до конфигурационного файла.
Для просмотра тестов и покрытия пакета config, можно вызвать команду make.
Структура конфигурационного файла (Необходимо соблюдать вложенность)
# Параметры логгера
logger:
# Уровень логирования (INFO|WARN|ERROR|FATAL|DEBUG|TRACE)
logLevel: DEBUG
# Директория сохранения лог файла (рекомендуется не использовать / в конце)
logDir: ./
# Имя лог файла, расширение .log можно не использовать, также с этого имени будут начинаться имена лог файлов логгеров и других файлов, создаваемых ими. По умолчанию используется monitoring
logFile:
# Режим логирования (stdout(вывод в консоль), file(запись в файл), оставить поле пустым(stdout+file))
logMode:
# Перезапись лог файла при старте работы
rewriteLog: true
sleeps:
# Время, на остаток от которого воркер уснет
sleepService: 5s
# Параметры API для формирования отчетов
apiControl:
# Запускать ли API
use: true
# Адрес API
apiHost:
# Порт API
apiPort:
# Параметры каждого отдельного воркера
workers:
# Включить воркер
- use: true
# Имя воркера (оно будет применяться во всех файлах, создаваемых воркером)
name: test1
- use: false
name: test2
Перечитывание конфигурационного файла
В проекте реализовано перечитывание конфигурационного файла при его изменении.
После сохранения конфигурационного файла при запущенном приложении, оно может пойти по 2 вариантам работы.
1 вариант: если все воркеры на данный момент отработали и сервис остановлен на время, указанное в sleepService, происходит моментальное перечитывание и перезапуск всего экземпляра работы приложения и воркеры начинают работать.
2 вариант: если в момент сохранения конфигурационного файла работает воркер, то приложение дождется окончания его работы, не запустит последующие воркеры (при их наличии) и после этого начнет перечитывание как в 1 варианте.
Работа API
API запускается и ожидает запросы по адресу:
http://$apiHost:$apiPort/api/status/
Ожидается POST запрос вида:
{
"message": "get status"
}
С помощью канала воркеры способны отправлять ошибки на API, для их сохранения и отдачи по запросу. API сохраняет каждую ошибку в файл с именем $logDir/$logFile_error.log
.
По запросу ответ будет отправлен получателю в виде json:
{
"countErrors": 0
}
Счетчик ошибок обнуляется после каждого опроса для корректности данных. Файл с ошибками читается zabbix-agent и отсылает расшифровки ошибок на сервер zabbix. По достижении 10 запросов на апи, файл с ошибками удаляется.