Bino
Bino é uma API responsável por mover dados de um sistema de origem (Ministério da Saúde) para o destino (nosso banco de dados)
Install / Use
/learn @CovidZero/BinoREADME
PROJETO ARQUIVADO E FORA DE UTILIZAÇÃO
bino - transferindo dados de um lugar para outro
Bino é uma API que permite a seus usuários transferir dados de diferentes origens para um bucket S3.
O projeto em questão consiste em ler os dados relacionados ao COVID-19 do Ministério da Saude e do portal Brasil.IO e inseri-los em um bucket S3
API
curl -X POST http://localhost:8080/crawl/ministerio_saude_brasil
A operação acima irá baixar os dados do Ministério da Saúde e guardar em um bucket S3. A resposta segue o formato abaixo:
{ "path": "ministerio_saude_brasil/2006-01-02/15-04/rawData.json"}
curl -X GET http://localhost:8080/crawlers
A operação acima irá retornar uma lista de quais coletores estão configurados e disponíveis para execução
{
"crawlers": [{
"name": "ministerio_saude_brasil",
"format": "json",
"contentType": "application/json",
"encoding": "iso-8859-1",
"available": true
}, {
"name": "brasil_io_covid19",
"format": "csv",
"contentType": "text/csv",
"encoding": "utf-8",
"available": true
}]
}
Setup do ambiente de dev
- Unix based (macos, wsl2, linux)
- Go SDK (1.13 no mínimo)
- Rode
make devsetup(instala um git-hook para pre-commit)
Compilando
Tenha a versão 1.13 da SDK GO e rode make build
Testando
make test sobe o ambiente de suporte de teste (localstack) e roda todos os tests da aplicação.
Detalhes da execução estão em scripts/test/integration_test.sh
Empacotando
Rode make package, você precisa ter o docker instalado e rodando
Rodando a aplicação
Empacote a aplicação usando docker como descrito acima e execute o seguinte comando
# defina as variáveis AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY seguindo a recomendação abaixo
# https://docs.aws.amazon.com/sdk-for-go/api/aws/session/#hdr-Environment_Variables
#
# defina a variável COVID0_TEMP_BUCKET seguindo a recomendação abaixo
# https://gocloud.dev/howto/blob/#s3
# exemplo:
# COVID0_TEMP_BUCKET=s3://nome-do-bucket?region=<região do bucket>
#
# Para mais detalhes veja o arquivo storage/db.go função SaneEnv
docker run -p '8080:8080' -e COVID0_TEMP_BUCKET -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY covidzero/bino:latest
Para rodar local, você pode usar o atalho make run
Criando um novo datasource - OnDemand
Datasources on-demand são acionados via chamada URL e devem obter os dados a cada vez que são executados. Lembre-se
que por enquanto não existe proteção para impedir que ocorra exaustão de recursos externos. Sendo assim, verifique
a frequência que o endpoint será chamado e se é compatível com a capacidade do datasource que você irá incluir.
O formato dos dados não é importante, bino opera com dados bytes e o processamento feito deve ser o mínimo possível,
normalmente remover alguns sufixos ou prefixos.
Com isso em mente, vamos aos passos que devem ser feitos para incluir um novo Datasource HTTP.
- Na pasta
datasourcescrie um arquivonome_do_meu_datasource.go(tente usar nomes curtos). - No arquivo
nome_do_meu_datasource.goescreva o seu coletor (useivis.gocomo exemplo) - No arquivo
ondemand.goaltere as funções paraAllOnDemandeGetOnDemandpara expor o seu datasource - Se os dados do seu datasource não são JSON, adicione o formato novo em
format.go - Na pasta
serverescreva um teste de integração para o seu datasource (usecrawl_ivis_test.gocomo exemplo) - Evite criar muitos mocks, Go é uma linguagem compilada e mocks em encesso não são a melhor maneira de trabalhar.
- Descreva em Datasources.md o seu datasource.
- Be Happy e fique em casa! Sério... Fique em casa! :-)
Related Skills
node-connect
350.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
350.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
350.8kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
