lastUsedAt = new \DateTimeImmutable(); $this->totalQueries++; if (! $successful) { $this->failedQueries++; } // Update average query time (simple moving average) $this->averageQueryTime = ($this->averageQueryTime * ($this->totalQueries - 1) + $executionTimeMs) / $this->totalQueries; } public function updateHealthStatus(bool $isHealthy): void { $this->isHealthy = $isHealthy; $this->lastHealthCheckAt = new \DateTimeImmutable(); } public function isIdle(int $maxIdleTimeSeconds): bool { $idleTime = time() - $this->lastUsedAt->getTimestamp(); return $idleTime > $maxIdleTimeSeconds; } public function needsHealthCheck(int $healthCheckIntervalSeconds): bool { $timeSinceLastCheck = time() - $this->lastHealthCheckAt->getTimestamp(); return $timeSinceLastCheck > $healthCheckIntervalSeconds; } public function getStats(): array { return [ 'id' => $this->id, 'created_at' => $this->createdAt->format('c'), 'last_used_at' => $this->lastUsedAt->format('c'), 'last_health_check_at' => $this->lastHealthCheckAt->format('c'), 'is_healthy' => $this->isHealthy, 'total_queries' => $this->totalQueries, 'failed_queries' => $this->failedQueries, 'failure_rate' => $this->totalQueries > 0 ? $this->failedQueries / $this->totalQueries : 0, 'average_query_time_ms' => $this->averageQueryTime, 'age_seconds' => time() - $this->createdAt->getTimestamp(), 'idle_time_seconds' => time() - $this->lastUsedAt->getTimestamp(), ]; } }