Biblioteca Python para extração automatizada de dados para governança em Microsoft Fabric
Project description
fabricgov
Biblioteca Python para assessment automatizado de governança em ambientes Microsoft Fabric
🇺🇸 English documentation: README.en.md | 📚 Documentação completa: luhborba.github.io/fabricgov
🎯 O que é?
fabricgov automatiza coleta de dados de governança em Microsoft Fabric via CLI ou Python.
Principais features:
- 🔍 Inventário completo de workspaces e 27+ tipos de artefatos
- 🔐 Coleta de acessos por artefato via Scanner API —
artifact_usersno resultado do inventory - 🗄️ Datasources e modelos semânticos (tabelas, colunas, medidas, DAX) extraídos automaticamente
- 🔄 Histórico de refresh e agendamentos configurados
- 🏢 Domínios, tags, capacidades e workloads do tenant
- 📋 Log de atividades do tenant — até 28 dias de histórico
- 💾 Sistema de checkpoint para tenants grandes (retoma de onde parou)
- 📊 Export em JSON ou CSV
- 📄 Relatório HTML automático com gráficos e findings de governança (PT + EN)
- 🔍 Análise de governança no terminal via
fabricgov analyze(sem chamadas de API) - 🔁 Comparação de snapshots via
fabricgov diff— diff.json com todas as dimensões - 🔑 Integração com Azure Key Vault — credenciais sem texto plano em disco
- ⚡ CLI pronto para uso
- 🛡️ Rate limit handling automático
📦 Instalação
# Instalação padrão
pip install fabricgov
# Com suporte a Azure Key Vault
pip install fabricgov[keyvault]
# Ou via Poetry
poetry add fabricgov
# CLI fica disponível
fabricgov --help
🚀 Quick Start
1. Autenticação
Escolha o método conforme seu cenário:
Service Principal (automação / CI-CD)
# Copie o template e preencha com suas credenciais
cp .env-example .env
# FABRICGOV_TENANT_ID=seu-tenant-id
# FABRICGOV_CLIENT_ID=seu-client-id
# FABRICGOV_CLIENT_SECRET=seu-client-secret
fabricgov auth sp # valida as credenciais
Device Flow (uso manual / desenvolvimento local)
fabricgov auth device # abre fluxo interativo no browser (sem .env necessário)
Azure Key Vault (produção / sem credenciais em disco)
pip install fabricgov[keyvault]
fabricgov auth keyvault --vault-url https://meu-vault.vault.azure.net/
Permissões necessárias
| Autenticação | Permissão obrigatória | Onde configurar |
|---|---|---|
| Service Principal | Tenant.Read.All + Workspace.ReadWrite.All (Application) |
Azure AD → App Registrations → API Permissions |
| Service Principal | Habilitado nas APIs Admin do Fabric | Portal Admin do Fabric → Configurações do tenant |
| Device Flow | Role Fabric Administrator no tenant | Portal Admin do Fabric → Usuários |
⚠️ Sem essas permissões, as coletas retornam
403 Forbidden.
2. Use o CLI
# Coleta inventário (inclui artifact_users, datasources e semantic_models)
fabricgov collect inventory
# Coleta acessos de workspaces (com checkpoint automático)
fabricgov collect workspace-access
fabricgov collect all-access # atalho para workspace-access
# Coleta refresh
fabricgov collect refresh-history
fabricgov collect refresh-schedules
fabricgov collect all-refresh # histórico + agendamentos
# Coleta infraestrutura
fabricgov collect domains
fabricgov collect tags
fabricgov collect capacities
fabricgov collect workloads
# Coleta log de atividades
fabricgov collect activity # últimos 7 dias
fabricgov collect activity --days 28 # máximo histórico (28 dias)
# Coleta completa em sessão única
fabricgov collect all
fabricgov collect all --days 28 # inclui atividades na coleta completa (28 dias)
fabricgov collect status # status da sessão
# Comparação de snapshots
fabricgov diff # 2 runs mais recentes
fabricgov diff --from output/20260301_120000 --to output/20260309_143000
ℹ️ Os comandos
report-access,dataset-accessedataflow-accessforam removidos na v1.1.0. Os dados de acesso por artefato agora estão disponíveis diretamente emartifact_usersapósfabricgov collect inventory.
Flags disponíveis:
--format json|csv(padrão: csv)--output DIR(padrão: output)--resume/--no-resume(padrão: resume habilitado)
4. Analise os findings de governança (terminal)
fabricgov analyze # pasta mais recente em output/
fabricgov analyze --from output/20260227_143000/ # pasta específica
fabricgov analyze --from output/20260227_143000/ --lang en # mensagens em inglês
Exibe findings diretamente no terminal (sem abrir o HTML) e salva findings.json na pasta de origem.
3. Gere o relatório de governança
fabricgov report # pasta mais recente em output/
fabricgov report --from output/20260227_143000/ # pasta específica
fabricgov report --from output/20260227_143000/ --open # gera e abre no browser
Gera automaticamente dois arquivos HTML standalone:
report.html— Portuguêsreport.en.html— English
📘 Guia completo do relatório → — seções, fontes de dados e regras aplicadas
5. Ou use como biblioteca Python
A classe FabricGov oferece uma API de alto nível — sem CLI, sem configuração manual de auth/exporters:
from fabricgov import FabricGov
# Autentica via .env (TENANT_ID, CLIENT_ID, CLIENT_SECRET)
fg = FabricGov.from_env()
# Coleta completa em uma pasta de sessão (equivalente ao 'collect all')
run_dir = fg.collect.all(days=28)
# Gera relatório HTML
fg.report(output_path=run_dir / "report.html", lang="pt")
# Compara os dois runs mais recentes
result = fg.diff()
# Findings de governança (sem chamadas de API)
findings = fg.analyze(source_dir=run_dir)
for f in findings:
print(f["severity"], f["count"], f["message"])
📊 Coletores Disponíveis
| Coletor | O que coleta | Checkpoint |
|---|---|---|
WorkspaceInventoryCollector |
Inventário completo (workspaces + 27 tipos de artefatos) | ✅ |
WorkspaceAccessCollector |
Roles (Admin, Member, Contributor, Viewer) | ✅ |
ReportAccessCollector |
Permissões em reports | ✅ |
DatasetAccessCollector |
Permissões em datasets | ✅ |
DataflowAccessCollector |
Permissões em dataflows | ✅ |
RefreshHistoryCollector |
Histórico de execuções de datasets e dataflows | — |
RefreshScheduleCollector |
Agendamentos configurados (sem chamadas de API) | — |
DomainCollector |
Domínios do tenant (hierarquia, sensitivity labels) | — |
TagCollector |
Tags do tenant (escopo tenant ou domínio) | — |
CapacityCollector |
Capacidades Premium/Fabric (SKU, região, admins) | — |
WorkloadCollector |
Workloads de capacidades Gen1 (P-SKU, A-SKU) | — |
ActivityCollector |
Log de atividades do tenant (até 28 dias) | — |
💾 Sistema de Checkpoint
Para tenants grandes, o checkpoint salva progresso automaticamente:
# Execução 1: processa 200 itens, salva checkpoint
fabricgov collect report-access
# ⏹️ Rate limit atingido (429)
# Aguarda ~1h30min
# Execução 2: retoma de onde parou (automático)
fabricgov collect report-access
# ✓ Processa mais 200 itens...
Como funciona:
- Detecta rate limit (429)
- Salva checkpoint automaticamente
- Encerra script (terminal liberado)
- Na próxima execução, retoma de onde parou
🏗️ Arquitetura
fabricgov/
├── cli/ # CLI via Click
├── auth/ # ServicePrincipalAuth + DeviceFlowAuth
├── collectors/ # 12 collectors (access, refresh, infraestrutura, atividades)
├── exporters/ # JSON/CSV export
├── reporters/ # Report HTML (InsightsEngine + HtmlReporter + template)
├── diff/ # Comparação de snapshots (DiffEngine + comparators)
├── checkpoint.py # Sistema de checkpoint
└── exceptions.py # Exceções customizadas
📊 Exemplo de Output
output/
├── inventory_result.json # Reutilizável entre collectors
├── checkpoint_report_access.json # Checkpoint (auto-removido ao completar)
└── 20260226_143000/ # Timestamped folder
├── summary.json
├── workspaces.csv
├── reports.csv
├── workspace_access.csv
├── report_access.csv
├── dataset_access.csv
├── dataflow_access.csv
├── refresh_history.csv
├── refresh_schedules.csv
├── domains.csv
├── tags.csv
├── capacities.csv
├── workloads.csv
├── workloads_errors.csv
├── activity_events.csv # Log de atividades do tenant
├── report.html # Relatório de governança (PT)
├── report.en.html # Governance report (EN)
├── findings.json # Findings de governança (fabricgov analyze)
└── diff.json # Comparativo com snapshot anterior (fabricgov diff)
⚠️ Limitações Conhecidas
Rate Limiting
- APIs Admin: ~200 requests/hora (não documentado)
- Tenants grandes: múltiplas execuções com pausas de ~1h30min
- Checkpoint permite retomar sem perder progresso
Personal Workspaces
- Não suportam APIs de usuários (retornam 404)
- Filtrados automaticamente (30-60% dos workspaces em tenants típicos)
Performance
- 200 workspaces: ~10 min
- 663 reports: ~5h (4 execuções com pausas)
- 2000+ itens: requer coleta agendada
🗺️ Roadmap
✅ v0.3.0 - 2026-02-23
- CLI completo (
fabricgovcommand) - DatasetAccessCollector
- DataflowAccessCollector
- 5 collectors com checkpoint
- Primeira Versão no Pypi
✅ v0.4.0 - 2026-02-24
- RefreshHistoryCollector (histórico de execuções)
- RefreshScheduleCollector (agendamentos configurados)
- CLI:
fabricgov collect refresh-history - CLI:
fabricgov collect refresh-schedules - CLI:
fabricgov collect all-refresh - CLI:
fabricgov auth sp(renomeado deauth test)
✅ v0.5.0
- DomainCollector (domínios do tenant)
- TagCollector (tags do tenant)
- CapacityCollector (capacidades Premium/Fabric)
- WorkloadCollector (workloads de capacidades Gen1)
- CLI:
fabricgov collect domains/tags/capacities/workloads - 11 collectors no total
- CLI: Orquestradores
all-infrastructure,all-access,all-refresh,all - CLI:
fabricgov collect all— coleta completa em sessão única com checkpoint - CLI:
fabricgov collect status— status da sessão e checkpoints pendentes - Progress bars visuais nos coletores de acesso e refresh
✅ v0.6.0
- Atualização de Documentação interna (pt-BR)
✅ v0.6.1
- Documentação em inglês (
docs/en/) - README em inglês
✅ v0.6.2
- Quick Start com Device Flow e tabela de permissões
✅ v0.7.0 — 2026-02-27
- Report HTML standalone gerado via
fabricgov report - Duas versões automáticas: PT (
report.html) + EN (report.en.html) - 10 gráficos Plotly interativos + KPI cards + findings de governança
- Seção dedicada de Workspaces com tabela completa de artefatos
✅ v0.8.0
- Identificar datasets sem dono
- Usuários externos com acesso a workspaces
- Workspaces sem refresh há mais de 30 dias
- CLI:
fabricgov analyze— findings no terminal +findings.json
✅ v0.8.1
- Correção de erro no relatório HTML (conflito
dict.itemsno Jinja2) - Cards de artefatos colapsáveis com nome, dono, workspace e última modificação
- Tabela "Top Usuários por Artefatos Próprios"
- Layout de gráficos otimizado na seção Inventário
- Arquivo
.env-examplecom variáveis documentadas
✅ v0.9.0 (Atual) — em desenvolvimento)
- Integração com Azure Key Vault (
fabricgov auth keyvault) -
ActivityCollector— log de atividades do tenant (até 28 dias) - CLI:
fabricgov collect activity --days N -
fabricgov collect all --days N— inclui atividades na coleta completa -
fabricgov diff— comparação de dois snapshots de output (workspaces, artefatos, acesso, refresh, findings)
✅ v1.0.0
-
FabricGovPython API — facade de alto nível para uso programático sem CLI - Relatório HTML: seções Atividade e Tendências (Activity/Trends com dados do
activity_events.csvediff.json) - MkDocs — documentação oficial PT + EN com Material theme, Guia CLI, Guia Python, Exemplos
✅ v1.0.1 — 2026-03-28
- fix(checkpoint): guard against
Nonecheckpoint on rate limit — evita crash quando checkpoint está ausente ao atingir 429 - fix(checkpoint): corrige lógica do
inner_resumepara retomar corretamente sub-coletores internos
✅ v1.0.2 — 2026-04-06
- feat(collect): exibe estimativa de ciclos restantes no resumo da sessão (
collect all) - fix(collect): remove checkpoint obsoleto ao pular sub-coletor já concluído — evita retomadas desnecessárias
✅ v1.0.3 — 2026-04-06
- chore: CHANGELOG, README (PT + EN) e
pyproject.tomladicionados ao repositório
✅ v1.0.4 — 2026-04-06
- chore: remove referências à empresa de todos os arquivos (relatório HTML, docs PT + EN)
✅ v1.1.0 — 2026-04-15
- feat(inventory):
collect()agora retornaartifact_users,datasourcesesemantic_modelsextraídos diretamente da Scanner API - feat(inventory): constante
ARTIFACT_TYPES_WITH_USERScom 22 tipos de artefatos suportados - refactor(inventory):
_list_all_workspaces()filtra portype == "Workspace", excluindo PersonalGroup - deprecate:
ReportAccessCollector,DatasetAccessCollectoreDataflowAccessCollectormarcados como deprecated - breaking(cli): comandos
report-access,dataset-accessedataflow-accessremovidos do CLI
✅ v1.1.1 — 2026-04-15
- fix(inventory): query params no scan (
datasourceDetails,getArtifactUsers, etc.) — a API ignorava quando enviados no body JSON, causandodatasources.csveartifact_users.csvnunca gerados - fix(inventory):
_extract_datasourcesresolvedatasourceInstanceIdGUID via join comdatasourceInstancesdo nível raiz do scan - feat(report): nova seção Datasources no relatório HTML com KPIs, gráfico de tipos e tabela de conexões
- feat(report): seção de Acesso ampliada com tabela
top_artifact_userse gráficoartifact_users_by_type
📚 Documentação
- Documentação completa — MkDocs PT + EN
- Python API — Uso programático com a classe
FabricGov - Autenticação — Service Principal, Device Flow, Key Vault
- Key Vault — Credenciais sem texto plano em disco
- Coletores — Exemplos e casos de uso
- Atividades — Log de atividades do tenant
- Diff de Snapshots — Comparação entre dois runs de coleta
- Relatório HTML — Seções, fontes de dados e regras de governança
- Exportadores — Integração com Power BI, Pandas
- Limitações — Rate limits, performance
- Contribuindo — Como contribuir
📄 Licença
MIT License - veja LICENSE
👤 Autor
Luciano Borba — Consultor Data Engineering
⭐ Se este projeto foi útil, considere dar uma estrela no GitHub!
Project details
Release history Release notifications | RSS feed
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 fabricgov-1.1.1.tar.gz.
File metadata
- Download URL: fabricgov-1.1.1.tar.gz
- Upload date:
- Size: 91.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.3 CPython/3.12.10 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
320a55f4431c755ca58c05dcabc54783262550ac4c40ef9c5ae4008d59afda69
|
|
| MD5 |
d40bd12a89a143c24ecb8c49186a727f
|
|
| BLAKE2b-256 |
0a54e3257f95edcba9e5627d83e7e97ee3d698202260d55b3198c19c215c0cd6
|
File details
Details for the file fabricgov-1.1.1-py3-none-any.whl.
File metadata
- Download URL: fabricgov-1.1.1-py3-none-any.whl
- Upload date:
- Size: 111.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.3 CPython/3.12.10 Windows/11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
91ec5f15fb8b91eb2143073921bec1337f58ec7ae67e106c87f5d98f935b447f
|
|
| MD5 |
68ee9bc6ee867f9d23eec8ce3abefe8d
|
|
| BLAKE2b-256 |
c5170d217e88e0c39dd66a6bada10cc9896069792652eeeb72b8ebd756589e51
|