Конфигурационные файлы
Сервер
О Dedicated Agents
Это не работает так, что мы сказали, что такой-то агент обрабатывает только это. По умолчанию все агенты выполняют все, но можно зароутить некоторые службы на конкретных агентов по лейблам агентов и по taskData признакам Это сделано для поддержки отказоустойчивости по умолчанию. Типа все везде в кластере, а если не так, то пишешь для чего конкретно и где.
Однако можно создать последнюю секцию без servicePredicates но с роутом по лейблам агентов и там указать агента или группу агентов на которых будет запущено все то, что не подошло верхним роутам
{
// то, что будет подставлено в заголовок дашборда. ОПЦИОНАЛЬНО
"title": "My App",
// порт, на котором запустится сервер запускатора
"port": "28341",
// порт брокера для связи агент-сервер. ОПЦИОНАЛЬНО. Если не указывать, будет выбран 61616 по умолчанию
"brokerBackendPort": 61616,
// порт брокера для пользователей запускатора. ОПЦИОНАЛЬНО. Если не указывать, порт вообще не будет открыт. По сути это экспериментальный порт для сокетов через запускатор
"brokerFrontendPort": 61613,
"storage": {
// Админские права нужны, так как запускатор сам создает схемы, таблицы, индексы, хранимки, накладывает патчи на свои таблицы и т.д.
// Время ожидания подключения в БД. По умолчанию 30, даже если не задано. Если не сможет подключится, сервис выключается
"readyWaitingSeconds": 30,
// имя БД. БД должна быть создана
"databaseName": "myapp.myapp_starter",
// Будет АВТОМАТИЧЕСКИ создана в БД если отсутствует Схема для хранения списка служб, задач и лога патчей.
"schemaName": "job",
// хост PG
"host": "build.myapp.lan",
// порт БД,
"port": "5432",
// логин/пароль СУПЕРПОЛЬЗОАВТЕЛЯ
"username": "myapp",
"password": "123"
},
"services": [
{
// информация по типу ServiceConfig (http://wiki.lan:8090/pages/viewpage.action?pageId=23298662#id-СправочникпоAPI-ServiceConfig)
"serviceId": "Core.LoadVkontakteSuggestions",
"workersCount": 1,
"tasksPerBlock": 1,
"serviceDisplayName": "My Service DisplayName",
"links": [
{
"text": "Devision",
"url": "https://devision.io"
}
]
},
{
"serviceId": "Core.ImportAccountAndCampaignsYandexDirect",
"workersCount": 20,
// добавляет в очередь пул для force задач, которые, например, надо запускать по клику пользователя
// для того, чтобы задачи шли в force очередь, нужно передавать параметр $force: true в data таска
"forceWorkersCount": 20,
"tasksPerBlock": 1,
// если нужно временно приостановить службу
"status": "STOPPED",
"links": [
{
"icon": "fa-search",
"url": "https://devision.io/meta"
},
{
"icon": "fa-google",
"url": "https://google.com"
}
],
"uniqueFields": [
"agencyLocalId"
],
// поддерживаются значения: auto, XXXs, XXXm, XXXh. Где XXX - кол-во, например 5s = 5 секунд. auto - формула разброса группы тасков так, чтобы они не стартанули в одно время
"renewOnFailTimeout": "5s",
// макс. кол-во попыток
"renewOnFailMaxAttempts": 2,
"subQueues": {
"causes": [
{
"filters": [
{
"taskDataPredicates": [
{
"key": "foo",
"operator": "IN",
"values": [
"777"
]
}
],
"workersCount": 2 // где task.data->foo==777 максимум 2 параллельных потока
},
{
"taskDataPredicates": [
{
"key": "foo",
"operator": "IN",
"values": [
"42"
]
}
],
"workersCount": 1 // где task.data->foo==42 максимум 1 параллельный поток
}
]
},
{
"filters": [
{
"taskDataPredicates": [
{
"key": "speed",
"operator": "IN",
"values": [
"slow"
]
}
],
"workersCount": 10
}
]
}
]
}
}
],
"agents": {
// Раздел про выделенные серверы для выполенения отдельного стека задач
"dedicatedRoutes": [
{
"description": "Например мы делаем тяжелые долгие задачи одного агентства на отдельных тачках, но все остальные задачи службы делаем на всех остальных тачках",
"servicePredicates": [
{
"key": "serviceId",
"operator": "IN",
"values": [
"service0",
"service2"
]
}
],
"routes": [
{
"agentLabelPredicates": [
{
"key": "dedict_company",
"operator": "IN",
"values": [
"rw"
]
}
],
"taskDataPredicates": [
{
"key": "company_id",
"operator": "IN",
"values": [
"42"
]
}
]
},
{
"agentLabelPredicates": [
{
"key": "dedict_company",
"operator": "IN",
"values": [
"efimov"
]
}
],
"taskDataPredicates": [
{
"key": "company_id",
"operator": "IN",
"values": [
"111111"
]
}
]
}
]
},
{
"description": "Например мы выделяем под отдульную задачу целый стек машин",
"servicePredicates": [
{
"key": "serviceId",
"operator": "IN",
"values": [
"renew_on_fail"
]
}
],
"routes": [
{
"agentLabelPredicates": [
{
"key": "dedict_renew_on_fail",
"operator": "IN",
"values": [
"renew_on_fail"
]
}
]
}
]
},
{
"description": "Например мы не хотим засорять выделенные сервера мелкими задачами любых других агентств",
"routes": [
{
"agentLabelPredicates": [
{
"key": "dedict_company",
"operator": "IN",
"values": [
"all"
]
}
]
}
]
}
]
}
}
Агент
{
"agentName": "PHP Agent",
// адрес сервера запускатора
"server": "http://127.0.0.1:28341/",
// скрипт, который будет вызывать агент для выполнения задач,
"script": "php /var/www/myapp/WorkerStarter.php",
// метки для определение dedicated routes
"labels": {
"mylabel": "qwerty",
"dedict_company": "all",
"dedict_renew_on_fail": "renew_on_fail"
}
}