Skip to content

mariosmello/busgnag-exporter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Exportador de Eventos do Bugsnag

Este é um script de linha de comando (Node.js) para exportar ocorrências (eventos) de um erro específico do Bugsnag para um arquivo CSV.

O script foi projetado para ser robusto e lidar com os desafios de uma exportação de dados em larga escala, incluindo:

  • Streaming: O script processa os dados em streaming, escrevendo no arquivo CSV linha por linha. Ele não acumula centenas de eventos em memória, permitindo a exportação de um número virtualmente ilimitado de eventos.
  • Rate Limiting Inteligente: O script respeita ativamente os cabeçalhos de limite de taxa da API do Bugsnag (X-RateLimit-Remaining e Retry-After). Ele gerencia uma "janela" de requisições para usar 100% da cota disponível sem ser bloqueado, pausando e continuando automaticamente.
  • Retentativas (Retry) e Backoff: Em caso de falhas de rede (como ETIMEDOUT) ou erros de servidor (HTTP 5xx), o script tenta novamente usando uma estratégia de exponential backoff para garantir que o processo não seja interrompido por instabilidades momentâneas.
  • Filtragem por Data: Permite a definição de um intervalo de datas para filtrar quais eventos devem ser exportados.

Instalação

  1. Clone este repositório (ou apenas salve o script).

  2. Instale as dependências necessárias:

    npm install dotenv luxon csv-stringify

Configuração

O script é configurado através de variáveis de ambiente, normalmente armazenadas em um arquivo .env na raiz do projeto.

Crie um arquivo chamado .env e adicione as seguintes variáveis:

OBRIGATÓRIAS

Seu token de autenticação pessoal do Bugsnag

BUGSNAG_TOKEN="seu_token_aqui"

O ID do projeto que você quer consultar

PROJECT_ID="id_do_projeto_aqui"

O ID do erro específico cujos eventos você quer exportar

ERROR_ID="id_do_erro_aqui"

OPCIONAIS (com valores padrão)

Fuso horário para interpretar START_DATE e END_DATE

Padrão: America/Sao_Paulo

TZ="America/Sao_Paulo"

Nome do arquivo CSV de saída

Padrão: bugsnag_events.csv

OUTPUT="exportacao_custom.csv"

Data de início (ISO 8601). Se omitida, usa o início do mês atual.

START_DATE="2025-10-01T00:00:00"

Data de fim (ISO 8601). Se omitida, usa o fim do mês atual.

END_DATE="2025-10-31T23:59:59"

Número de eventos por página (API de listagem)

Padrão: 50

PER_PAGE=50

Máximo de retentativas para uma requisição falha (rede ou 5xx)

Padrão: 8

MAX_RETRIES=8

Como Usar

Após configurar seu arquivo .env, basta executar o script usando o Node.js:

# Assumindo que seu arquivo se chama 'export-bugsnag.js'
node export-bugsnag.js

O script começará a imprimir o progresso no console e o arquivo CSV (bugsnag_events.csv ou o nome que você definiu) será populado linha por linha em tempo real.

[i] Projeto:  ...
[i] Error ID: ...
[i] Intervalo UTC: 2025-10-29T03:00:00.000Z → 2025-10-31T02:59:59.000Z
[i] Gerando: bugsnag_events.csv
[MAIN] Iniciando processamento em modo streaming...
[MAIN] ...página recebida com 30 eventos.
[DETAIL] (1) Buscando id: 69039b62...
[NET] < 200 OK - ...
[DETAIL] (1) Recebido id: 69039b62...
[CSV] Linha 1 gravada.
[DETAIL] (2) Buscando id: 69039a73...
[NET] < 200 OK - ...
[DETAIL] (2) Recebido id: 69039a73...
[CSV] Linha 2 gravada.
...
[RATE_LIMIT] Limite atingido. Esperando 58s pela janela...
...
[MAIN] Processamento concluído.
[✓] Eventos listados:      300
[✓] Eventos no intervalo:  269
[✓] Linhas gravadas (CSV): 269
[✓] Arquivo: bugsnag_events.csv

Parte 4 (Copie e cole por último)

Colunas do CSV

O script extrai os seguintes campos para o CSV. A lógica de extração (pick) tenta buscar dados de múltiplos locais do payload JSON do evento (incluindo metaData) para encontrar a informação:

* `event_id`
* `received_at`
* `error_class`
* `message`
* `request_url`
* `request_method`
* `statusCode`
* `phoneNumber` (Exemplo de campo customizado extraído de `metaData.request.body`)

Para extrair outros campos, modifique as constantes columns e a lógica de pick na seção MAIN do script.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published