This commit is contained in:
Your Name
2026-04-16 16:14:20 +08:00
parent 327c5f506c
commit af0b09daee
4 changed files with 321 additions and 8 deletions

View File

@@ -6,6 +6,8 @@ namespace app\common\helper;
class DomainSpiderCrawlWorkbenchHelper
{
protected const MAX_AGGREGATE_RUNS = 12;
protected static function codeRootFromStorageRoot(string $storageRoot): string
{
return rtrim(dirname(rtrim($storageRoot, '/')), '/');
@@ -308,7 +310,7 @@ class DomainSpiderCrawlWorkbenchHelper
continue;
}
$items[] = [
'summary' => $summary,
'summary_path' => (string)$summaryPath,
'normalized' => self::normalizeRunSummary($publicRoot, $summary, (string)$summaryPath),
'generated_at_ts' => $generatedTimestamp,
];
@@ -336,7 +338,14 @@ class DomainSpiderCrawlWorkbenchHelper
$anomalyRecords = [];
$latestGeneratedAt = '';
foreach ($runEntries as $entry) {
$summary = is_array($entry['summary'] ?? null) ? (array)$entry['summary'] : [];
$summaryPath = trim((string)($entry['summary_path'] ?? ''));
if ($summaryPath === '') {
continue;
}
$summary = self::readJsonFile($summaryPath);
if (empty($summary)) {
continue;
}
$generatedAt = trim((string)($summary['generated_at'] ?? ''));
if ($generatedAt !== '' && ($latestGeneratedAt === '' || strcmp($generatedAt, $latestGeneratedAt) > 0)) {
$latestGeneratedAt = $generatedAt;
@@ -363,6 +372,15 @@ class DomainSpiderCrawlWorkbenchHelper
return $aggregated;
}
protected static function limitAggregateRunEntries(array $runEntries): array
{
if (count($runEntries) <= self::MAX_AGGREGATE_RUNS) {
return $runEntries;
}
return array_slice($runEntries, 0, self::MAX_AGGREGATE_RUNS);
}
protected static function buildRecentRuns(array $runEntries, int $limit): array
{
$items = [];
@@ -993,7 +1011,7 @@ class DomainSpiderCrawlWorkbenchHelper
$rows = [];
foreach ($windows as $hours) {
$runEntries = self::collectRunEntries($publicRoot, $runsRoot, $hours);
$summary = self::aggregateRunSummaries($runEntries);
$summary = self::aggregateRunSummaries(self::limitAggregateRunEntries($runEntries));
$summary = self::filterSummaryByBotScope($summary, $botScope);
$summary = self::filterSummaryBySelectedBots($summary, $selectedBots);
$metrics = self::summarizeWindow($summary, $host);
@@ -1241,7 +1259,7 @@ class DomainSpiderCrawlWorkbenchHelper
$recentRuns = self::buildRecentRuns($runEntries, $runLimit);
if ($windowHours > 0 && !empty($runEntries)) {
$latestSummary = self::aggregateRunSummaries($runEntries);
$latestSummary = self::aggregateRunSummaries(self::limitAggregateRunEntries($runEntries));
}
if (empty($latestSummary) && !empty($recentRuns)) {