Skip to main content

gh_map_pipelines v2 - Improved Version

📋 Principais Melhorias

1. Gravação Incremental

  • Dados são salvos em lotes (batch) durante o processamento
  • Não há perda de dados em caso de interrupção
  • Arquivos Parquet são atualizados incrementalmente
  • Batch size configurável (padrão: 10 itens)

2. Tratamento Inteligente de Rate Limit

  • Detecta erro 429 automaticamente
  • Aguarda tempo configurável (padrão: 60 segundos)
  • Registra ocorrências em tabela rate_limit_log
  • Verifica histórico antes de fazer novas requisições
  • Retry automático com backoff

3. Sistema de Retomada (Resume)

  • Rastreia progresso em tabelas de controle
  • Permite retomar de onde parou com --resume
  • Não reprocessa workflows já analisados
  • Mantém contador de tentativas para cada item

4. Novos Comandos CLI

🚀 Uso

Instalação

# Se estiver usando poetry
poetry install

# Ou instale diretamente
pip install -e .

Comandos Disponíveis

1. Processamento Completo

# Processar organização do zero
gh_map process --org <nome-da-org>

# Com configurações customizadas
gh_map process --org <nome-da-org> --batch-size 20 --wait 120

2. Retomar Processamento

# Retomar de onde parou (após interrupção ou rate limit)
gh_map process --org <nome-da-org> --mode resume

# Ou use o atalho
gh_map resume --org <nome-da-org>

3. Processar Apenas Uses (após coletar repos e workflows)

# Útil quando repos e workflows já foram coletados
gh_map process --org <nome-da-org> --mode uses-only

4. Verificar Status

# Ver estatísticas do processamento
gh_map status --org <nome-da-org>

# Ou através do modo
gh_map process --org <nome-da-org> --mode status

5. Reset de Status (mantém dados)

# Reseta status de processamento mas mantém dados coletados
gh_map reset --org <nome-da-org> --confirm

6. Limpar Dados

# Limpar todos os dados
gh_map clean --org <nome-da-org> --confirm

# Limpar mas manter repositórios
gh_map clean --org <nome-da-org> --confirm --keep-repos

7. Exportar Dados

# Exportar para JSON
gh_map export --org <nome-da-org> --format json --output data.json

# Exportar para CSV (gera 3 arquivos)
gh_map export --org <nome-da-org> --format csv --output export

📊 Estrutura de Dados

Tabelas SQLite

1. repositorios

  • Informações dos repositórios da organização

2. workflow_runs

  • Workflows do GitHub Actions de cada repositório

3. uses_workflows

  • Actions utilizadas em cada workflow

4. workflow_status (Nova)

  • Controle de processamento de cada workflow
  • Status: completed, error, rate_limited, not_found, yaml_error, skipped
  • Contador de tentativas

5. processing_status (Nova)

  • Estado geral do processamento
  • Checkpoints para retomada

6. rate_limit_log (Nova)

  • Histórico de rate limits encontrados
  • Usado para evitar requisições durante período de espera

Arquivos Parquet

  • repos.parquet - Repositórios
  • workflow_runs.parquet - Workflows
  • uses_workflows.parquet - Uses encontrados

🔄 Fluxo de Processamento

  1. Coleta de Repositórios

    • Lista páginas da API incrementalmente
    • Salva em lotes no banco e parquet
    • Checkpoint a cada página processada
  2. Coleta de Workflows

    • Processa repositório por repositório
    • Pula repositórios já processados
    • Salva incrementalmente
  3. Extração de Uses

    • Baixa YAMLs dos workflows
    • Extrai actions recursivamente
    • Marca status de cada workflow
    • Retry automático em caso de falha

🛡️ Resiliência

Cenários Tratados:

  • Rate Limit (429): Aguarda e tenta novamente
  • Timeout: Retry automático
  • Erro 404: Marca como not_found e continua
  • YAML inválido: Marca como yaml_error e continua
  • Interrupção: Use --resume para continuar

Limites de Retry:

  • Máximo de 3 tentativas por workflow
  • Workflows com muitos erros são pulados
  • Rate limit reseta contador após sucesso

📈 Monitoramento

Status Report mostra:

  • Total de repositórios coletados
  • Total de workflows encontrados
  • Total de uses extraídos
  • Workflows processados com sucesso
  • Workflows com erro
  • Workflows aguardando retry (rate limited)

💡 Dicas de Uso

  1. Para grandes organizações: Use batch size maior (ex: --batch-size 50)

  2. Se encontrar muitos rate limits: Aumente tempo de espera (ex: --wait 300)

  3. Para debug: Acompanhe os logs coloridos no console

  4. Consulta durante processamento: Os dados são salvos incrementalmente, permitindo consultas SQL/Parquet mesmo durante a coleta

  5. Processamento em etapas:

    # Primeiro, colete apenas repositórios
    gh_map process --org myorg
    # (interrompa com Ctrl+C após coletar repos)
    
    # Depois, continue com workflows e uses
    gh_map resume --org myorg
    

🔍 Consultas SQL Úteis

-- Workflows pendentes de processamento
SELECT COUNT(*) FROM workflow_runs wr
LEFT JOIN workflow_status ws ON wr.node_id = ws.node_id
WHERE ws.status IS NULL OR ws.status != 'completed';

-- Top 10 actions mais usadas
SELECT use, COUNT(*) as count 
FROM uses_workflows 
GROUP BY use 
ORDER BY count DESC 
LIMIT 10;

-- Repositórios com mais workflows
SELECT r.name, COUNT(w.id) as workflow_count
FROM repositorios r
JOIN workflow_runs w ON r.id = w.id_repo
GROUP BY r.name
ORDER BY workflow_count DESC;

🐛 Troubleshooting

Problema: Rate limit constante

Solução: Aumente o tempo de espera ou execute em horários com menos tráfego

Problema: Memória insuficiente para grandes orgs

Solução: Reduza o batch size para processar menos itens por vez

Problema: Processo travado

Solução: Use Ctrl+C para interromper e depois gh_map resume para continuar

📝 Notas de Implementação

Diferenças da v1:

  1. Não carrega tudo em memória antes de salvar
  2. Salva incrementalmente em lotes configuráveis
  3. Rate limit com retry inteligente e backoff
  4. Sistema de checkpoint para retomada
  5. Múltiplos modos de operação
  6. Comandos auxiliares (status, reset, clean, export)
  7. Melhor tratamento de erros e edge cases

Release files for gh-map-pipelines 0.2.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gh-map-pipelines 0.2.3
File Size Uploaded
gh_map_pipelines-0.2.3.tar.gz 30.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gh-map-pipelines 0.2.3
File Interpreter ABI Platform
gh_map_pipelines-0.2.3-py3-none-any.whl Python 3 none any Details

Total release size: 63.6 kB

Release files / gh_map_pipelines-0.2.3.tar.gz

Download URL gh_map_pipelines-0.2.3.tar.gz
Size 30.7 kB
Tags Source
SHA-256 checksum
How to use checksums
9d3065e6bc8320aae2d3189a342264a286b981b75e36f18e8e112588863449d2
BLAKE2b-256 checksum
How to use checksums
c1d51a55ab5730467e5c2ab7e355c82123c672a8bcfd4ab5bc2d74a088142204
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.2 CPython/3.12.3 Linux/6.6.87.2-microsoft-standard-WSL2

Release files / gh_map_pipelines-0.2.3-py3-none-any.whl

Download URL gh_map_pipelines-0.2.3-py3-none-any.whl
Size 32.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
11fa445a324c26807f7bcc02e7f7227730229c37b97923a24cab1a1d0814a089
BLAKE2b-256 checksum
How to use checksums
4630fdc3df7ee6e01b927fb974db1d450f1bda6ab4c613d992d1574354914295
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.2 CPython/3.12.3 Linux/6.6.87.2-microsoft-standard-WSL2

Release history Release notifications | RSS feed

This release

0.2.3 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page