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-RemainingeRetry-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.
-
Clone este repositório (ou apenas salve o script).
-
Instale as dependências necessárias:
npm install dotenv luxon csv-stringify
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:
BUGSNAG_TOKEN="seu_token_aqui"
PROJECT_ID="id_do_projeto_aqui"
ERROR_ID="id_do_erro_aqui"
TZ="America/Sao_Paulo"
OUTPUT="exportacao_custom.csv"
START_DATE="2025-10-01T00:00:00"
END_DATE="2025-10-31T23:59:59"
PER_PAGE=50
MAX_RETRIES=8
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.jsO 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.csvO 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.