chore: 重写初始提交(清空历史,整理后全量提交)

This commit is contained in:
ywxapp
2026-08-16 16:54:14 +08:00
commit 6c1a106bc1
1808 changed files with 238144 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
<?php
// +----------------------------------------------------------------------
// | YwxApp [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2026-2036 http://ywxapp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: ywxapp<admin@ywxapp.cn>
// +----------------------------------------------------------------------
declare(strict_types=1);
namespace addon\haonav\command;
use think\console\Command;
use think\console\Input;
use think\console\input\Option;
use think\console\Output;
use addon\haonav\model\Links as LinksModel;
/**
* haonav 死链巡检命令
*
* 用法:
* php think haonav:checklinks # 全量检测
* php think haonav:checklinks --limit=50 # 只检测最久未检测的 50 条
*
* crontab 示例(每天凌晨 3 点全量):
* 0 3 * * * cd /path/to/site && php think haonav:checklinks >> runtime/haonav_check.log 2>&1
*/
class CheckLinks extends Command
{
protected function configure()
{
$this->setName('haonav:checklinks')
->addOption('limit', null, Option::VALUE_OPTIONAL, '本次最多检测条数(0=全部,按最久未检测优先)', '0')
->addOption('timeout', null, Option::VALUE_OPTIONAL, '单条检测超时秒数', '8')
->setDescription('haonav 网址导航死链巡检(更新 status_code / last_check_at');
}
protected function execute(Input $input, Output $output)
{
$limit = max(0, (int)$input->getOption('limit'));
$timeout = max(1, (int)$input->getOption('timeout'));
set_time_limit(0);
$output->writeln('[haonav] 开始死链巡检 limit=' . ($limit ?: '全部') . ' timeout=' . $timeout . 's ...');
$start = microtime(true);
$stats = $limit > 0
? LinksModel::checkBatch($limit, $timeout)
: LinksModel::checkAllLinks($timeout);
$output->writeln(sprintf(
'[haonav] 完成:共 %d 条,正常 %d,异常 %d,耗时 %.1fs',
$stats['total'],
$stats['ok'],
$stats['dead'],
microtime(true) - $start
));
if (!empty($stats['offlined'])) {
$output->writeln('[haonav] 已自动下线 ' . $stats['offlined'] . ' 条死链(阈值见 deadlink_threshold 配置)');
}
if (!empty($stats['recovered'])) {
$output->writeln('[haonav] 已自动恢复 ' . $stats['recovered'] . ' 条(deadlink_recover 已开启)');
}
return 0;
}
}