ResultSink. A persistência e a proteção do store mode são definidas pelo host/sink; o Worker autônomo gerencia criptografia, armazenamento e HMAC.
Código-fonte disponível
O Fetcher está disponível como código-fonte sob a Elastic License 2.0. O código-fonte completo está no GitHub, e cada arquivo-fonte do Engine carrega um cabeçalho
SPDX-License-Identifier: Elastic-2.0. Fetcher e Midaz são os dois produtos Lerian .
Duas formas de rodar
A dualidade abaixo é o formato do produto. Escolha a linha que corresponde ao seu problema.
O Engine é um módulo Go separado do módulo dos serviços (
github.com/LerianStudio/fetcher/v2). Ele atualmente declara zero dependências de terceiros. O CI aplica a fronteira de dependências rejeitando grafos que não sejam da stdlib ou do módulo local, e não verificando sintaticamente um bloco require. Sua aplicação hospedeira fornece as partes de que o Engine precisa por interfaces pequenas, chamadas portas.
O Manager e o Worker usam esse mesmo Engine para extração genérica. O Worker mantém um caminho de compatibilidade separado para extração plugin_crm do MongoDB.
O Engine vem com um harness em memória (
pkg/engine/memory) que cobre as portas de armazenamento: o registro de conectores, o connection store, o cache de esquemas, o result sink e o execution store. Você pode rodar uma extração real sem MongoDB, sem RabbitMQ e sem object storage. O harness não cobre a proteção de credenciais: a persistência criptografada vem desligada por padrão e ligá-la exige que a sua aplicação hospedeira forneça um CredentialProtector. Veja Primeiros passos.O que o Fetcher entrega
- Gestão de conexões. Armazene, valide e teste conexões com bancos de dados. O Fetcher criptografa cada senha com AES-256-GCM antes de gravar o registro.
- Descoberta de esquema. O Fetcher detecta tabelas, colunas e tipos de dados nos cinco tipos de banco, com um cache e uma leitura sempre fresca.
- Extração de dados. Uma interface de consulta com projeção de campos, dez operadores de filtro e requisições multi-tabela, multi-esquema e multi-fonte de dados.
- Orquestração de jobs. Processamento assíncrono com janela de duplicidade de 5 minutos, acompanhamento de status e eventos
job.completedejob.failed.
Fontes de dados
O Fetcher aceita cinco tipos de fonte de dados. Envie o identificador em maiúsculas na API: a validação da requisição compara exatamente esses cinco valores, e
postgresql é rejeitado com 400. As fontes internas declaradas pelo operador (DATASOURCE_{NAME}_TYPE) e o filtro de consulta type na listagem de conexões aceitam qualquer caixa.
Seguro por construção
- Escopo de tenant. Toda operação do Engine carrega um ID de tenant, e esse ID é a única fronteira de isolamento. Um ID de tenant malformado falha antes de o Fetcher tocar qualquer recurso.
- Erros redigidos. O Fetcher descarta o erro bruto do driver na fronteira dele, então uma DSN, uma credencial ou um detalhe interno do driver não chega a quem chama.
- Extração fail-fast. O primeiro passo que falha interrompe a execução. O Fetcher nunca devolve um resultado parcial.
- Limites padrão. Os padrões são 10 fontes de dados, 20 tabelas por fonte de dados, 50 campos por tabela, 4 workers concorrentes por fonte de dados, 5 minutos e 256 MiB. O host configura o teto; uma requisição só pode reduzi-lo.
- Validação de host. Em modo multi-tenant, o Fetcher rejeita um host fornecido pelo tenant que resolva para um endereço privado, de loopback ou de metadados de nuvem.
Próximos passos
Casos de uso
Problemas concretos que o Fetcher resolve, e o que muda quando você o adota.
Primeiros passos
Dois caminhos até a primeira extração: zero infraestrutura ou stack Docker completa.
Conceitos centrais
Conexões, descoberta de esquema, jobs de extração, filtros e resultados.
Segurança
Chave-mestra, chaves derivadas, assinatura de mensagens e validação de host.

