- 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
41 lines
1.1 KiB
TypeScript
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;
|
|
}
|