Sistema de monitoramento centralizado para jobs de ETL, oferecendo visibilidade operacional e facilitando análise de falhas em tempo real.
Centralizar informações sobre a execução de jobs de ETL, aumentando a visibilidade e facilitando a análise de falhas através de:
- 📝 Logging padronizado de execuções
- 🔌 API REST completa para consultas e gerenciamento
- 📊 Visualização clara de status, métricas e erros
- 📈 Estatísticas e taxa de sucesso
- 🔍 Rastreamento detalhado de execuções
O projeto segue os princípios de Clean Architecture e está organizado em camadas:
DataPulseCM/
├── src/
│ ├── EtlMonitoring.Api/ # API REST (Controllers, Program.cs)
│ ├── EtlMonitoring.Core/ # Entidades, DTOs, Interfaces
│ └── EtlMonitoring.Infrastructure/ # Repositórios, Data Access
└── database/
└── scripts/ # Scripts SQL (tabelas, procedures)
- API Layer: Controllers e configuração da API
- Core Layer: Entidades de domínio, interfaces e DTOs
- Infrastructure Layer: Implementação de repositórios e acesso a dados
- .NET 9.0 - Framework principal
- ASP.NET Core - Web API
- Dapper - Micro ORM para acesso a dados
- SQL Server - Banco de dados
- Swagger/OpenAPI - Documentação da API
- .NET 9.0 SDK
- SQL Server 2019+ (ou SQL Server Express)
- Visual Studio 2022+ ou VS Code
git clone https://github.com/ClaudioMatheusDev/DataPulseCM.git
cd DataPulseCMa) Executar os scripts SQL na ordem:
-- 1. Criar banco e tabelas
database/scripts/01-create-tables.sql
-- 2. Criar stored procedures
database/scripts/02-create-stored-procedures.sql
-- 3. (Opcional) Inserir dados de exemplo
database/scripts/03-seed-data.sqlb) Configurar a connection string:
Edite src/EtlMonitoring.Api/appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=DataPulseCM;Integrated Security=true;TrustServerCertificate=true;"
}
}Ou para autenticação SQL:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=DataPulseCM;User Id=seu_usuario;Password=sua_senha;TrustServerCertificate=true;"
}
}cd src/EtlMonitoring.Api
dotnet restore
dotnet build
dotnet run- Swagger UI: https://localhost:7268/swagger
- API Base URL: https://localhost:7268/api
- HTTP: http://localhost:5105
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/jobs |
Lista execuções recentes (limit opcional) |
GET |
/api/jobs/{id} |
Busca execução por ID |
GET |
/api/jobs/filter |
Filtra execuções (jobName, status, datas) |
POST |
/api/jobs/start |
Inicia nova execução de job |
POST |
/api/jobs/{id}/finish |
Finaliza execução |
GET |
/api/jobs/statistics |
Retorna estatísticas gerais |
GET |
/api/jobs/failed |
Lista execuções com falha |
GET |
/api/jobs/by-name/{jobName} |
Última execução do job |
GET |
/api/jobs/by-name/{jobName}/history |
Histórico de execuções do job |
GET |
/api/jobs/by-name/{jobName}/success-rate |
Taxa de sucesso do job |
curl -X POST "https://localhost:7268/api/jobs/start" \
-H "Content-Type: application/json" \
-d '{"jobName": "ImportacaoClientes"}'Resposta:
{
"executionId": 123,
"jobName": "ImportacaoClientes",
"message": "Job iniciado com sucesso"
}curl -X POST "https://localhost:7268/api/jobs/123/finish" \
-H "Content-Type: application/json" \
-d '{"status": "Sucesso", "errorMessage": null}'Status válidos:
SucessoFalhaParcialEmExecucaoCancelado
curl -X GET "https://localhost:7268/api/jobs/statistics?startDate=2026-01-01&endDate=2026-01-31"Resposta:
{
"total": 150,
"successful": 142,
"failed": 8,
"successRate": 94.67,
"byStatus": {
"Sucesso": 142,
"Falha": 8
},
"period": {
"startDate": "2026-01-01",
"endDate": "2026-01-31"
}
}| Coluna | Tipo | Descrição |
|---|---|---|
| ExecutionId | BIGINT | ID único da execução |
| JobName | NVARCHAR(200) | Nome do job |
| StartDateTime | DATETIME2(3) | Data/hora de início |
| EndDateTime | DATETIME2(3) | Data/hora de término |
| Status | VARCHAR(20) | Status da execução |
| ErrorMessage | NVARCHAR(MAX) | Mensagem de erro |
| RowsProcessed | INT | Linhas processadas |
| RowsInserted | INT | Linhas inseridas |
| RowsUpdated | INT | Linhas atualizadas |
| RowsDeleted | INT | Linhas deletadas |
| ExecutionDurationMs | INT | Duração em milissegundos |
| ServerName | NVARCHAR(100) | Nome do servidor |
| DatabaseName | NVARCHAR(100) | Nome do banco |
usp_ETL_StartJobExecution- Inicia execução e retorna IDusp_ETL_EndJobExecution- Finaliza execução com statususp_ETL_GetJobExecutions- Lista execuções com filtrosusp_ETL_GetRecentExecutions- Lista execuções recentes
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Este projeto está sob a licença MIT.
Claudio Matheus
- GitHub: @ClaudioMatheusDev
Para reportar bugs ou sugerir melhorias, abra uma issue.
⭐ Se este projeto foi útil, considere dar uma estrela!