Update Inspur parsing and align release docs
This commit is contained in:
@@ -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: Замена памяти
|
||||
|
||||
|
||||
Reference in New Issue
Block a user