Как я могу получить количество заданий в очереди определенного типа в gearman?
У меня есть несколько клиентов gearman, отправляющих работу, скажем job1.
$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');
для обработки этого задания требуется, скажем, 10 секунд. Я хочу отслеживать, сколько заданий "job1" ждут работника, чтобы работать над ними в любой момент времени. Как я могу это сделать?
6 ответов
для быстрой проверки я использую этот bash one-liner:
(echo status ; sleep 0.1) | netcat 127.0.0.1 4730
это открывает соединение с экземпляром gearman, запущенным на localhost, и отправляет статус запрос. Содержит имя и количество заданий для данного экземпляра. Затем информация может быть обработана с помощью grep
/awk
/wc
etc. для отчетности и оповещения.
Я также делаю то же самое с работники запрос, который показывает все подключенные работники.
(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730
сон, чтобы держать соединение открытым достаточно долго для ответа.
полный список административных команд, и что означает вывод на http://gearman.org/protocol/. Просто найдите "административный протокол".
чтобы развернуть ответ d5ve, добавьте параметр-w в "тайм-аут" вашего подключения netcat, иначе вы никогда не вернетесь в командную строку.
$ (echo status ; sleep 0.1) | sudo netcat 127.0.0.1 4730 -w 1
не похоже, что есть какие-либо немедленные способы получить эту информацию.
вот несколько вариантов. Во-первых, Если вы можете захватить дескрипторы заданий при их создании (поиск "говоря о проверке статуса"), вы можете хранить их в каком-то центральном месте и запрашивать о них у любого клиента.
во-вторых, вы можете настроить сервер Gearman на использование постоянные очереди, а затем выполните запрос к очереди самостоятельно. Это может быть проще и чище из двух вариантов.
Gearmand есть телнет можно запросить. (точные детали протокола можно найти на веб-сайте gearman -http://gearman.org/?id=protocol)
Я использовал этот код в качестве отправной точки для прокатки мои собственные. https://github.com/liorbk/php/blob/master/GearmanTelnet.php (этот код отлично подходит сам по себе, и вы должны иметь возможность отказаться использовать его из коробки)
Это менее красивое решение, но пока кто-то улучшает интерфейс администратора gearman, так что вы можете говорить непосредственно через PHP или пишет плагин для него, вы сами по себе
Я использую gearman_top
, которая является частью mod-gearman.
пример вывода на сайт:
+-----------------------+--------+-------+-------+---------+
| Name | Worker | Avail | Queue | Running |
+-----------------------+--------+-------+-------+---------+
| check_results | 1 | 1 | 0 | 0 |
| host | 3 | 3 | 0 | 0 |
| service | 3 | 3 | 0 | 0 |
| eventhandler | 3 | 3 | 0 | 0 |
| servicegroup_jmx4perl | 3 | 3 | 0 | 0 |
| hostgroup_japan | 3 | 3 | 0 | 0 |
+-----------------------+--------+-------+-------+---------+