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 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");
 }