$tenantId, 'blockedRequests' => $this->store->countBlockedRequests($tenantId, $sinceDate), 'since' => $sinceDate?->format(\DateTimeInterface::ATOM), ]; } public function systemMetrics(?string $tenantId = null, ?string $since = null): array { if ($tenantId !== null && ($tenantId === '' || strlen($tenantId) > 128)) { throw new \InvalidArgumentException('Invalid tenant filter.'); } $sinceDate = self::date($since); return [ 'tenantId' => $tenantId, 'blockedRequests' => $this->store->countSystemBlockedRequests($tenantId, $sinceDate), 'since' => $sinceDate?->format(\DateTimeInterface::ATOM), ]; } public function maintenanceStatus(): array { return $this->store->maintenanceStatus() ?? [ 'status' => 'never_run', 'startedAt' => null, 'completedAt' => null, 'result' => null, 'error' => null, ]; } private static function date(?string $value): ?\DateTimeImmutable { if ($value === null) { return null; } if ($value === '' || strlen($value) > 255) { throw new \InvalidArgumentException('Invalid since date filter.'); } try { return new \DateTimeImmutable($value); } catch (\Exception) { throw new \InvalidArgumentException('Invalid since date filter.'); } } }