healthCheck)(); $alerts = []; // Check health checks for alerts foreach ($healthReport->checks as $check) { $threshold = $this->findThreshold($check->name); if ($threshold === null) { // Use default thresholds based on health check status if ($check->status->value === 'unhealthy') { $alerts[] = Alert::create( id: $this->generateAlertId($check->name), name: $check->name, severity: AlertSeverity::CRITICAL, message: $check->message, description: "Value: {$check->value} {$check->unit} exceeds critical threshold", metadata: [ 'value' => $check->value, 'unit' => $check->unit, 'threshold' => $check->threshold, ] ); } elseif ($check->status->value === 'degraded') { $alerts[] = Alert::create( id: $this->generateAlertId($check->name), name: $check->name, severity: AlertSeverity::WARNING, message: $check->message, description: "Value: {$check->value} {$check->unit} exceeds warning threshold", metadata: [ 'value' => $check->value, 'unit' => $check->unit, 'threshold' => $check->threshold, ] ); } } else { // Use configured threshold $severity = $threshold->getSeverity($check->value); if ($severity !== AlertSeverity::INFO) { $alerts[] = Alert::create( id: $this->generateAlertId($check->name), name: $check->name, severity: $severity, message: $check->message, description: "Value: {$check->value} {$check->unit} exceeds {$severity->value} threshold", metadata: [ 'value' => $check->value, 'unit' => $check->unit, 'threshold' => $threshold->criticalThreshold, 'warning_threshold' => $threshold->warningThreshold, ] ); } } } return AlertReport::fromAlerts($alerts); } /** * Findet Threshold für einen Check-Namen. */ private function findThreshold(string $checkName): ?AlertThreshold { foreach ($this->thresholds as $threshold) { if ($threshold->name === $checkName) { return $threshold; } } return null; } /** * Generiert eine eindeutige Alert-ID. */ private function generateAlertId(string $checkName): string { return 'alert_' . md5($checkName . time()); } /** * Gibt die Standard-Thresholds zurück. * * @return AlertThreshold[] */ public static function getDefaultThresholds(): array { return [ new AlertThreshold( name: 'Memory Usage', warningThreshold: 80.0, criticalThreshold: 90.0, unit: '%', description: 'Memory usage percentage' ), new AlertThreshold( name: 'Disk Usage', warningThreshold: 80.0, criticalThreshold: 90.0, unit: '%', description: 'Disk usage percentage' ), new AlertThreshold( name: 'System Load', warningThreshold: 80.0, criticalThreshold: 120.0, unit: '%', description: 'System load percentage' ), ]; } }