Files
michaelschiemer/src/Framework/Discovery/Events/CacheHitEvent.php
Michael Schiemer 55a330b223 Enable Discovery debug logging for production troubleshooting
- Add DISCOVERY_LOG_LEVEL=debug
- Add DISCOVERY_SHOW_PROGRESS=true
- Temporary changes for debugging InitializerProcessor fixes on production
2025-08-11 20:13:26 +02:00

86 lines
2.4 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Framework\Discovery\Events;
use App\Framework\Cache\CacheKey;
use App\Framework\Core\ValueObjects\Byte;
use App\Framework\Core\ValueObjects\Duration;
use App\Framework\Core\ValueObjects\Timestamp;
use App\Framework\Discovery\ValueObjects\CacheLevel;
/**
* Event fired when discovery results are loaded from cache
*
* Extended for memory-aware caching with data size and cache level tracking.
*/
final readonly class CacheHitEvent
{
public function __construct(
public CacheKey $cacheKey,
public int $itemCount,
public Duration $cacheAge,
public Timestamp $timestamp,
public ?Byte $dataSize = null,
public ?CacheLevel $cacheLevel = null
) {
}
public function isFresh(): bool
{
// Consider cache fresh if less than 30 minutes old
return $this->cacheAge->lessThan(Duration::fromMinutes(30));
}
/**
* Check if this is a large cache hit
*/
public function isLargeCacheHit(): bool
{
return $this->dataSize?->greaterThan(Byte::fromMegabytes(1)) ?? false;
}
/**
* Get cache efficiency rating
*/
public function getEfficiencyRating(): string
{
if ($this->dataSize === null) {
return 'unknown';
}
return match (true) {
$this->isFresh() && ! $this->isLargeCacheHit() => 'optimal',
$this->isFresh() => 'good',
$this->dataSize->greaterThan(Byte::fromMegabytes(5)) => 'poor',
default => 'fair'
};
}
public function toArray(): array
{
$baseArray = [
'cache_key' => (string) $this->cacheKey,
'item_count' => $this->itemCount,
'cache_age_seconds' => $this->cacheAge->toSeconds(),
'cache_age_human' => $this->cacheAge->humanReadable(),
'is_fresh' => $this->isFresh(),
'timestamp' => $this->timestamp->toFloat(),
];
// Add memory-aware fields if available
if ($this->dataSize !== null) {
$baseArray['data_size'] = $this->dataSize->toHumanReadable();
$baseArray['is_large_hit'] = $this->isLargeCacheHit();
$baseArray['efficiency_rating'] = $this->getEfficiencyRating();
}
if ($this->cacheLevel !== null) {
$baseArray['cache_level'] = $this->cacheLevel->value;
}
return $baseArray;
}
}