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
This commit is contained in:
2025-08-11 20:13:26 +02:00
parent 59fd3dd3b1
commit 55a330b223
3683 changed files with 2956207 additions and 16948 deletions

View File

@@ -0,0 +1,118 @@
<?php
declare(strict_types=1);
namespace App\Framework\Health;
final class HealthCheckManager
{
/** @var HealthCheckInterface[] */
private array $healthChecks = [];
public function __construct()
{
// Default health checks will be registered via dependency injection
}
public function registerHealthCheck(HealthCheckInterface $healthCheck): void
{
$this->healthChecks[$healthCheck->getName()] = $healthCheck;
}
public function runAllChecks(): HealthReport
{
$results = [];
$overallStatus = HealthStatus::HEALTHY;
foreach ($this->healthChecks as $name => $healthCheck) {
try {
$result = $this->runSingleCheck($healthCheck);
$results[$name] = $result;
// Determine overall status (worst status wins)
if ($result->status->getPriority() < $overallStatus->getPriority()) {
$overallStatus = $result->status;
}
} catch (\Throwable $e) {
$results[$name] = HealthCheckResult::unhealthy(
'Health check execution failed: ' . $e->getMessage(),
exception: $e
);
$overallStatus = HealthStatus::UNHEALTHY;
}
}
return new HealthReport($overallStatus, $results);
}
public function runCheck(string $name): ?HealthCheckResult
{
if (! isset($this->healthChecks[$name])) {
return null;
}
return $this->runSingleCheck($this->healthChecks[$name]);
}
public function runChecksByCategory(HealthCheckCategory $category): HealthReport
{
$results = [];
$overallStatus = HealthStatus::HEALTHY;
foreach ($this->healthChecks as $name => $healthCheck) {
if ($healthCheck->getCategory() !== $category) {
continue;
}
$result = $this->runSingleCheck($healthCheck);
$results[$name] = $result;
if ($result->status->getPriority() < $overallStatus->getPriority()) {
$overallStatus = $result->status;
}
}
return new HealthReport($overallStatus, $results);
}
private function runSingleCheck(HealthCheckInterface $healthCheck): HealthCheckResult
{
$timeout = $healthCheck->getTimeout() / 1000; // Convert to seconds
// Simple timeout implementation
$startTime = microtime(true);
$result = $healthCheck->check();
$elapsed = microtime(true) - $startTime;
if ($elapsed > $timeout) {
return HealthCheckResult::warning(
"Health check '{$healthCheck->getName()}' exceeded timeout ({$timeout}s)",
['elapsed_time' => $elapsed, 'timeout' => $timeout]
);
}
return $result;
}
public function getRegisteredChecks(): array
{
return array_keys($this->healthChecks);
}
public function getChecksByCategory(): array
{
$categorized = [];
foreach ($this->healthChecks as $name => $healthCheck) {
$category = $healthCheck->getCategory()->value;
$categorized[$category][] = [
'name' => $name,
'display_name' => $healthCheck->getName(),
'timeout' => $healthCheck->getTimeout(),
];
}
return $categorized;
}
}