Update Inspur parsing and align release docs

This commit is contained in:
2026-02-15 23:13:47 +03:00
parent c13788132b
commit 514da76ddb
11 changed files with 1231 additions and 190 deletions

View File

@@ -8,9 +8,9 @@
## Принципы импорта
1. **Snapshot данных** - JSON содержит состояние сервера на момент сбора, без исторической информации
1. **Snapshot данных** - JSON содержит состояние сервера на момент сбора и может включать историю изменений статуса компонентов
2. **Автоматическое определение LOT** - классификация компонентов определяется приложением на основе vendor/model/type
3. **Статус компонентов** - каждый компонент имеет статус работоспособности (OK, Warning, Critical, Unknown)
3. **Статус компонентов** - каждый компонент имеет статус работоспособности (OK, Warning, Critical, Unknown) и может передавать время проверки статуса
4. **Идемпотентность** - повторный импорт с тем же snapshot не создает дубликаты
5. **Event-driven обновления** - импорт создает события в timeline (LOG_COLLECTED, INSTALLED, REMOVED, FIRMWARE_CHANGED)
@@ -53,6 +53,33 @@
- `filename` (string, опционально) - идентификатор источника данных
- `hardware` (object, обязательно) - структура с аппаратными компонентами
### Общее поле статуса для компонентных секций
Для секций `cpus`, `memory`, `storage`, `pcie_devices`, `power_supplies` поддерживается дополнительное поле:
- `status_checked_at` (string RFC3339, опционально) - дата/время, когда был проверен статус работоспособности компонента
- `status_changed_at` (string RFC3339, опционально) - дата/время последнего изменения статуса компонента
- `status_at_collection` (object, опционально) - зафиксированный статус на момент сбора логов:
- `status` (string) - статус в момент сбора (`OK`, `Warning`, `Critical`, `Unknown`, `Empty`)
- `at` (string RFC3339) - дата/время, к которому относится этот статус
- `status_history` (array, опционально) - история статусов компонента:
- `status` (string) - статус (`OK`, `Warning`, `Critical`, `Unknown`, `Empty`)
- `changed_at` (string RFC3339) - дата/время смены статуса
- `details` (string, опционально) - пояснение к переходу статуса
- `error_description` (string, опционально) - текст ошибки/диагностики для статуса компонента (например при `Warning`/`Critical`)
### Правила экспорта JSON для внешнего проекта
Используйте эти правила, если JSON формируется внешним сервисом/экспортером:
1. Всегда передавайте `status` как текущее состояние компонента в snapshot.
2. Если есть точное время последней смены, передавайте `status_changed_at` (RFC3339, UTC).
3. Если источник умеет фиксировать состояние именно на момент сбора, передавайте `status_at_collection` c полями `status` и `at`.
4. Если источник хранит историю (например Windows Event Log), передавайте `status_history` отсортированным по `changed_at` по возрастанию.
5. В `status_history` не отправляйте записи без `changed_at`; такие записи игнорируются.
6. Для совместимости допускается передавать только старые поля (`status`, `status_checked_at`) без истории.
7. Все даты/время в исторических полях должны быть RFC3339; рекомендуется использовать UTC (`Z`).
---
## Секция hardware
@@ -99,7 +126,8 @@
"frequency_mhz": 2100,
"max_frequency_mhz": 4000,
"manufacturer": "Intel",
"status": "OK"
"status": "OK",
"status_checked_at": "2026-02-10T15:28:00Z"
},
{
"socket": 1,
@@ -109,7 +137,8 @@
"frequency_mhz": 2100,
"max_frequency_mhz": 4000,
"manufacturer": "Intel",
"status": "OK"
"status": "OK",
"status_checked_at": "2026-02-10T15:28:00Z"
}
]
}
@@ -124,6 +153,7 @@
- `max_frequency_mhz` (int, опционально) - максимальная частота в МГц
- `manufacturer` (string, опционально) - производитель (Intel, AMD, etc.)
- `status` (string, опционально) - статус: `OK`, `Warning`, `Critical`, `Unknown`
- `status_checked_at` (string RFC3339, опционально) - дата/время проверки статуса
**Генерация serial_number:**
- Формат: `{board_serial}-CPU-{socket}`
@@ -153,7 +183,8 @@
"manufacturer": "Hynix",
"serial_number": "80AD032419E17CEEC1",
"part_number": "HMCG88AGBRA191N",
"status": "OK"
"status": "OK",
"status_checked_at": "2026-02-10T15:28:00Z"
},
{
"slot": "CPU0_C1D0",
@@ -182,6 +213,7 @@
- `serial_number` (string, условно обязательно если present=true) - серийный номер
- `part_number` (string, опционально) - партномер
- `status` (string, опционально) - статус: `OK`, `Warning`, `Critical`, `Unknown`, `Empty`
- `status_checked_at` (string RFC3339, опционально) - дата/время проверки статуса
**Обработка:**
- Если `present = false` или `status = "Empty"`, компонент не создается/не обновляется
@@ -239,6 +271,7 @@
- `interface` (string, опционально) - интерфейс: `NVMe`, `SATA`, `SAS`
- `present` (bool, обязательно) - наличие диска в слоте
- `status` (string, опционально) - статус: `OK`, `Warning`, `Critical`, `Unknown`
- `status_checked_at` (string RFC3339, опционально) - дата/время проверки статуса
**Обработка firmware:**
- Если версия firmware изменилась относительно предыдущего observation - создается событие FIRMWARE_CHANGED
@@ -266,6 +299,7 @@
"part_number": "V0310C9000000000",
"firmware": "00.03.05",
"status": "OK",
"status_checked_at": "2026-02-10T15:28:00Z",
"input_type": "ACWideRange",
"input_power_w": 137,
"output_power_w": 104,
@@ -285,6 +319,7 @@
- `part_number` (string, опционально) - партномер
- `firmware` (string, опционально) - версия прошивки
- `status` (string, опционально) - статус: `OK`, `Warning`, `Critical`, `Unknown`
- `status_checked_at` (string RFC3339, опционально) - дата/время проверки статуса
- `input_type` (string, опционально) - тип входа
- `input_power_w` (int, опционально) - входная мощность (telemetry)
- `output_power_w` (int, опционально) - выходная мощность (telemetry)
@@ -319,7 +354,8 @@
"max_link_speed": "Gen3",
"serial_number": "RAID-001-12345",
"firmware": "50.9.1-4296",
"status": "OK"
"status": "OK",
"status_checked_at": "2026-02-10T15:28:00Z"
},
{
"slot": "PCIeCard2",
@@ -355,6 +391,7 @@
- `serial_number` (string, опционально) - серийный номер (если доступен, иначе генерируется)
- `firmware` (string, опционально) - версия прошивки
- `status` (string, опционально) - статус: `OK`, `Warning`, `Critical`, `Unknown`
- `status_checked_at` (string RFC3339, опционально) - дата/время проверки статуса
**Генерация serial_number (если отсутствует):**
- Формат: `{board_serial}-PCIE-{slot}`
@@ -872,7 +909,7 @@ Content-Type: application/json
}
```
### Пример 2: Server с отказавшим диском
### Пример 2: Server с историей "сломан -> починен"
```json
{
@@ -893,7 +930,24 @@ Content-Type: application/json
"firmware": "9CV10510",
"interface": "NVMe",
"present": true,
"status": "Critical"
"status": "OK",
"status_changed_at": "2026-02-10T15:22:00Z",
"status_at_collection": {
"status": "OK",
"at": "2026-02-10T15:30:00Z"
},
"status_history": [
{
"status": "Critical",
"changed_at": "2026-02-10T15:10:00Z",
"details": "I/O timeout on NVMe queue 3"
},
{
"status": "OK",
"changed_at": "2026-02-10T15:22:00Z",
"details": "Recovered after controller reset"
}
]
},
{
"slot": "Disk.Bay.1",
@@ -911,9 +965,9 @@ Content-Type: application/json
```
**Обработка:**
- Disk.Bay.0 получит статус Critical
- Автоматически создастся failure_event для компонента S5GUNG0N123456
- Timeline event COMPONENT_FAILED
- Disk.Bay.0 получит текущий статус `OK`
- История статусов сохранится в `observations.details.status_history`
- Автоматический `failure_event` не создается, так как текущий статус snapshot не `Critical`
### Пример 3: Замена памяти