Я хочу смочь запросить gearman сервер для определения, сколько экземпляров рабочего у меня есть выполнение (в основном, я хочу удостовериться это RunTaskA
доступно и RunTaskB
доступно, при отсутствии рабочих, справляющихся с теми задачами, я хочу смочь отослать предупреждение.
Там какой-либо путь состоит в том, чтобы сделать это?
Также: Безумные опоры, если Вы знаете о способе PHP запросить gearman сервер.
Править: Я знаю о PHP gearman расширение, которое доступно исходно, но я не ищу расширение представления задачи, мне нужно что-то, что позволяет мне запрашивать gearman сервер и видеть, сколько рабочих служит определенной задаче.
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;
}
}
Насколько мне известно, в gearman нет такого расширения. Сценарий управления и контроля рабочих процессов - это ваша ответственность. Вы можете попробовать одно из них для этой цели -
Supervisord - это приложение на Python для запуска приложений в фоновом режиме и их мониторинга. .
ИЛИ вы можете использовать менеджер передач Брайана Муна
Gearman имеет расширение php . Вы это еще не изучали?
Для быстрой проверки я использую эту однострочную строку 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 Просто выполните поиск по запросу «Административный протокол»