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
This commit is contained in:
parent
a1e0e7c7c0
commit
5dc7a7e66b
27 changed files with 3408 additions and 7 deletions
|
|
@ -371,6 +371,16 @@ function mapConfigurationItem(data: any): Record<string, any> {
|
|||
is_deleted: data.is_deleted || false,
|
||||
};
|
||||
|
||||
// Extract backup-type UDF (ID 29693319) from userDefinedFields
|
||||
if (data.userDefinedFields && Array.isArray(data.userDefinedFields)) {
|
||||
const backupUdf = data.userDefinedFields.find(
|
||||
(udf: any) => udf.name === 'Backup Type' || String(udf.name) === '29693319'
|
||||
);
|
||||
if (backupUdf && backupUdf.value) {
|
||||
mapped.backup_type_udf = backupUdf.value;
|
||||
}
|
||||
}
|
||||
|
||||
// Add all other fields dynamically
|
||||
const fieldsToInclude = [
|
||||
'daily_cost', 'hourly_cost', 'monthly_cost', 'per_use_cost', 'setup_fee',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue