Esempio n. 1
0
 /**
  *
  * @param nc_search_indexer $indexer
  * @throws nc_search_exception
  * @return boolean true when task is finished
  */
 public function loop(nc_search_indexer $indexer)
 {
     $cycle_number = 0;
     $delay = (int) nc_search::get_setting('CrawlerDelay');
     while (true) {
         // сохранять задачу каждые X циклов
         if ($cycle_number % nc_search::get_setting('IndexerSaveTaskEveryNthCycle') == 0) {
             $indexer->save_task();
         }
         switch ($indexer->next()) {
             case nc_search_indexer::TASK_FINISHED:
                 return true;
                 // we're done
             // we're done
             case nc_search_indexer::TASK_STEP_FINISHED:
                 $delay && sleep($delay);
                 break;
             case nc_search_indexer::TASK_STEP_SKIPPED:
                 break;
             default:
                 throw new nc_search_exception("Incorrect return value from nc_search_indexer::next()");
         }
         $cycle_number++;
     }
 }
Esempio n. 2
0
 /**
  * Запуск переиндексации указанной области
  */
 public static function index_area($area_string, $runner_type = nc_search::INDEXING_NC_CRON)
 {
     $area = new nc_search_area($area_string);
     // task: состояние сессии переиндексации
     $task = new nc_search_indexer_task(array('area' => $area, 'rule_id' => $area->get('rule_id'), 'runner_type' => $runner_type));
     $task->save();
     // runner: стратегия
     $runner_classes = array(nc_search::INDEXING_NC_CRON => 'nc_search_indexer_runner_console', nc_search::INDEXING_CONSOLE => 'nc_search_indexer_runner_console', nc_search::INDEXING_BROWSER => 'nc_search_indexer_runner_web', nc_search::INDEXING_CONSOLE_BATCH => 'nc_search_indexer_runner_batch');
     if (!isset($runner_classes[$runner_type])) {
         throw new nc_search_exception("nc_search_indexer::index_area(): wrong runner type '{$runner_type}'");
     }
     $runner_class = $runner_classes[$runner_type];
     $indexer = new nc_search_indexer();
     return $indexer->start($task, new $runner_class());
 }
Esempio n. 3
0
 /**
  * Работает ли в данный момент переиндексация?
  * @return mixed   FALSE если индексирование не производится
  */
 public function is_reindexing()
 {
     return nc_search_indexer::get_current_task();
 }
Esempio n. 4
0
 /**
  *
  * @param nc_search_indexer $indexer
  * @throws nc_search_exception
  * @return boolean is task finished
  */
 public function loop(nc_search_indexer $indexer)
 {
     $cycle_number = 0;
     $save_cycles = nc_search::get_setting('IndexerSaveTaskEveryNthCycle');
     while (true) {
         // stop prematurely:
         if (!$this->check_connection()) {
             $indexer->cancel();
             return true;
             // nobody listens anyway
         }
         if ($this->interrupt_if_needed($indexer, $cycle_number)) {
             return false;
         }
         // сохранять задачу каждые X циклов
         if ($cycle_number % $save_cycles == 0) {
             $indexer->save_task();
         }
         switch ($indexer->next()) {
             case nc_search_indexer::TASK_FINISHED:
                 return true;
                 // we're done
             // we're done
             case nc_search_indexer::TASK_STEP_FINISHED:
                 if ($this->delay) {
                     if ($this->interrupt_if_needed($indexer, $cycle_number)) {
                         return false;
                     }
                     sleep($this->delay);
                 }
                 break;
             case nc_search_indexer::TASK_STEP_SKIPPED:
                 break;
             default:
                 throw new nc_search_exception("Incorrect return value from nc_search_indexer::next()");
         }
         $cycle_number++;
     }
 }
Esempio n. 5
0
require_once $ROOT_FOLDER . "connect_io.php";
$nc_core = nc_Core::get_object();
$nc_core->modules->load_env('ru');
$lang = $nc_core->lang->detect_lang();
require_once $ADMIN_FOLDER . "lang/" . $lang . ".php";
error_reporting(E_PARSE | E_ERROR | E_WARNING | E_USER_ERROR | E_USER_WARNING);
// замедление работы при необходимости
$delay = trim(nc_search::get_setting('IndexerConsoleSlowdownDelay'));
// секунды
if ($delay) {
    define('NC_SEARCH_INDEXER_DELAY_VALUE', (int) ($delay * 1000000));
    // микросекунды
    function nc_search_indexer_delay()
    {
        usleep(NC_SEARCH_INDEXER_DELAY_VALUE);
    }
    register_tick_function('nc_search_indexer_delay');
    declare (ticks=10000);
}
while (@ob_end_flush()) {
}
nc_search::register_logger(new nc_search_logger_plaintext(nc_search::LOG_CONSOLE));
$remove_hung_tasks = !nc_search::should('IndexerConsoleRestartHungTasks');
$current_task = nc_search_indexer::get_current_task($remove_hung_tasks);
$continue = $current_task instanceof nc_search_indexer_task && $current_task->get('runner_type') == nc_search::INDEXING_CONSOLE_BATCH && ($current_task->get('is_idle') || nc_search::should('IndexerConsoleRestartHungTasks') && time() > $current_task->get('last_activity') + nc_search::get_setting("IndexerRemoveIdleTasksAfter"));
if ($continue) {
    $indexer = new nc_search_indexer();
    $indexer->resume($current_task, new nc_search_indexer_runner_batch());
} else {
    nc_search_scheduler::run(nc_search::INDEXING_CONSOLE_BATCH);
}
Esempio n. 6
0
 /**
  * Переиндексация области
  */
 public function index_area($area_string, $runner_type = nc_search::INDEXING_NC_CRON)
 {
     // индексатор: получает и парсит информацию
     return nc_search_indexer::index_area($area_string, $runner_type);
 }
Esempio n. 7
0
    $this->halt(NETCAT_MODULE_SEARCH_ADMIN_INDEXING_IN_PROGRESS_ERROR, $current_task->get('area'));
}
nc_search::register_logger(new nc_search_logger_html());
nc_print_status(NETCAT_MODULE_SEARCH_ADMIN_INDEXING_IN_PROGRESS, 'info');
print "<div class='search_indexing'>";
while (@ob_end_flush()) {
}
if ($rule_id) {
    // первый запуск
    $done = $provider->index_area($rule_id, nc_search::INDEXING_BROWSER);
    // нам понадобится $curent_task для того, чтобы вытащить из неё token
    $current_task = $provider->is_reindexing();
} else {
    if ($continue && $current_task) {
        // продолжение переиндексации (после перезагрузки страницы)
        $indexer = new nc_search_indexer();
        $done = $indexer->resume($current_task, new nc_search_indexer_runner_web());
    }
}
// check again if we're done
if (!$current_task || $done) {
    $stats = "";
    if ($current_task) {
        $stats = sprintf("<br />" . NETCAT_MODULE_SEARCH_ADMIN_INDEXING_DONE_STATS, nc_search_util::format_seconds(time() - $current_task->get('start_time')), $current_task->get('total_processed'), $current_task->get('total_checked'), $current_task->get('total_not_found'), $current_task->get('total_deleted'));
    }
    nc_print_status(NETCAT_MODULE_SEARCH_ADMIN_INDEXING_DONE . $stats, 'ok');
    echo "<script type='text/javascript'>\$nc(document.body).scrollTop(100000);</script>";
} else {
    echo "<script type='text/javascript'>", "window.location = '?continue=1&token=", $current_task->get('token'), "';", "</script>\n";
}
print "</div>";