bibhamrokhanpin/wp-content/plugins/litespeed-cache/cli/crawler.cls.php
2024-04-10 17:46:06 +05:45

232 lines
4.8 KiB
PHP

<?php
namespace LiteSpeed\CLI;
defined('WPINC') || exit();
use LiteSpeed\Debug2;
use LiteSpeed\Base;
use LiteSpeed\Task;
use LiteSpeed\Crawler as Crawler2;
use WP_CLI;
/**
* Crawler
*/
class Crawler extends Base
{
private $__crawler;
public function __construct()
{
Debug2::debug('CLI_Crawler init');
$this->__crawler = Crawler2::cls();
}
/**
* List all crawler
*
* ## OPTIONS
*
* ## EXAMPLES
*
* # List all crawlers
* $ wp litespeed-crawler l
*
*/
public function l()
{
$this->list();
}
/**
* List all crawler
*
* ## OPTIONS
*
* ## EXAMPLES
*
* # List all crawlers
* $ wp litespeed-crawler list
*
*/
public function list()
{
$crawler_list = $this->__crawler->list_crawlers();
$summary = Crawler2::get_summary();
if ($summary['curr_crawler'] >= count($crawler_list)) {
$summary['curr_crawler'] = 0;
}
$is_running = time() - $summary['is_running'] <= $this->conf(Base::O_CRAWLER_RUN_DURATION);
$seconds = $this->conf(Base::O_CRAWLER_RUN_INTERVAL);
if ($seconds > 0) {
$recurrence = '';
$hours = (int) floor($seconds / 3600);
if ($hours) {
if ($hours > 1) {
$recurrence .= sprintf(__('%d hours', 'litespeed-cache'), $hours);
} else {
$recurrence .= sprintf(__('%d hour', 'litespeed-cache'), $hours);
}
}
$minutes = (int) floor(($seconds % 3600) / 60);
if ($minutes) {
$recurrence .= ' ';
if ($minutes > 1) {
$recurrence .= sprintf(__('%d minutes', 'litespeed-cache'), $minutes);
} else {
$recurrence .= sprintf(__('%d minute', 'litespeed-cache'), $minutes);
}
}
}
$list = array();
foreach ($crawler_list as $i => $v) {
$hit = !empty($summary['crawler_stats'][$i]['H']) ? $summary['crawler_stats'][$i]['H'] : 0;
$miss = !empty($summary['crawler_stats'][$i]['M']) ? $summary['crawler_stats'][$i]['M'] : 0;
$blacklisted = !empty($summary['crawler_stats'][$i]['B']) ? $summary['crawler_stats'][$i]['B'] : 0;
$blacklisted += !empty($summary['crawler_stats'][$i]['N']) ? $summary['crawler_stats'][$i]['N'] : 0;
if (isset($summary['crawler_stats'][$i]['W'])) {
$waiting = $summary['crawler_stats'][$i]['W'] ?: 0;
} else {
$waiting = $summary['list_size'] - $hit - $miss - $blacklisted;
}
$analytics = 'Waiting: ' . $waiting;
$analytics .= ' Hit: ' . $hit;
$analytics .= ' Miss: ' . $miss;
$analytics .= ' Blocked: ' . $blacklisted;
$running = '';
if ($i == $summary['curr_crawler']) {
$running = 'Pos: ' . ($summary['last_pos'] + 1);
if ($is_running) {
$running .= '(Running)';
}
}
$status = $this->__crawler->is_active($i) ? '✅' : '❌';
$list[] = array(
'ID' => $i + 1,
'Name' => wp_strip_all_tags($v['title']),
'Frequency' => $recurrence,
'Status' => $status,
'Analytics' => $analytics,
'Running' => $running,
);
}
WP_CLI\Utils\format_items('table', $list, array('ID', 'Name', 'Frequency', 'Status', 'Analytics', 'Running'));
}
/**
* Enable one crawler
*
* ## OPTIONS
*
* ## EXAMPLES
*
* # Turn on 2nd crawler
* $ wp litespeed-crawler enable 2
*
*/
public function enable($args)
{
$id = $args[0] - 1;
if ($this->__crawler->is_active($id)) {
WP_CLI::error('ID #' . $id . ' had been enabled');
return;
}
$this->__crawler->toggle_activeness($id);
WP_CLI::success('Enabled crawler #' . $id);
}
/**
* Disable one crawler
*
* ## OPTIONS
*
* ## EXAMPLES
*
* # Turn off 1st crawler
* $ wp litespeed-crawler disable 1
*
*/
public function disable($args)
{
$id = $args[0] - 1;
if (!$this->__crawler->is_active($id)) {
WP_CLI::error('ID #' . $id . ' has been disabled');
return;
}
$this->__crawler->toggle_activeness($id);
WP_CLI::success('Disabled crawler #' . $id);
}
/**
* Run crawling
*
* ## OPTIONS
*
* ## EXAMPLES
*
* # Start crawling
* $ wp litespeed-crawler r
*
*/
public function r()
{
$this->run();
}
/**
* Run crawling
*
* ## OPTIONS
*
* ## EXAMPLES
*
* # Start crawling
* $ wp litespeed-crawler run
*
*/
public function run()
{
self::debug('⚠️⚠️⚠️ Forced take over lane (CLI)');
$this->__crawler->Release_lane();
Task::async_call('crawler');
$summary = Crawler2::get_summary();
WP_CLI::success('Start crawling. Current crawler #' . ($summary['curr_crawler'] + 1) . ' [position] ' . $summary['last_pos'] . ' [total] ' . $summary['list_size']);
}
/**
* Reset position
*
* ## OPTIONS
*
* ## EXAMPLES
*
* # Reset crawler position
* $ wp litespeed-crawler reset
*
*/
public function reset()
{
$this->__crawler->reset_pos();
$summary = Crawler2::get_summary();
WP_CLI::success('Reset position. Current crawler #' . ($summary['curr_crawler'] + 1) . ' [position] ' . $summary['last_pos'] . ' [total] ' . $summary['list_size']);
}
}