Skip to main content
Hay dos formas de ver a Fetcher funcionar. Elige una. El camino A es la ruta más corta a un primer éxito. Empieza ahí si solo quieres evaluar el producto.

Camino A — Ejecuta el Engine sin infraestructura


El Engine incluye un arnés en memoria en pkg/engine/memory. Cubre los puertos de almacenamiento: el registro de conectores, el connection store, la caché de esquemas, el result sink y el execution store. No necesitas MongoDB, ni RabbitMQ, ni almacenamiento de objetos. No incluye un CredentialProtector, así que si activas la persistencia cifrada debes aportar el tuyo.
1

Agrega el módulo

El Engine es un módulo separado de los servicios. No tiene dependencias de terceros, así que esta importación no arrastra nada más.
2

Construye, planifica, ejecuta

3

Lee el resultado

Aquí no hay ningún sink de resultados conectado, así que el Engine corre en modo directo. Devuelve las filas en línea como JSON indentado, más un digest SHA-256 sobre esos bytes exactos. Los bytes son deterministas: la misma entrada siempre produce el mismo digest.
Para pasar a producción, cambia el arnés en memoria por tus propios adaptadores. El Manager y el Worker de Fetcher son la implementación de referencia.

Camino B — Ejecuta los servicios independientes


Este camino te da la API REST y los jobs asíncronos. Todo corre localmente con Docker Compose.

Prerrequisitos

  • Docker y Docker Compose
  • Make
  • Go, solo para desarrollo. La versión del toolchain está en el go.mod del repositorio.

Configura y ejecuta

1

Clona el repositorio

2

Crea los archivos de entorno

Esto copia el .env.example de cada componente a .env.
3

Genera la clave maestra de cifrado

Copia la clave en APP_ENC_KEY en ambos components/manager/.env y components/worker/.env. Los dos servicios necesitan el mismo valor. El Worker la usa para descifrar credenciales y para verificar firmas de mensajes.
Reemplaza el placeholder antes de arrancar: usa una clave válida de 32 bytes codificada en Base64. El placeholder creado por make set-env falla al decodificar una clave maestra Base64 inválida. El mensaje master key too short: got 0 bytes, minimum 32 required corresponde a un valor vacío o corto que sí se decodifica. Fetcher no tiene modo alternativo en texto plano.
4

Levanta todo

5

Verifica que la API responde

  • API REST: http://localhost:4006
  • Referencia de API en Scalar, cuando SWAGGER_ENABLED=true: http://localhost:4006/swagger/docs
  • Gestión de RabbitMQ: http://localhost:3008

Ejecuta tu primera extracción

Una extracción tiene tres movimientos. Registra una conexión, crea un job y después consulta el job.

1. Registra una conexión de base de datos

El header X-Product-Name nombra el producto dueño de la conexión. Usa el mismo valor en metadata.source del job en el paso 2, porque Fetcher compara los dos. Fetcher cifra la contraseña antes de guardar el registro. Prueba la conexión antes de usarla:

2. Crea un job de extracción

Nombra los campos que quieres, por tabla y por datasource:
La API responde 202 Accepted con un ID de job. Si envías la misma petición dos veces dentro de 5 minutos, recibes 200 OK con el primer job en lugar de un segundo. Un job fallido no bloquea un reintento.

3. Consulta el job

Un job termina en uno de dos estados terminales: completed o failed. Al completarse, el Worker ya cifró el resultado en el almacenamiento de objetos y publicó un evento job.completed. Los dos estados anteriores son pending y processing. Jobs de extracción trae el ciclo de vida completo de cuatro estados.
Activa la autenticación con PLUGIN_AUTH_ENABLED=true. Las peticiones llevan entonces un header Authorization: Bearer <token>. Este quickstart corre con la autenticación desactivada.

Próximos pasos


Conceptos centrales

Conexiones, descubrimiento de esquema, jobs, filtros y resultados.

Configuración

Todas las variables de entorno, por componente.

Despliegue

Dependencias, colas, escalado y las verificaciones de arranque que fallan cerrado.

Seguridad

Derivación de claves, rotación, firma de mensajes y validación de host.