go-collector-service

module
v0.0.0-...-9b4e594 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 19, 2022 License: MIT

README

Go File Collector

Micro serviço para coleta de arquivos e envio para um storage

Tabela de conteúdos

Projeto

A ideia do projeto como um todo é criar um serviço de ETL como descrito abaixo:

diagrama do projeto

Collector

O collector é o serviço que é responsavél por coletar os arquivos de uma fonte, envia-los para um storage e disparar um evento para um message broker indicando que o arquivo está pendente e disponível para ser processado. A aplicação também conta com o Jaeger para colectar metricas de opentelemetry, para habilitar é só exportar a variavel de ambiente TRACE_ENABLE=true

  • Servidor de arquivos

    • Máquina local
    • Servidor SFTP
  • Storage

    • S3
  • Broker

    • RabbitMQ
    • SQS

Variaveis de ambiente

# Configuraçãos do tracer para enviar as informações do opentelemetry
# O setup do projeto é feit com o Jaeger
TRACE_URL=http://localhost:14268
TRACE_SERVICE_NAME=go-collector
TRACE_ENABLED=false

# Broker
BROKER_URL=localhost
BROKER_PORT=5672
BROKER_USER=guest
BROKER_PASSWORD=guest
# Caso o arquivo seja enviado com sucesso, é enviado o evento "success"
# Caso tenha algum problema, será enviado o evento "error"

# Storage
STORAGE_HOST=http://localhost.localstack.cloud:4566
STORAGE_BUCKET=collector-files
STORAGE_USER=username
STORAGE_KEY=acesskey

# Logger
# Por default, o log no console é habilitado, caso queira desabilitar é só exportar a variavel de ambiente
LOG_CONSOLE_JSON=true
LOG_CONSOLE_LEVEL=debug
LOG_CONSOLE_ENABLED=true

# Os logs em arquivos são desabilitados por default, para habilitar é só exportar a variavel de ambiente
LOG_FILE_ENABLED=false
LOG_FILE_LEVEL=info
LOG_FILE_JSON=true

# Pasta para o output dos logs
LOG_FILE_DIR=./logs
# Nome base do arquivo de log
LOG_FILENAME=collector.logs
# Tamanho máximo de cada arquivo de log em MB
LOG_MAX_SIZE=1
# Máximo arquivos de log que devem ser mantidos
LOG_MAX_BACKUPS=7
# Quantidade máxima de dias antes de rotacionar o arquivo de log
LOG_MAX_AGE=1


# File Server
# Configurações do servidor de arquivos
# Caso utilize o LocalFileServer, todas as configurações serão ignoradas.
FILE_SERVER_URL=localhost:22
FILE_SERVER_USER=admin
FILE_SERVER_PASSWORD=secret
FILE_SERVER_PRIVATE_KEY=
FILE_SERVER_KEY_EXCHANGES=

Configurando a coleta de arquivos

A configuração da coleta de arquivos é feita através do arquivo config.yaml, que contem a seguinte estrutura

sender:
  - collect:  # Serviço que irá fazer a coleta dos arquivos, pode conter quantos quiser
      pattern:  # Array de quais patterns ele deve usar para coletar os arquivos, diretorios serão ignorados
        - ./data/*.json
      maxFilesBatch: 5  # Quantidade máxima de arquivos para enviar vez, caso seja 0 envia todos os arquivos
    delay: 1  # Tempo de espera em segundos entre uma coleta e outra
    workers: 1  # Quantidade de Workers para fazer o Upload dos arquivos para o Storage
    topic: collector.files  # Nome do tópico que os eventos serão enviados, eles não são gerados pelo serviço

🎲 Rodando a aplicação

Para executar a aplicação é bem simples, depois de configurar tudo é só executar o comando

make run

Dependencias externas

O repositório conta com um arquivo docker-compose.yaml que contem todas as dependencias externas necessárias para rodar o serviço localmente, você pode inicia-las com o comando:

# Inicia os containers
make setup

# Para os containers
make setdown
🎲 Contribuindo com o projeto
# Clone este repositório
$ git clone <https://github.com/uesleicarvalhoo/go-collector-service>

# Acesse a pasta do projeto no terminal/cmd
$ cd go-collector-service

# Inicie as dependencias do projeto
$ make setup

# Instale as dependências
$ go mod download

# Copie o arquivo .env.example para .env e altere as configurações das variaveis para as suas configurações
$ cp .env.example .env

# Faça suas alterações

# Formate o código
$ make format

# Garanta que os testes estão passando
$ make test

# Abra uma pull request e ela será analisada
TODO's
  • Implementar o envio para o BlobStorage
  • Implementar testes para as dependencias externas
  • Configurar a escolha das dependencias externas de forma dinâmica, message broker, storage e file sever
Licença

Este projeto está licenciado nos termos da licença MIT, para mais detalhes consulte o arquivo LICENSE.

Contato

Olá, sou Ueslei Carvalho 👋🏻 criador e mantenedor deste projeto. Caso queira entrar em contato comigo, fique a vontade para utilizar qualquer um dos canais abaixo! :)

https://www.linkedin.com/in/uesleicarvalhoo/

📧 uesleicdoliveira@gmail.com

📷 https://www.instagram.com/uesleicarvalhoo/

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL