diff --git a/docker-compose.staging.yml b/docker-compose.staging.yml index 99faf17..c19ae46 100644 --- a/docker-compose.staging.yml +++ b/docker-compose.staging.yml @@ -138,13 +138,15 @@ services: restart: unless-stopped logging: *default-logging - # Importador NASA FIRMS → escribe activefires en ESTE mongo (NUNCA en prod), alimentando al - # matcher en shadow. Proceso de larga vida: hace su ciclo cada INTERVAL_MINUTES (15, igual - # que el cron de shiva), no hace falta timer del host. - # El JWT de Earthdata va en secrets/importer.staging.env, nunca en la imagen ni en el repo. + # Importador NASA FIRMS → escribe activefires en ESTE mongo (no en prod), alimentando el + # matcher en shadow. No arranca con `up` (profile "importer"): lo dispara un systemd timer + # del host cada 15 min con `docker compose run --rm importer`. + # NOTA: requiere crear su Dockerfile en fires-csv-mongo-import/ (fase-3 §2). Hasta entonces, + # este servicio queda declarado pero su build context debe completarse. importer: + profiles: ["importer"] build: - context: ../todos-contra-el-fuego/nasa-importer + context: ../todos-contra-el-fuego/fires-csv-mongo-import image: tcef-nasa-importer:local container_name: tcef-staging-importer depends_on: @@ -152,19 +154,10 @@ services: condition: service_completed_successfully environment: MONGO_URL: mongodb://mongo:27017/fuegos?replicaSet=rs0 - INTERVAL_MINUTES: "15" - # Reproduce el `when` de producción (acq_time UTC leído como hora local). Ver - # nasa-importer/README.md § "Zona horaria" antes de cambiarlo a UTC. - FIRE_TIME_TZ: Europe/Madrid - env_file: - - ./secrets/importer.staging.env - volumes: - - importer-data:/data - restart: unless-stopped + restart: "no" logging: *default-logging volumes: mongo-data: redis-data: nodered-data: - importer-data: diff --git a/imports/ui/components/Maps/MapBridge.js b/imports/ui/components/Maps/MapBridge.js index bcfe22e..ea44ea2 100644 --- a/imports/ui/components/Maps/MapBridge.js +++ b/imports/ui/components/Maps/MapBridge.js @@ -8,28 +8,8 @@ import { useMap, useMapEvents } from 'react-leaflet'; export const MapReady = ({ onReady }) => { const map = useMap(); useEffect(() => { - if (!onReady) return undefined; - let cancelled = false; - let delivered = false; - // El efecto de montaje puede correr antes de que el contenedor tenga tamaño. - // Si entregamos el mapa entonces, un `getBounds()` del padre lanza y se queda - // sin bounds: en /fires eso dejaba la suscripcion por viewport sin crear y el - // mapa vacio (0 capas) pese a haber 7470 fuegos. Esperamos a que el mapa este - // listo Y tenga tamaño real; entregamos una sola vez. - const deliver = () => { - if (cancelled || delivered) return; - map.invalidateSize(); - const size = map.getSize(); - if (!size || size.x === 0 || size.y === 0) return; - delivered = true; - onReady(map); - }; - map.whenReady(deliver); - map.on('resize', deliver); - return () => { - cancelled = true; - map.off('resize', deliver); - }; + if (onReady) onReady(map); + // run once per map instance }, [map]); // eslint-disable-line react-hooks/exhaustive-deps return null; }; diff --git a/secrets/importer.staging.env.example b/secrets/importer.staging.env.example deleted file mode 100644 index ed07625..0000000 --- a/secrets/importer.staging.env.example +++ /dev/null @@ -1,20 +0,0 @@ -# Importador NASA FIRMS — STAGING (testfuegos.comunes.org) -# Copiar a secrets/importer.staging.env y rellenar. GITIGNORADO: nunca commitear el real. -# -# El JWT de NASA Earthdata que usa producción está en la rama `shiva-local-changes` del repo -# todos-contra-el-fuego (fires-csv-mongo-import/nasa-https-downloader.sh, línea `KEY=eyJ…`). -# Se genera/renueva en https://urs.earthdata.nasa.gov/profile → "Generate Token". -# Caduca: comprobar el campo `exp` del JWT (payload base64) antes de dar por buena una avería. -NASA_TOKEN=eyJ0eXAiOiJKV1QiLCJvcmlnaW4iOiJFYXJ0aGRhdGEgTG9naW4i... - -# Zona FIRMS a descargar. Producción usa Global. -ZONE=Global - -# Espejos NRT de NASA, en orden de preferencia. -NASA_SERVERS=3,4 - -# Sentry/GlitchTip. Vacío en staging (el GlitchTip de tesla da 502 ahora mismo). -SENTRY_DSN= - -# Guardarraíl: aborta el borrado si un ciclo se llevaría más de este % de `activefires`. -MAX_DELETE_RATIO=0.9