Appearance
Arquitetura
A arquitetura foi simplificada para evitar camadas desnecessarias.
text
HTTP client
-> Fastify route
-> Controller especifico
-> Service especifico do endpoint
-> AuthService
-> Axios Veeam ONE APItext
Prometheus
-> GET /metrics
-> JobsExporter
-> Services especificos de jobs
-> AuthService
-> Axios Veeam ONE API
-> RepositoriesExporter
-> Services especificos de repositories/SOBR
-> AuthService
-> Axios Veeam ONE APIDependencias
- Cada controller de jobs depende somente do seu service.
JobsExporterdepende da lista de services de jobs, nao de controllers.RepositoriesExporterdepende dos services de repositories e scale-out repositories, nao de controllers.- Cada service de jobs depende de
AxiosInstanceeAuthService, mantendo localmente sua paginacao, retry401e tratamento de erro. - Cada service de repositórios depende de
AxiosInstanceeAuthService, repassa query strings para o Veeam ONE e mantém o payload REST original. AuthServicedepende deAxiosInstance.Fastifynao entra dentro dos services.prom-clientfica isolado emsrc/exporters/*.exporter.ts.
Services Por Endpoint
VmBackupJobsServiceconsultaGET /api/v2.2/vbrJobs/vmBackupJobs.BackupCopyJobsServiceconsultaGET /api/v2.2/vbrJobs/backupCopyJobs.BackupToTapeJobsServiceconsultaGET /api/v2.2/vbrJobs/backupToTapeJobs.RepositoriesServiceconsultaGET /api/v2.2/vbr/repositories.ScaleoutRepositoriesServiceconsultaGET /api/v2.2/vbr/scaleoutRepositories.
Cada service tem seu controller e sua rota HTTP. A rota agregada /jobs nao lista mais todos os jobs.
As rotas REST de repositórios funcionam como proxy tecnico limpo: nao renomeiam, nao resumem e nao reestruturam o payload oficial.
Endpoints Veeam ONE consumidos
GET /api/v2.2/vbrJobs/vmBackupJobsGET /api/v2.2/vbrJobs/backupCopyJobsGET /api/v2.2/vbrJobs/backupToTapeJobsGET /api/v2.2/vbr/repositoriesGET /api/v2.2/vbr/scaleoutRepositories
Os endpoints usam paginacao com Offset e Limit.
Autenticacao
O AuthService chama POST /api/token com grant_type=password no primeiro acesso.
Depois disso:
- Mantem o
access_tokenem memoria. - Usa
refresh_tokenquando o token expira. - Evita logins concorrentes usando uma promessa em andamento.
- Invalida o token e tenta novamente quando o Veeam retorna
401.