Esempio n. 1
0
 /**
  * Главный метод воркера 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");
 }
Esempio n. 3
0
 /**
  * Заполнение слотов, выделяемых Воркерам.
  * 
  * @access protected
  * @static
  */
 protected static function recalcSlots()
 {
     DEBUG && (print "Master::recalcSlots(): begin\n");
     if (Config::$fork_threads) {
         DEBUG && printf("Master::recalcSlots(): preconfigured size = %d\n", Config::$fork_threads);
         if (count(static::$pid_slots) != Config::$fork_threads) {
             static::$pid_slots = range(1, Config::$fork_threads);
         }
     } else {
         $cnt = min(32, count(RKS::getInstance()->sMembers('hosts:enabled')));
         DEBUG && printf("Master::recalcSlots(): dynamic size = %d\n", $cnt);
         static::$pid_slots = range(1, $cnt);
         RKS::close();
     }
     DEBUG && (print "Master::recalcSlots(): end\n\n");
 }