Какой-либо способ получить доступ к администрированию Gearman?

Я хочу смочь запросить gearman сервер для определения, сколько экземпляров рабочего у меня есть выполнение (в основном, я хочу удостовериться это RunTaskA доступно и RunTaskB доступно, при отсутствии рабочих, справляющихся с теми задачами, я хочу смочь отослать предупреждение.

Там какой-либо путь состоит в том, чтобы сделать это?

Также: Безумные опоры, если Вы знаете о способе PHP запросить gearman сервер.

Править: Я знаю о PHP gearman расширение, которое доступно исходно, но я не ищу расширение представления задачи, мне нужно что-то, что позволяет мне запрашивать gearman сервер и видеть, сколько рабочих служит определенной задаче.

25
задан Mitch Dempsey 2 May 2010 в 06:26
поделиться

5 ответов

class Waps_Gearman_Server {

    /**
     * @var string
     */
    protected $host = "127.0.0.1";
    /**
     * @var int
     */
    protected $port = 4730;

    /**
     * @param string $host
     * @param int $port
     */
    public function __construct($host=null,$port=null){
        if( !is_null($host) ){
            $this->host = $host;
        }
        if( !is_null($port) ){
            $this->port = $port;
        }
    }

    /**
     * @return array | null
     */
    public function getStatus(){
        $status = null;
        $handle = fsockopen($this->host,$this->port,$errorNumber,$errorString,30);
        if($handle!=null){
            fwrite($handle,"status\n");
            while (!feof($handle)) {
                $line = fgets($handle, 4096);
                if( $line==".\n"){
                    break;
                }
                if( preg_match("~^(.*)[ \t](\d+)[ \t](\d+)[ \t](\d+)~",$line,$matches) ){
                    $function = $matches[1];
                    $status['operations'][$function] = array(
                        'function' => $function,
                        'total' => $matches[2],
                        'running' => $matches[3],
                        'connectedWorkers' => $matches[4],
                    );
                }
            }
            fwrite($handle,"workers\n");
            while (!feof($handle)) {
                $line = fgets($handle, 4096);
                if( $line==".\n"){
                    break;
                }
                // FD IP-ADDRESS CLIENT-ID : FUNCTION
                if( preg_match("~^(\d+)[ \t](.*?)[ \t](.*?) : ?(.*)~",$line,$matches) ){
                    $fd = $matches[1];
                    $status['connections'][$fd] = array(
                        'fd' => $fd,
                        'ip' => $matches[2],
                        'id' => $matches[3],
                        'function' => $matches[4],
                    );
                }
            }
            fclose($handle);
        }

        return $status;
    }

}
36
ответ дан 28 November 2019 в 18:13
поделиться

Насколько мне известно, в gearman нет такого расширения. Сценарий управления и контроля рабочих процессов - это ваша ответственность. Вы можете попробовать одно из них для этой цели -

Supervisord - это приложение на Python для запуска приложений в фоновом режиме и их мониторинга. .

ИЛИ вы можете использовать менеджер передач Брайана Муна

1
ответ дан 28 November 2019 в 18:13
поделиться
0
ответ дан 28 November 2019 в 18:13
поделиться

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

# (echo status ; sleep 0.1) | netcat 127.0.0.1 4730

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

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

# (echo workers ; sleep 0.1) | netcat 127.0.0.1 4730

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

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

25
ответ дан 28 November 2019 в 18:13
поделиться

Думаю, вам это нужно http://github.com/liorbk/php

1
ответ дан 28 November 2019 в 18:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: