Unify Redfish analysis through raw replay and add storage volumes

This commit is contained in:
Mikhail Chusavitin
2026-02-24 18:34:13 +03:00
parent 7a1285db99
commit 66fb90233f
5 changed files with 294 additions and 109 deletions

View File

@@ -647,6 +647,7 @@ function renderConfig(data) {
const config = data.hardware || data;
const spec = data.specification;
const devices = Array.isArray(config.devices) ? config.devices : [];
const volumes = Array.isArray(config.volumes) ? config.volumes : [];
const cpus = devices.filter(d => d.kind === 'cpu');
const memory = devices.filter(d => d.kind === 'memory');
@@ -847,7 +848,7 @@ function renderConfig(data) {
// Storage tab
html += '<div class="config-tab-content" id="config-storage">';
if (storage.length > 0) {
if (storage.length > 0 || volumes.length > 0) {
const storTotal = storage.length;
const storHDD = storage.filter(s => s.type === 'HDD').length;
const storSSD = storage.filter(s => s.type === 'SSD').length;
@@ -862,6 +863,7 @@ function renderConfig(data) {
<div class="stat-box"><span class="stat-value">${storTotal}</span><span class="stat-label">Всего слотов</span></div>
<div class="stat-box"><span class="stat-value">${storage.filter(s => s.present).length}</span><span class="stat-label">Установлено</span></div>
<div class="stat-box"><span class="stat-value">${totalTB > 0 ? totalTB + ' TB' : '-'}</span><span class="stat-label">Объём</span></div>
<div class="stat-box"><span class="stat-value">${volumes.length}</span><span class="stat-label">Логических томов</span></div>
<div class="stat-box model-box"><span class="stat-value">${typesSummary.join(', ') || '-'}</span><span class="stat-label">По типам</span></div>
</div>
<table class="config-table"><thead><tr><th>NO.</th><th>Статус</th><th>Расположение</th><th>Backplane ID</th><th>Тип</th><th>Модель</th><th>Размер</th><th>Серийный номер</th></tr></thead><tbody>`;
@@ -880,6 +882,21 @@ function renderConfig(data) {
</tr>`;
});
html += '</tbody></table>';
if (volumes.length > 0) {
html += `<h3 style="margin-top:16px;">Логические тома (RAID/VROC)</h3>
<table class="config-table"><thead><tr><th>ID</th><th>Имя</th><th>Контроллер</th><th>RAID</th><th>Размер</th><th>Статус</th></tr></thead><tbody>`;
volumes.forEach(v => {
html += `<tr>
<td>${escapeHtml(v.id || '-')}</td>
<td>${escapeHtml(v.name || '-')}</td>
<td>${escapeHtml(v.controller || '-')}</td>
<td>${escapeHtml(v.raid_level || '-')}</td>
<td>${v.size_gb > 0 ? `${v.size_gb} GB` : '-'}</td>
<td>${escapeHtml(v.status || '-')}</td>
</tr>`;
});
html += '</tbody></table>';
}
} else {
html += '<p class="no-data">Нет данных о накопителях</p>';
}