/** * Получение списка worker-ов * * @param string $worker имя воркеров, параметры которого нам нужно получить * @return array массив доступных worker-ов с их загрузкой и тд */ public function getWorkers($worker = null) { // получаем статистику по worker-ам \App::uses('CakeSocket', 'Network'); $Socket = new \CakeSocket($this->_config['server']); $Socket->connect(); $workers = array(); // делаем 2 замера с интервалом в 1 секунду для получение точного результата for ($i = 0; $i <= 2; $i++) { $Socket->write("status\n"); $content = $Socket->read(50000); $answers = explode("\n", trim($content)); foreach ($answers as $string) { $temp = explode("\t", $string); $title = trim($temp[0]); if (strpos($title, 'restart') !== false || strpos($title, '.') !== false) { continue; } if (!empty($workers[$title])) { // тут нас интересует только макс. значение доступных worker-ов $workers[$title][3] = intval($workers[$title][3]) < intval($temp[3]) ? $temp[3] : $workers[$title][3]; } else { $workers[$title] = $temp; } } sleep(1); } $Socket->disconnect(); return $worker ? $workers[$worker] : $workers; }
/** * Disconnect * * @return void * @throws SocketException */ protected function _disconnect() { $this->_smtpSend('QUIT', false); $this->_socket->disconnect(); }