purgeService->getHealthEndpoint(); if ($endpoint === '') { $output->writeln('SSR_HEALTH_ENDPOINT missing in var/vitec-ssr-purge.env'); return Command::INVALID; } $row = ['crdate' => time(), 'ok' => 0, 'release_id' => '', 'cached_pages' => 0, 'cache_mb' => 0, 'response_ms' => 0]; $start = microtime(true); try { $response = $this->requestFactory->request($endpoint, 'GET', [ 'timeout' => 4, 'connect_timeout' => 2, 'http_errors' => false, ]); $row['response_ms'] = (int)round((microtime(true) - $start) * 1000); if ($response->getStatusCode() === 200) { $data = json_decode((string)$response->getBody(), true); $row['ok'] = !empty($data['ok']) ? 1 : 0; $row['release_id'] = substr((string)($data['release']['release'] ?? ''), 0, 100); $row['cached_pages'] = (int)($data['cachedPages'] ?? 0); $row['cache_mb'] = (int)($data['cacheMB'] ?? 0); } } catch (\Throwable $e) { $row['response_ms'] = (int)round((microtime(true) - $start) * 1000); } $conn = $this->connectionPool->getConnectionForTable('tx_vitec_ssrhealthlog'); $conn->insert('tx_vitec_ssrhealthlog', $row); $conn->executeStatement( 'DELETE FROM tx_vitec_ssrhealthlog WHERE crdate < ?', [time() - self::KEEP_DAYS * 86400] ); $output->writeln(sprintf( '%s release=%s pages=%d cache=%dMB %dms', $row['ok'] ? 'ok' : 'DOWN', $row['release_id'] ?: '-', $row['cached_pages'], $row['cache_mb'], $row['response_ms'] )); return Command::SUCCESS; } }