Sign inSign up

pheiterer/reviwers-queue

By pheiterer

Updated 24 days ago

Update custom field reviewers at Jira from bitbucket PR

Image
Integration & delivery
Developer tools
Monitoring & observability
0

914

pheiterer/reviwers-queue repository overview

Reviewers Update Queue

Serviço escalável para sincronização automática de revisores pendentes do Bitbucket para campos customizados no Jira.

🚀 Visão Geral

O Reviewers Update Queue resolve o problema de visibilidade de revisores no Jira. Ele monitora atualizações (via webhooks ou chamadas manuais) e sincroniza a lista de revisores com o dos Pull Requests vinculados a um card do Jira, atualizando um campo customizado de múltiplos usuários.

Principais Funcionalidades
  • Processamento Assíncrono: Utiliza um modelo de fila e workers para não bloquear o chamador.
  • Deduplicação Inteligente: Evita processamento redundante de cards que já estão na fila.
  • Resiliência: Implementa retries exponenciais para falhas de comunicação com a API do Jira.
  • Segurança: Proteção de endpoints via API Key.
  • Observabilidade: Endpoint de métricas integrado para monitoramento de performance e saúde da fila.

🏗️ Arquitetura

O serviço segue um padrão produtor-consumidor:

  1. API (Handler): Recebe a solicitação, valida e coloca o jiraCardId na fila.
  2. Queue Manager: Gerencia uma fila (channel) e um mapa de cards pendentes para evitar duplicidade.
  3. Workers: Consomem da fila, buscam o status de desenvolvimento no Jira, traduzem usuários e atualizam o card.

⚙️ Configuração

A configuração é feita via variáveis de ambiente. Você pode usar um arquivo .env na raiz do projeto.

VariávelDescriçãoPadrão
PORTPorta onde o servidor HTTP será executado.8080
JIRA_URLURL base da sua instância do Jira (ex: https://company.atlassian.net).-
JIRA_EMAILEmail do usuário técnico/robô para autenticação.-
JIRA_API_TOKENToken de API do Jira.-
JIRA_CUSTOM_FIELDID do campo customizado (ex: customfield_12345).customfield_12345
API_KEYChave para autenticação nos endpoints.-
EXCLUDE_REVIEWERNome de usuário a ser ignorado na sincronização.-
WORKER_COUNTQuantidade de workers simultâneos processando a fila.1
MAX_RETRIESNúmero máximo de tentativas em caso de erro na API.3

🛠️ Como Executar

Pré-requisitos
Usando Docker (Recomendado)
  1. Clone o repositório:

    git clone https://github.com/youruser/reviwers_update_queue.git
    cd reviwers_update_queue
    
  2. Configure o ambiente:

    cp .env.example .env
    # Edite o arquivo .env com suas credenciais
    
  3. Suba o container:

    docker-compose up --build -d
    
Execução Local
go mod download
go run cmd/server/main.go

🔌 API Reference

Sincronizar Card

Adiciona um card à fila de processamento.

  • URL: /sync
  • Method: POST
  • Headers:
    • X-API-Key: <sua_api_key>
    • Content-Type: application/json
  • Body:
    {
      "jiraCardId": "PROJ-123"
    }
    
  • Responses:
    • 202 Accepted: Card adicionado à fila ou já estava pendente.
    • 401 Unauthorized: API Key inválida ou ausente.
    • 400 Bad Request: Formato de ID inválido.
Métricas

Retorna estatísticas de execução e estado atual da fila.

  • URL: /metrics
  • Method: GET
  • Example Response:
    {
      "errors": 0,
      "pending_cards": 0,
      "processed_total": 42,
      "queued_cards": 0,
      "retries": 2,
      "uptime_seconds": 3600
    }
    

📂 Estrutura do Projeto

├── cmd/server/         # Ponto de entrada (main)
├── internal/
│   ├── api/            # Handlers e middlewares HTTP
│   ├── config/         # Carregamento de configurações
│   ├── jira/           # Cliente de integração com Jira API
│   ├── metrics/        # Coleta de métricas e estatísticas
│   ├── queue/          # Lógica de fila e deduplicação
│   └── worker/         # Processamento assíncrono
└── docker-compose.yml  # Orquestração local

📝 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.

Tag summary

Content type

Image

Digest

sha256:4c55a5004

Size

8.3 MB

Last updated

24 days ago

docker pull pheiterer/reviwers-queue