/** * Главный метод воркера Ping. * * Выплняет в цикле пинг хостов и запись в кэш Redis. * * @access public * @static */ public static function main() { DEBUG && (print "PingWorker::main(): begin\n"); // регистрация обработчика сигналов static::initSignalHandlers(); // подключение к СУБД и кэшу Redis - оба используются DB::open(); RKS::open(); // объявление массива очередей $queue_lists = ['ok', 'prefailed', 'failed']; // итерация массива очередей foreach ($queue_lists as $queue_list) { DEBUG && printf("PingWorker::main(): begin queue '%s'\n", $queue_list); // итерация очереди while (static::$worker_loop) { // получение следующей записи из очереди $label = static::fetch($queue_list); // записей нет - выход из цикла очереди if (!$label) { DEBUG && printf("NslookupWorker::main(): break loop '%s'\n", $queue_list); break; } // выполнение процедур для лейбла static::exec($label); } DEBUG && printf("PingWorker::main(): end queue '%s'\n", $queue_list); } DB::close(); RKS::close(); DEBUG && (print "PingWorker::main(): end\n\n"); }
/** * Главный метод Воркера Nslookup. * * Выплняет в цикле разрешение имён и запись в кэш Redis. * * @access public * @static */ public static function main() { DEBUG && (print "NslookupWorker::main(): begin\n"); // регистрация обработчика сигналов static::initSignalHandlers(); RKS::open(); // итерация очереди while (static::$worker_loop) { // получение следующей записи из очереди $label = static::fetch(); // записей нет - выход if (!$label) { DEBUG && (print "NslookupWorker::main(): break loop\n"); break; } // выполнение процедур для лейбла static::exec($label); } RKS::close(); DEBUG && (print "NslookupWorker::main(): end\n\n"); }
/** * Основной метод Мастера - Мастер-цикл. * * @access protected * @static */ protected static function masterLoop() { DEBUG && (print "Master::masterLoop(): begin\n"); cli_set_process_title('PingerService/Master/Loop'); while (static::$master_loop) { $sec = date('s'); DEBUG && printf("Master::masterLoop(): switch(%s)\n", $sec); switch ($sec) { case 55: DEBUG && (print "Master::masterLoop(): case 55 begin\n"); RKS::open(); static::populateNslookupQueue(); static::launchWorkers('Nslookup'); DEBUG && (print "Master::masterLoop(): case 55 end\n\n"); break; case 0: case 10: case 20: case 30: case 40: case 50: DEBUG && (print "Master::masterLoop(): case /10 begin\n"); RKS::open(); static::populatePingQueues(); static::launchWorkers('Ping'); DEBUG && (print "Master::masterLoop(): case /10 end\n\n"); break; } DEBUG && (print "Master::masterLoop(): sleep\n"); time_sleep_until(ceil(microtime(true))); } DEBUG && (print "Master::masterLoop(): end\n\n"); }