Конфигурационные файлы

Сервер

О 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
    },
    {
      "serviceId": "Core.ImportAccountAndCampaignsYandexDirect",
      "workersCount": 20,
      "tasksPerBlock": 1,
      // если нужно временно приостановить службу
      "status": "STOPPED",
      "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"
  },
  // правила пулинга docker images
  //  агент будет пытаться пулить их каждую минуту
  "pullImages": {
    "images": ["apisgarpun/apis:garpun-worker-latest"]
  }
}