This commit is contained in:
2026-06-25 13:50:48 -05:00
parent 7f925aa8e5
commit 411e8325b0
2 changed files with 39 additions and 7 deletions

View File

@@ -2381,17 +2381,35 @@ async function openVCenterImport() {
async function previewVCenterImport(payload) { async function previewVCenterImport(payload) {
vcenterImportLoading.value = true; vcenterImportLoading.value = true;
vcenterImportError.value = ''; vcenterImportError.value = '';
vcenterTraceEntries.value = [{
info: true,
message: 'vCenter preview request is running.',
details: {
filter: payload.filter,
limit: payload.limit,
startedAt: new Date().toISOString()
}
}];
vcenterTraceOpen.value = true;
try { try {
const result = await api.post('/api/hosts/import/vcenter/preview', payload); const result = await api.post('/api/hosts/import/vcenter/preview', payload);
vcenterImportStatus.value = result.status; vcenterImportStatus.value = result.status;
vcenterImportDiagnostics.value = result.diagnostics || null; vcenterImportDiagnostics.value = result.diagnostics || null;
vcenterTraceEntries.value = result.trace || []; vcenterTraceEntries.value = result.trace?.length ? result.trace : [{
info: true,
message: 'Preview completed, but the API returned no trace entries.',
details: { count: result.count || 0, diagnostics: result.diagnostics || null }
}];
vcenterPreviewRows.value = result.candidates || []; vcenterPreviewRows.value = result.candidates || [];
if (vcenterTraceEntries.value.length) vcenterTraceOpen.value = true; vcenterTraceOpen.value = true;
notify(`Found ${result.count || 0} vCenter host candidate(s) from ${result.diagnostics?.totalFromVCenter ?? 'unknown'} VM(s)`); notify(`Found ${result.count || 0} vCenter host candidate(s) from ${result.diagnostics?.totalFromVCenter ?? 'unknown'} VM(s)`);
} catch (err) { } catch (err) {
vcenterTraceEntries.value = err.payload?.trace || []; vcenterTraceEntries.value = err.payload?.trace?.length ? err.payload.trace : [{
if (vcenterTraceEntries.value.length) vcenterTraceOpen.value = true; info: true,
message: 'Preview failed before a vCenter HTTP trace could be captured.',
details: { error: err.message, status: err.status || null }
}];
vcenterTraceOpen.value = true;
vcenterImportError.value = err.message; vcenterImportError.value = err.message;
notify(err.message, 'error'); notify(err.message, 'error');
} finally { } finally {
@@ -2402,9 +2420,15 @@ async function previewVCenterImport(payload) {
async function importVCenterHosts(payload) { async function importVCenterHosts(payload) {
vcenterImportLoading.value = true; vcenterImportLoading.value = true;
vcenterImportError.value = ''; vcenterImportError.value = '';
vcenterTraceEntries.value = [{
info: true,
message: 'vCenter import request is running.',
details: { vmIds: payload.vmIds, startedAt: new Date().toISOString() }
}];
vcenterTraceOpen.value = true;
try { try {
const result = await api.post('/api/hosts/import/vcenter', payload); const result = await api.post('/api/hosts/import/vcenter', payload);
vcenterTraceEntries.value = result.trace || vcenterTraceEntries.value; vcenterTraceEntries.value = result.trace?.length ? result.trace : vcenterTraceEntries.value;
await refreshAll(); await refreshAll();
vcenterPreviewRows.value = []; vcenterPreviewRows.value = [];
vcenterImportDiagnostics.value = null; vcenterImportDiagnostics.value = null;
@@ -2413,8 +2437,12 @@ async function importVCenterHosts(payload) {
const skipped = result.skipped?.length || 0; const skipped = result.skipped?.length || 0;
notify(`Imported ${result.imported?.length || 0} host(s)${skipped ? `, skipped ${skipped} duplicate(s)` : ''}`); notify(`Imported ${result.imported?.length || 0} host(s)${skipped ? `, skipped ${skipped} duplicate(s)` : ''}`);
} catch (err) { } catch (err) {
vcenterTraceEntries.value = err.payload?.trace || []; vcenterTraceEntries.value = err.payload?.trace?.length ? err.payload.trace : [{
if (vcenterTraceEntries.value.length) vcenterTraceOpen.value = true; info: true,
message: 'Import failed before a vCenter HTTP trace could be captured.',
details: { error: err.message, status: err.status || null }
}];
vcenterTraceOpen.value = true;
vcenterImportError.value = err.message; vcenterImportError.value = err.message;
notify(err.message, 'error'); notify(err.message, 'error');
} finally { } finally {

View File

@@ -6212,6 +6212,10 @@ input:read-only {
animation: modalBackdropIn .18s ease both; animation: modalBackdropIn .18s ease both;
} }
.modal-backdrop:has(.vcenter-trace-modal) {
z-index: 120;
}
.form-modal { .form-modal {
background: background:
linear-gradient(145deg, rgba(25, 29, 63, .995), rgba(5, 13, 32, .995)); linear-gradient(145deg, rgba(25, 29, 63, .995), rgba(5, 13, 32, .995));