Skip to content

Repository files navigation

Batch-Downloader

⠀⠀⠀

Batch Downloader
⠀⠀⠀

Descarga y empaqueta varios instaladores en un solo trabajo. La interfaz queda disponible en http://localhost:3000.

Índice

Inicio rápido

Antes del primer arranque, copia .env.example como .env y cambia sus credenciales.

Stack completo

docker compose up --build --force-recreate

Un servicio, BBDD o API

# Ver los nombres disponibles
docker compose config --services

# Arrancar un componente y sus dependencias
docker compose up --build --force-recreate core-api
docker compose up --build --force-recreate mysql

# Arrancar un solo contenedor
docker compose up --build --force-recreate --no-deps core-api

Sustituye core-api por cualquier nombre devuelto por docker compose config --services; usa mysql o postgres para las BBDD y core-api, scraper-api o semantic-service para las API.

Tests

Los comandos asumen que las dependencias Python y Node ya están instaladas. Maven se ejecuta en Docker para no exigir una instalación local.

Todos los tests

docker run --rm -v "${PWD}:/workspace" -w /workspace maven:3.9.16-eclipse-temurin-26 mvn -B test
.\.venv\Scripts\python.exe -m pytest -q api/scraper
.\.venv\Scripts\python.exe -m pytest -q services/semantic-service
npm --prefix services/webapp/src/main/resources/frontend test -- --run
python -m unittest discover -s scripts/tests -v

Tests de un servicio

Servicio Comando
Java docker run --rm -v "${PWD}:/workspace" -w /workspace maven:3.9.16-eclipse-temurin-26 mvn -B -pl services/core-api -am test
Scraper .\.venv\Scripts\python.exe -m pytest -q api/scraper
Semántico .\.venv\Scripts\python.exe -m pytest -q services/semantic-service
Frontend npm --prefix services/webapp/src/main/resources/frontend test -- --run

En el comando Java, cambia services/core-api por services/download-worker, services/notification-service o services/translation-service.

Un solo test

# Java: clase#método
docker run --rm -v "${PWD}:/workspace" -w /workspace maven:3.9.16-eclipse-temurin-26 mvn -B -pl services/core-api -am "-Dtest=DownloadJobServiceTest#createsPartialAnonymousJobWithOmittedItem" "-Dsurefire.failIfNoSpecifiedTests=false" test

# Python: archivo::test
.\.venv\Scripts\python.exe -m pytest -q "api/scraper/tests/test_internal_routes.py::test_internal_resolution_requires_constant_time_service_token"

# Frontend: archivo y nombre
npm --prefix services/webapp/src/main/resources/frontend test -- --run src/api/domainClients.test.ts -t "maps the anonymous 204 response to null"

Endpoints

Permisos:

  • Público no requiere sesión;
  • Propietario exige la sesión USER o la cookie anónima BATCH_DOWNLOAD_OWNER;
  • Interno exige X-Internal-Service-Token;
  • Operativo no tiene autenticación de aplicación y debe restringirse por red. Todas las operaciones POST, PUT, PATCH y DELETE realizadas desde el navegador requieren además el token obtenido en GET /api/v1/auth/csrf; los endpoints internos no usan CSRF.

El contrato público versionado está en shared/contracts/openapi/batch-downloader-api.yaml.

API pública y de usuario
Método Ruta Permiso Descripción
GET /api/health Público Comprueba la salud básica de Core API.
GET /api/v1/auth/csrf Público Entrega el token CSRF para operaciones mutables.
POST /api/v1/auth/magic-link/request Público Solicita un enlace de acceso por correo.
POST /api/v1/auth/magic-link/confirm, /api/v1/auth/logout Público Consume el enlace o cierra la sesión de usuario.
GET /api/v1/auth/me Público Devuelve la sesión actual o 204.
GET, PATCH /api/v1/users/me USER Consulta o actualiza el perfil propio.
GET /api/v1/users/me/dashboard, /api/v1/users/me/downloads USER Consulta el resumen y el historial propios.
GET, POST /api/v1/users/me/bundles USER Lista o crea bundles privados propios.
GET, PATCH, DELETE /api/v1/users/me/bundles/{bundleId} USER Consulta, actualiza o elimina un bundle propio.
GET /api/v1/apps, /api/v1/apps/stats, /api/v1/apps/facets Público Busca aplicaciones y obtiene estadísticas o facetas.
GET /api/v1/apps/{appId} Público Obtiene el detalle de una aplicación.
GET /api/v1/bundles, /api/v1/bundles/{bundleId} Público Lista bundles visibles u obtiene uno visible/propio.
POST /api/v1/download-jobs Público Crea un trabajo y asigna su propietario.
GET, DELETE /api/v1/download-jobs/{jobId} Propietario Consulta o cancela un trabajo.
GET /api/v1/download-jobs/{jobId}/events Propietario Emite el progreso por SSE.
GET, HEAD /api/v1/download-jobs/{jobId}/file Propietario Entrega ZIP por streaming 200/206 y admite un rango; HEAD consulta metadatos.
GET /api/v1/download-jobs/{jobId}/file-link Propietario Devuelve la ruta del archivo del mismo origen.
POST /api/v1/download-jobs/{jobId}/activity, /complete Propietario + CSRF Registra espera/guardado y confirma automáticamente el archivo cerrado para limpiar.
GET /api/v1/locales/{locale} Público Devuelve el catálogo publicado del idioma solicitado.
WS /api/v1/catalog/ws Público Notifica cambios del catálogo.
API administrativa

Todas estas rutas exigen sesión ADMIN, salvo el login.

Método Ruta Permiso Descripción
POST /api/v1/admin/auth/login Público Abre una sesión administrativa.
GET, POST /api/v1/admin/auth/me, /api/v1/admin/auth/logout ADMIN Consulta o cierra la sesión administrativa.
GET, POST /api/v1/admin/bundles ADMIN Lista o crea bundles administrados.
PATCH, DELETE /api/v1/admin/bundles/{bundleId} ADMIN Actualiza o elimina un bundle administrado.
GET, POST, DELETE /api/v1/admin/apps ADMIN Lista, crea o elimina todo el catálogo de aplicaciones.
GET /api/v1/admin/apps/export.csv ADMIN Exporta el catálogo en CSV.
PATCH, DELETE /api/v1/admin/apps/{appId} ADMIN Actualiza o elimina una aplicación.
PUT /api/v1/admin/apps/{appId}/tags ADMIN Reemplaza sus etiquetas.
PATCH /api/v1/admin/apps/{appId}/sources/{sourceId} ADMIN Actualiza una fuente de descarga.
POST /api/v1/admin/apps/{appId}/generate-description ADMIN Encola la generación de descripción.
GET /api/v1/admin/apps/absence-verifications/summary ADMIN Resume ausencias verificadas y pendientes.
GET, POST /api/v1/admin/apps/{appId}/absence-verification ADMIN Consulta o confirma la ausencia de instaladores.
POST /api/v1/admin/apps/{appId}/manual-installer-inspections ADMIN Inicia una inspección manual.
GET /api/v1/admin/apps/{appId}/manual-installer-inspections/current ADMIN Recupera la inspección abierta.
GET /api/v1/admin/apps/{appId}/manual-installer-inspections/{inspectionId} ADMIN Consulta una inspección.
POST /api/v1/admin/apps/{appId}/manual-installer-inspections/{inspectionId}/apply ADMIN Revalida y publica sus resultados.
POST /api/v1/admin/app-discoveries ADMIN Analiza una web oficial.
GET, POST /api/v1/admin/app-discoveries/{discoveryId}, /api/v1/admin/app-discoveries/{discoveryId}/apply ADMIN Consulta o aplica un descubrimiento.
GET, POST /api/v1/admin/scraper/runs ADMIN Lista o crea ejecuciones del scraper.
GET /api/v1/admin/scraper/current, /api/v1/admin/scraper/logs, /api/v1/admin/scraper/queues, /api/v1/admin/scraper/event ADMIN Consulta ejecución, logs, colas o el último evento.
POST /api/v1/admin/scraper/queues/recover-stuck, /api/v1/admin/scraper/queues/retry-failed, /api/v1/admin/scraper/queues/prune-terminal ADMIN Recupera, reintenta o limpia elementos de cola.
POST /api/v1/admin/scraper/commands ADMIN Envía un comando durable al scraper.
POST /api/v1/admin/scraper/descriptions/enqueue-missing ADMIN Encola descripciones ausentes.
GET /api/v1/admin/audit ADMIN Consulta la auditoría administrativa.
GET /api/v1/admin/semantic/overview ADMIN Consulta salud, modelo aprovisionado, cobertura e indexador.
WS /api/v1/admin/scraper/ws ADMIN Notifica cambios del scraper.
Endpoints internos y operativos
Servicio Método y ruta Permiso Descripción
Core POST /internal/v1/download-jobs/{jobId}/item-metadata Interno Entrega al worker metadatos seguros de items fallidos.
Core POST /internal/v1/download-jobs/{jobId}/storage Interno Reserva global FIFO, identificada por el intento del worker.
Download Worker GET /internal/v1/storage/inventory, DELETE /internal/v1/jobs/{jobId}/files Interno Reconcilia espacio y confirma limpieza después de detener escritores.
Scraper GET /api/health, /api/health/live, /api/health/ready Operativo Salud general, liveness y readiness.
Scraper GET /internal/v1/metrics Interno Expone métricas Prometheus del pool.
Scraper GET /internal/v1/semantic/documents Interno Pagina documentos para el índice semántico.
Scraper GET /internal/v1/sources/{sourceRef}/resolution Interno Resuelve una fuente validada para descarga.
Scraper GET /internal/v1/sources/{sourceRef}/size Interno Revalida tamaño con HEAD sin retener conexión SQL durante la red; devuelve sourceRef y expectedSizeBytes, o null si no puede conocerlo.
Scraper POST /internal/v1/content/descriptions/enqueue-missing, /internal/v1/content/descriptions/generate Interno Encola descripciones o genera una concreta.
Scraper POST /internal/v1/admin/apps/{appId}/manual-installer-inspections Interno Crea una inspección de instaladores.
Scraper GET /internal/v1/admin/apps/{appId}/manual-installer-inspections/current, /internal/v1/admin/apps/{appId}/manual-installer-inspections/{inspectionId} Interno Recupera la inspección actual o una concreta.
Scraper POST /internal/v1/admin/apps/{appId}/manual-installer-inspections/{inspectionId}/apply Interno Aplica una inspección revalidada.
Scraper POST /internal/v1/admin/app-discoveries Interno Inicia el descubrimiento de una aplicación.
Scraper GET /internal/v1/admin/app-discoveries/{discoveryId} Interno Consulta el descubrimiento.
Scraper POST /internal/v1/admin/app-discoveries/{discoveryId}/apply Interno Aplica un descubrimiento revalidado.
Semántico GET /semantic/health, /semantic/health/live, /semantic/health/ready Operativo Salud general, liveness y readiness.
Semántico GET /internal/v1/metrics Interno Expone métricas Prometheus.
Semántico POST /internal/v1/semantic/search Interno Ejecuta la búsqueda semántica.
Webapp GET /healthz Público Comprueba Nginx y el frontend.
Java GET /actuator/health, /actuator/health/liveness, /actuator/health/readiness, /actuator/info, /actuator/prometheus Operativo Salud, información y métricas de Core, Worker, Notification y Translation.
Documentación GET /v3/api-docs, /swagger-ui/index.html Público en Core OpenAPI y Swagger UI de Core.
Documentación GET /openapi.json, /docs, /redoc Operativo OpenAPI, Swagger UI y ReDoc de Scraper y Semántico.
Globales — .env.example
Variables Uso
GHCR_REGISTRY, GHCR_OWNER, GHCR_IMAGE_PREFIX, GHCR_IMAGE_TAG Nombre y etiqueta de las imágenes publicadas.
MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST_PORT Credenciales, base y puerto host de MySQL.
SCRAPER_ALEMBIC_TARGET, CORE_API_FLYWAY_TARGET Puertas de migración del esquema compartido: 20260914_0021/20; Core añade reservas FIFO y entrega de descargas.
POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST_PORT Credenciales, base y puerto host de PostgreSQL/pgvector.
RABBITMQ_DEFAULT_USER, RABBITMQ_DEFAULT_PASS, RABBITMQ_HOST, RABBITMQ_PORT, RABBITMQ_HOST_PORT, RABBITMQ_MANAGEMENT_HOST_PORT, RABBITMQ_COMMAND_EXCHANGE, RABBITMQ_EVENT_EXCHANGE Acceso, puertos y exchanges de RabbitMQ.
MINIO_ROOT_USER, MINIO_ROOT_PASSWORD, MINIO_CORE_ACCESS_KEY, MINIO_CORE_SECRET_KEY, MINIO_WORKER_ACCESS_KEY, MINIO_WORKER_SECRET_KEY Identidades de administración, lectura y escritura de MinIO.
MINIO_API_HOST_PORT, MINIO_CONSOLE_HOST_PORT, MINIO_DOWNLOAD_HOST_PORT, MINIO_ENDPOINT, MINIO_PUBLIC_ENDPOINT, MINIO_ZIP_BUCKET, MINIO_ZIP_QUOTA, MINIO_REGION, MINIO_STALE_UPLOADS_EXPIRY, MINIO_STALE_UPLOADS_CLEANUP_INTERVAL Red, bucket, cuota y limpieza de artefactos.
APP_PUBLIC_BASE_URL, RESEND_API_KEY, RESEND_FROM_EMAIL, NOTIFICATION_TOKEN_ENCRYPTION_KEY, SCRAPER_INTERNAL_SERVICE_TOKEN, SCRAPER_URL_PROTECTION_SECRET, SCRAPER_LLM_GROQ_API_KEY, SCRAPER_LLM_DEEPSEEK_API_KEY URL pública, integraciones y secretos compartidos.
CORE_API_ADMIN_USERNAME, CORE_API_ADMIN_EMAIL, CORE_API_ADMIN_PASSWORD, CORE_API_DOWNLOAD_OWNER_SECRET Bootstrap de administrador y firma de propietarios anónimos. Define CORE_API_ADMIN_PASSWORD antes de arrancar: entre 8 caracteres y 72 bytes UTF-8, con mayúscula, minúscula, número y carácter especial.
WEBAPP_HOST_PORT, CORE_API_HOST_PORT, SEMANTIC_SERVICE_HOST_PORT, NOTIFICATION_SERVICE_HOST_PORT, DOWNLOAD_WORKER_HOST_PORT, TRANSLATION_SERVICE_HOST_PORT Puertos publicados en el host.
Scraper — api/scraper/.env.example
Variables Uso
SCRAPER_APP_NAME, SCRAPER_WINSTALL_BASE_URL, SCRAPER_WINSTALL_API_BASE_URL Identidad del servicio y orígenes de Winstall.
SCRAPER_REQUEST_TIMEOUT_SECONDS, SCRAPER_MAX_REDIRECTS, SCRAPER_MAX_DOWNLOAD_SIZE_BYTES, SCRAPER_ICON_MAX_BYTES, SCRAPER_ALLOWED_DOWNLOAD_SCHEMES, SCRAPER_PLAYWRIGHT_TIMEOUT_MS Límites de red, descargas, iconos y navegador.
SCRAPER_MANUAL_INSPECTION_TTL_HOURS, SCRAPER_MANUAL_INSPECTION_MAX_ATTEMPTS, SCRAPER_MANUAL_PAGE_MAX_BYTES Caducidad y límites de inspecciones manuales.
SCRAPER_SO_FILTER_CONCURRENCY, SCRAPER_SO_FILTER_MAX_ATTEMPTS Concurrencia y reintentos del filtro por sistema operativo.
SCRAPER_SCRAPE_CONCURRENCY, SCRAPER_CPU_THREAD_WORKERS, SCRAPER_SCHEDULER_TIMEZONE, SCRAPER_SCHEDULER_HOUR, SCRAPER_SCHEDULER_MINUTE, SCRAPER_RUN_ON_STARTUP, SCRAPER_SCRAPE_MAX_APPS, SCRAPER_SCRAPE_APP_TIMEOUT_SECONDS Workers, horario y alcance de cada barrido.
SCRAPER_WORKER_HEARTBEAT_INTERVAL_SECONDS, SCRAPER_WORKER_HEARTBEAT_STALE_SECONDS, SCRAPER_WORKER_FAILURE_THRESHOLD Salud de scheduler y workers.
SCRAPER_LLM_GROQ_BASE_URL, SCRAPER_LLM_GROQ_MODEL, SCRAPER_LLM_GROQ_FALLBACK_MODELS, SCRAPER_LLM_DEEPSEEK_BASE_URL, SCRAPER_LLM_DEEPSEEK_MODEL, SCRAPER_LLM_MAX_CONCURRENCY, SCRAPER_LLM_MAX_APPS_PER_RUN, SCRAPER_LLM_REQUEST_TIMEOUT_SECONDS Proveedores, modelos y límites de generación.
SCRAPER_DATABASE_POOL_MAX, SCRAPER_DATABASE_MAX_OVERFLOW, SCRAPER_DATABASE_POOL_TIMEOUT_SECONDS, SCRAPER_DATABASE_POOL_RECYCLE_SECONDS Pool MySQL: scraper-api 4+2 y scraper-scheduler 8+4 en Compose.
SCRAPER_ALEMBIC_TARGET Objetivo de migración: 20260914_0021 durante compatibilidad; usar head sólo tras aprobar la fase contractiva.
Core API — services/core-api/.env.example
Variables Uso
CORE_API_SERVER_PORT, CORE_API_SCRAPER_API_URL, CORE_API_SEMANTIC_SERVICE_URL, CORE_API_DOWNLOAD_WORKER_URL, CORE_API_DOWNLOAD_WORKER_CAPACITY_TIMEOUT, CORE_API_SEMANTIC_REQUEST_TIMEOUT, CORE_API_SEMANTIC_ADMIN_REQUEST_TIMEOUT Puerto, servicios internos y timeouts HTTP.
CORE_API_BCRYPT_STRENGTH, CORE_API_DB_POOL_MIN, CORE_API_DB_POOL_MAX, CORE_API_DB_POOL_TIMEOUT, CORE_API_AUTH_HASH_CONCURRENCY, CORE_API_AUTH_HASH_QUEUE, CORE_API_AUTH_HASH_WAIT Coste de hash, pool MySQL (2–5) y admisión de autenticación.
CORE_API_FLYWAY_TARGET Objetivo de migración: 20, que añade reservas FIFO, entrega y limpieza de descargas.
CORE_API_AUTH_LOGIN_MAX_PER_MINUTE, CORE_API_AUTH_MAGIC_LINK_MAX_PER_EMAIL_HOUR, CORE_API_AUTH_MAGIC_LINK_MAX_PER_IP_HOUR, CORE_API_SESSION_TIMEOUT, CORE_API_MAGIC_LINK_TTL, CORE_API_MAGIC_LINK_PENDING_CLEANUP_INTERVAL Rate limits de autenticación, caducidad de enlaces/sesiones y limpieza de solicitudes pendientes.
CORE_API_OUTBOX_DELAY, CORE_API_OUTBOX_CLAIM_LEASE, CORE_API_OUTBOX_CONFIRM_TIMEOUT, CORE_API_RETENTION_INTERVAL, CORE_API_REQUIRE_HTTPS, CORE_API_COOKIE_SECURE Outbox, retención y seguridad HTTP/cookies.
DOWNLOAD_MAX_APPS, DOWNLOAD_ANONYMOUS_MAX_CREATES_PER_HOUR, DOWNLOAD_ANONYMOUS_MAX_CREATES_PER_IP_HOUR, DOWNLOAD_SSE_HEARTBEAT Tamaño de selección, frecuencia de creación y SSE; la concurrencia depende de bytes, sin cuotas por cantidad de trabajos.
CORE_API_CATALOG_CACHE_MAXIMUM_SIZE, CORE_API_CATALOG_CACHE_TTL, CORE_API_DOWNLOAD_EVENTS_QUEUE Caché de catálogo y cola de eventos.
Download Worker — services/download-worker/.env.example
Variables Uso
DOWNLOAD_WORKER_SERVER_PORT, DOWNLOAD_WORKER_INBOX_URL, DOWNLOAD_WORKER_INBOX_USERNAME Puerto e inbox idempotente H2.
DOWNLOAD_WORKER_COMMAND_EXCHANGE, DOWNLOAD_WORKER_EVENT_EXCHANGE, DOWNLOAD_WORKER_INPUT_ROUTING_KEY, DOWNLOAD_WORKER_INPUT_QUEUE, DOWNLOAD_WORKER_CANCELLATION_ROUTING_KEY, DOWNLOAD_WORKER_CANCELLATION_QUEUE, DOWNLOAD_WORKER_DLX, DOWNLOAD_WORKER_DLQ, DOWNLOAD_WORKER_CAPACITY_WAIT_QUEUE, DOWNLOAD_WORKER_SOURCE_RESOLVER_URL, DOWNLOAD_WORKER_CORE_API_URL Topología RabbitMQ y servicios internos.
DOWNLOAD_WORKER_CAPACITY_WAIT_DELAY, DOWNLOAD_WORKER_CANCELLATION_CONCURRENCY, DOWNLOAD_WORKER_RETRY_ATTEMPTS, DOWNLOAD_WORKER_RETRY_INITIAL_INTERVAL, DOWNLOAD_WORKER_RETRY_MULTIPLIER, DOWNLOAD_WORKER_RETRY_MAX_INTERVAL Espera de capacidad, cancelaciones y reintentos.
DOWNLOAD_WORKER_ARTIFACT_RETENTION, DOWNLOAD_WORKER_SOURCE_RESOLVER_TIMEOUT, DOWNLOAD_WORKER_CORE_API_TIMEOUT Retención y timeouts internos.
DOWNLOAD_WORKER_MAX_ITEMS, DOWNLOAD_WORKER_MAX_FILE_SIZE, DOWNLOAD_WORKER_MAX_TOTAL_SIZE, DOWNLOAD_WORKER_MAX_REDIRECTS, DOWNLOAD_WORKER_CONNECT_TIMEOUT, DOWNLOAD_WORKER_REQUEST_TIMEOUT Límites de cada descarga.
DOWNLOAD_WORKER_PER_JOB_CONCURRENCY, DOWNLOAD_WORKER_PACKAGING_CONCURRENCY, DOWNLOAD_WORKER_ZIP_LEVEL Conexiones por trabajo y control de CPU: Oracle usa dos empaquetados y nivel ZIP cero.
DOWNLOAD_WORKER_MIN_FREE_SPACE, DOWNLOAD_WORKER_MULTIPART_PART_SIZE, DOWNLOAD_WORKER_TEMP_DIRECTORY Margen libre del host, subida multipart y temporal; no hay exclusividad por tamaño.
DOWNLOAD_WORKER_INBOX_LEASE, DOWNLOAD_WORKER_RETENTION_INTERVAL, DOWNLOAD_WORKER_HEARTBEAT_INTERVAL, DOWNLOAD_WORKER_HEARTBEAT_STALE_AFTER Lease, limpieza y salud del worker.
Notification Service — services/notification-service/.env.example
Variables Uso
NOTIFICATION_SERVICE_SERVER_PORT, NOTIFICATION_RETRY_MAX_ATTEMPTS, NOTIFICATION_RETRY_INITIAL_INTERVAL, NOTIFICATION_RETRY_MULTIPLIER, NOTIFICATION_RETRY_MAX_INTERVAL Puerto y política de reintentos.
NOTIFICATION_SERVICE_INBOX_URL, NOTIFICATION_SERVICE_INBOX_USERNAME, NOTIFICATION_SERVICE_INBOX_LEASE_DURATION, NOTIFICATION_SERVICE_RETENTION_INTERVAL, NOTIFICATION_SERVICE_HEARTBEAT_INTERVAL, NOTIFICATION_SERVICE_HEARTBEAT_STALE_AFTER Inbox H2, lease, limpieza y salud.
NOTIFICATION_SERVICE_TRANSLATION_URL, NOTIFICATION_SERVICE_TRANSLATION_CONNECT_TIMEOUT, NOTIFICATION_SERVICE_TRANSLATION_REQUEST_TIMEOUT, NOTIFICATION_SERVICE_TRANSLATION_CACHE_TTL, NOTIFICATION_SERVICE_TRANSLATION_FALLBACK_LOCALE Endpoint interno, timeouts, caché y fallback del servicio de traducciones.
NOTIFICATION_SERVICE_RESEND_BASE_URL, NOTIFICATION_SERVICE_RESEND_CONNECT_TIMEOUT, NOTIFICATION_SERVICE_RESEND_REQUEST_TIMEOUT Endpoint y timeouts de Resend.
Semantic Service — services/semantic-service/.env.example
Variables Uso
SEMANTIC_MODEL_DIR, SEMANTIC_MODEL_RUNTIME_CACHE_DIR, SEMANTIC_MODEL_MANIFEST_NAME, SEMANTIC_DEVICE Ranura local, caché de inferencia y contrato del modelo aprovisionado.
SEMANTIC_CANDIDATE_LIMIT, SEMANTIC_INDEX_BATCH_SIZE, SEMANTIC_INDEX_INTERVAL_SECONDS, SEMANTIC_INDEX_LEASE_SECONDS, SEMANTIC_SEARCH_TIMEOUT_SECONDS Búsqueda e indexación.
SEMANTIC_API_DB_POOL_MIN, SEMANTIC_API_DB_POOL_MAX, SEMANTIC_INDEXER_DB_POOL_MIN, SEMANTIC_INDEXER_DB_POOL_MAX, SEMANTIC_DB_POOL_TIMEOUT_SECONDS, SEMANTIC_DB_POOL_MAX_LIFETIME_SECONDS Pools PostgreSQL por proceso.
SEMANTIC_SEARCH_CONCURRENCY, SEMANTIC_SEARCH_CAPACITY_WAIT_SECONDS, SEMANTIC_BACKGROUND_TIMEZONE, SEMANTIC_BACKGROUND_START_HOUR, SEMANTIC_BACKGROUND_END_HOUR Admisión y ventana de fondo.
SEMANTIC_WORKER_HEARTBEAT_INTERVAL_SECONDS, SEMANTIC_WORKER_HEARTBEAT_STALE_SECONDS, SEMANTIC_WORKER_FAILURE_THRESHOLD Salud del indexador.
SEMANTIC_DATABASE_ROLE Rol del proceso: api o indexer.
Translation y Frontend
Servicio Variables Uso
Translation TRANSLATION_SERVICE_SERVER_PORT, TRANSLATION_SERVICE_LOCALES_PATH, TRANSLATION_SERVICE_CACHE_MAX_AGE Puerto, directorio de traducciones y caché HTTP.
Frontend VITE_API_BASE_URL Base opcional de la API; vacía usa el mismo origen.

Estados de los jobs

Trabajo de descarga

El presupuesto global de 10 GiB incluye temporales, ZIP, multipart y reservas. Los trabajos esperan en FIFO estricto si su pico estimado no cabe; crear uno devuelve 202 también en ese caso. estimatedBytes, reservedBytes y queuePosition muestran esta admisión. Funcionamiento y limpieza.

Estado Preparación terminada Descargable Descripción
QUEUED No No Aceptado y esperando worker o capacidad.
RESOLVING No No Resolviendo fuentes verificadas.
DOWNLOADING No No Descargando y validando instaladores.
PACKAGING No No Generando y subiendo el ZIP.
READY Sí Sí Todos los instaladores están disponibles.
PARTIAL Sí Sí El ZIP existe, pero algún item falló o requiere descarga manual.
MANUAL_ONLY Sí Sí El ZIP contiene solamente accesos a descargas manuales.
FAILED Sí No El trabajo terminó sin un artefacto utilizable.
CANCELLED Sí No El propietario canceló el trabajo.
EXPIRED Sí No El artefacto se ha retirado durante la limpieza.

READY significa ZIP preparado. deliveryStatus distingue WAITING, TRANSFERRING, SAVED y CLEANING; deliveryBytes informa del avance de entrega. Solo el cierre correcto del archivo gestionado confirma el guardado. SSE sigue durante la entrega y emite removed después de limpiar; las lecturas posteriores devuelven 404. Sin conexión se limpia tras un minuto, o tras cinco minutos de transferencia sin avance; esperar conectado en FIFO mantiene el trabajo.

Item de descarga

Estado Descripción
QUEUED Espera procesamiento.
RESOLVING Busca la fuente del instalador.
DOWNLOADING Transfiere y valida el archivo.
COMPLETED Archivo listo para empaquetar.
FAILED No pudo completarse.
CANCELLED Se canceló con el trabajo.

Licencia

Este proyecto está bajo la Licencia GNU GENERAL PUBLIC LICENSE 3.0. Para más detalles, consulte el archivo LICENSE.

Personas

Autor

José Gallardo
José Gallardo Caballero

Tutores

José Manuel Aroca Fernández
José Manuel Aroca Fernández
Rodrigo Pascual García
Rodrigo Pascual García

Volver al índice.

About

TFG de José Gallardo en la Universidad de Burgos. Permite descargar varios ejecutables de programas conocidos al mismo tiempo. Ideal para poner un nuevo PC en marcha.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

Contributors

Languages