Как я могу получить количество заданий в очереди определенного типа в gearman? - PullRequest
13 голосов
/ 31 июля 2010

У меня есть несколько клиентов-механиков, посылающих работу, скажем, job1.

$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');

Требуется, скажем, 10 секунд, чтобы обработать эту работу. Я хочу отследить, сколько рабочих мест 'job1' ждут, чтобы работник работал над ними в любой момент времени. Как я могу это сделать?

Ответы [ 6 ]

31 голосов
/ 25 января 2011

Для быстрой проверки я использую эту однострочную строку bash:

(echo status ; sleep 0.1) | netcat 127.0.0.1 4730

Это открывает соединение с экземпляром gearman, работающим на localhost, и отправляет запрос status .Он содержит имя и количество заданий в этом экземпляре.Затем информацию можно обработать с помощью grep / awk / wc и т. Д. Для создания отчетов и оповещений.

Я также делаю то же самое с запросом working , который показывает все подключенныеработники.

(echo workers ; sleep 0.1) | netcat 127.0.0.1 4730

Сон состоит в том, чтобы держать соединение достаточно открытым для ответа.

Полный список административных команд и значения вывода приведены по адресу http://gearman.org/protocol/. Просто найдите «Административный протокол».

12 голосов
/ 30 апреля 2011

Чтобы расширить ответ d5ve, добавьте параметр -w для «тайм-аута» соединения netcat, иначе вы никогда не вернетесь в командную строку.

$ (echo status ; sleep 0.1) | sudo netcat 127.0.0.1 4730 -w 1
5 голосов
/ 19 января 2016
telnet localhost 4730
status

worker_name total_queue currently_running number_of_workers
job1         1          1                 9
2 голосов
/ 12 марта 2018

Я использую 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       |
+-----------------------+--------+-------+-------+---------+
1 голос
/ 20 января 2011

Gearmand имеет интерфейс Telnet, который вы можете запросить. (точные детали протокола можно найти на веб-сайте механика - http://gearman.org/?id=protocol)

Я использовал этот код здесь как отправную точку для своего собственного. https://github.com/liorbk/php/blob/master/GearmanTelnet.php (этот код совершенно хорош сам по себе, и вы можете отказаться от его использования из коробки)

Это не слишком приятное решение, но пока кто-то не улучшит интерфейс администратора Gearman, чтобы вы могли общаться напрямую через PHP или написал для него плагин, вы сами по себе

1 голос
/ 31 июля 2010

Не похоже, что есть какие-либо непосредственные способы получить эту информацию.

Вот несколько вариантов. Во-первых, , если вы можете захватывать дескрипторы заданий при их создании (поиск «Говоря о проверке статуса»), вы можете хранить их в некотором центральном месте и запрашивать их у любого клиента.

Во-вторых, вы можете настроить сервер Gearman на использование постоянных очередей , а затем самостоятельно выполнить запрос к очереди. Это может быть проще и чище двух вариантов.

...