wulf-pulse/lib/services/veeam-factory.ts
lorentz 5dc7a7e66b feat: Veeam VSPC backup integration - sync, compliance, UI
- Database: 7 Veeam tables + backup_type_udf column on configuration_items
- API Client: VSPC REST API v3 client with pagination, rate limiting, Bearer auth
- Sync Service: full/incremental sync for orgs, servers, repos, jobs, agent jobs, workloads
- Scheduler: veeam-incremental (30min) and veeam-full (daily 2AM) schedules
- Compliance Engine: cross-references Autotask config items vs Veeam workloads
- API Endpoints: backup-status, companies, workloads, jobs, repos, compliance, sync
- UI: Backup Status page with Overview + Contract Compliance tabs
- Navigation: added Backup Status link with HardDrive icon
- Docker: added VEEAM_VSPC_URL and VEEAM_VSPC_API_KEY env vars to compose
2026-02-11 21:04:28 -05:00

41 lines
1.1 KiB
TypeScript

import { VeeamClient, VeeamClientConfig } from './veeam-client';
let veeamClientInstance: VeeamClient | null = null;
/**
* Check if Veeam VSPC credentials are configured
*/
export function isVeeamConfigured(): boolean {
return !!(process.env.VEEAM_VSPC_URL && process.env.VEEAM_VSPC_API_KEY);
}
/**
* Get or create Veeam VSPC client singleton instance
*/
export function getVeeamClient(): VeeamClient {
if (!veeamClientInstance) {
const config: VeeamClientConfig = {
baseUrl: process.env.VEEAM_VSPC_URL || '',
apiKey: process.env.VEEAM_VSPC_API_KEY || '',
};
// Validate configuration
if (!config.baseUrl || !config.apiKey) {
throw new Error(
'Veeam VSPC API credentials missing. Please set VEEAM_VSPC_URL and VEEAM_VSPC_API_KEY environment variables.'
);
}
veeamClientInstance = new VeeamClient(config);
console.log('Veeam VSPC client initialized');
}
return veeamClientInstance;
}
/**
* Reset the singleton instance (useful for testing)
*/
export function resetVeeamClient(): void {
veeamClientInstance = null;
}