add bubble chart, fix dashboard perf

This commit is contained in:
Tykayn 2025-06-21 10:26:55 +02:00 committed by tykayn
parent ca00f8c0be
commit ad4170db14
8 changed files with 335 additions and 248 deletions

View file

@ -162,16 +162,33 @@ out meta;';
public function labourer(string $zone): array
{
$query = $this->get_query_places($zone);
$url = 'https://overpass-api.de/api/interpreter?data=' . urlencode($query);
try {
$query = $this->get_query_places($zone);
$response = $this->client->request('POST', $this->overpassApiUrl, [
'body' => ['data' => $query]
$response = $this->client->request('GET', $url, [
'timeout' => 90, // Augmenter le timeout pour les zones très denses
]);
if ($response->getStatusCode() !== 200) {
throw new \Exception('L\'API Overpass a retourné un code de statut non-200 : ' . $response->getStatusCode());
}
$data = json_decode($response->getContent(), true);
if (json_last_error() !== JSON_ERROR_NONE) {
// Tenter de récupérer le corps de la réponse brute en cas d'erreur JSON pour le débogage
$rawResponse = $response->getContent(false); // ne pas lancer d'exception si la réponse n'est pas décodable
throw new \Exception('Réponse JSON invalide depuis l\'API Overpass. Erreur: ' . json_last_error_msg() . '. Réponse brute : ' . substr($rawResponse, 0, 500));
}
$places = [];
if (isset($data['elements'])) {
if (count($data['elements']) === 0) {
// Ce n'est pas une erreur, juste aucun lieu trouvé. On retourne un tableau vide.
return [];
}
foreach ($data['elements'] as $element) {
if (isset($element['tags'])) {
$places[] = [
@ -198,8 +215,13 @@ out meta;';
gc_collect_cycles();
return $places;
} catch (\Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface $e) {
// Gérer spécifiquement les erreurs de transport (timeout, problème de connexion)
throw new \Exception('Erreur de communication avec l\'API Overpass (le service est peut-être indisponible ou la requête a expiré) : ' . $e->getMessage(), 0, $e);
} catch (\Exception $e) {
throw new \Exception("Erreur lors de la requête Overpass : " . $e->getMessage());
// Rattraper et relancer les autres exceptions (y compris celles que nous avons définies)
throw $e;
}
}