fix: alerte critique si 0 zones ingérées + lastIngestionJob dans /api/status
This commit is contained in:
@@ -17,17 +17,31 @@ class StatusController extends AbstractController
|
||||
|
||||
public function __invoke(): JsonResponse
|
||||
{
|
||||
$row = $this->connection->fetchAssociative(
|
||||
$obs = $this->connection->fetchAssociative(
|
||||
'SELECT detected_at, source, coverage_area
|
||||
FROM sargassum_observation
|
||||
ORDER BY detected_at DESC LIMIT 1'
|
||||
);
|
||||
|
||||
$job = $this->connection->fetchAssociative(
|
||||
"SELECT status, source, error_message, created_at, processed_at, retry_count
|
||||
FROM data_ingestion_job
|
||||
ORDER BY created_at DESC LIMIT 1"
|
||||
);
|
||||
|
||||
return $this->json([
|
||||
'lastObservation' => $row !== false ? [
|
||||
'detectedAt' => $row['detected_at'],
|
||||
'source' => $row['source'],
|
||||
'coverageKm2' => $row['coverage_area'] !== null ? (float) $row['coverage_area'] : null,
|
||||
'lastObservation' => $obs !== false ? [
|
||||
'detectedAt' => $obs['detected_at'],
|
||||
'source' => $obs['source'],
|
||||
'coverageKm2' => $obs['coverage_area'] !== null ? (float) $obs['coverage_area'] : null,
|
||||
] : null,
|
||||
'lastIngestionJob' => $job !== false ? [
|
||||
'status' => $job['status'],
|
||||
'source' => $job['source'],
|
||||
'error' => $job['error_message'],
|
||||
'startedAt' => $job['created_at'],
|
||||
'finishedAt' => $job['processed_at'],
|
||||
'retryCount' => (int) $job['retry_count'],
|
||||
] : null,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -43,15 +43,33 @@ final class IngestionScheduleHandler
|
||||
$this->logger->info('Scheduled ingestion started', ['date' => $date->format('Y-m-d')]);
|
||||
|
||||
// Étape 1 : ingestion de toutes les zones
|
||||
$succeeded = 0;
|
||||
$failed = 0;
|
||||
foreach (self::ZONES as $name => $bbox) {
|
||||
try {
|
||||
$this->ingestion->ingestWithFallback($bbox, $date);
|
||||
$this->logger->info('Zone ingested', ['zone' => $name]);
|
||||
++$succeeded;
|
||||
} catch (\Throwable $e) {
|
||||
$this->logger->error('Ingestion failed', ['zone' => $name, 'error' => $e->getMessage()]);
|
||||
++$failed;
|
||||
}
|
||||
}
|
||||
|
||||
if ($succeeded === 0) {
|
||||
$this->logger->critical('All zones failed — no data ingested this cycle', [
|
||||
'date' => $date->format('Y-m-d'),
|
||||
'zones' => array_keys(self::ZONES),
|
||||
'count' => $failed,
|
||||
]);
|
||||
} else {
|
||||
$this->logger->info('Ingestion cycle summary', [
|
||||
'succeeded' => $succeeded,
|
||||
'failed' => $failed,
|
||||
'date' => $date->format('Y-m-d'),
|
||||
]);
|
||||
}
|
||||
|
||||
// Étape 2 : forecasts pour les observations sans prévision
|
||||
$observations = $this->em->getRepository(SargassumObservation::class)
|
||||
->createQueryBuilder('o')
|
||||
|
||||
Reference in New Issue
Block a user