Map pipelines Github in Parquet and SQLite with incremental processing and rate limit handling
Project description
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óriosworkflow_runs.parquet- Workflowsuses_workflows.parquet- Uses encontrados
🔄 Fluxo de Processamento
-
Coleta de Repositórios
- Lista páginas da API incrementalmente
- Salva em lotes no banco e parquet
- Checkpoint a cada página processada
-
Coleta de Workflows
- Processa repositório por repositório
- Pula repositórios já processados
- Salva incrementalmente
-
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_founde continua - YAML inválido: Marca como
yaml_errore continua - Interrupção: Use
--resumepara 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
-
Para grandes organizações: Use batch size maior (ex:
--batch-size 50) -
Se encontrar muitos rate limits: Aumente tempo de espera (ex:
--wait 300) -
Para debug: Acompanhe os logs coloridos no console
-
Consulta durante processamento: Os dados são salvos incrementalmente, permitindo consultas SQL/Parquet mesmo durante a coleta
-
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:
- Não carrega tudo em memória antes de salvar
- Salva incrementalmente em lotes configuráveis
- Rate limit com retry inteligente e backoff
- Sistema de checkpoint para retomada
- Múltiplos modos de operação
- Comandos auxiliares (status, reset, clean, export)
- Melhor tratamento de erros e edge cases
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gh_map_pipelines-0.2.0.tar.gz.
File metadata
- Download URL: gh_map_pipelines-0.2.0.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/6.6.87.2-microsoft-standard-WSL2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c4453fe2f9671e842117f69bb254814d87ac5048d27171a1e677abcc4431cd9c
|
|
| MD5 |
0c5a88a0cfbcbf5c53a83c6a56b8edbf
|
|
| BLAKE2b-256 |
d56acdabc35cf9e5cfbd56f470cb83c90890579696007ad34c73a8a173a4d714
|
File details
Details for the file gh_map_pipelines-0.2.0-py3-none-any.whl.
File metadata
- Download URL: gh_map_pipelines-0.2.0-py3-none-any.whl
- Upload date:
- Size: 21.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.2 CPython/3.12.3 Linux/6.6.87.2-microsoft-standard-WSL2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9f01e4da9b4cf8c89980a55ad8721ab365de45a2f44a16a63f631d7c18caf85
|
|
| MD5 |
09c2448dda260553a83e3f0d9aaa438b
|
|
| BLAKE2b-256 |
ee9276da2f07fdbf2af58d94e499dd7d3decfe4164ece783efb4d409511c449a
|