feat: приведение вывода коллектора proxcluster к точной структуре

- Упрощена функция collectProxCluster для точного соответствия требуемой структуре
- Убраны лишние поля из summary, оставлены только: cluster_id, cluster_uuid, name, version, cluster_resources, quorum, corosync
- Улучшена обработка ошибок
- Структура вывода теперь точно соответствует спецификации

Автор: Сергей Антропов, сайт: https://devops.org.ru
This commit is contained in:
Sergey Antropoff 2025-09-11 16:57:51 +03:00
parent ef598dbaf4
commit 71a20610fa

View File

@ -26,39 +26,34 @@ import (
// 2. nodes - вся информация по нодам // 2. nodes - вся информация по нодам
// Примечание: services, storages, logs, gpu, disks, network, vms вынесены в отдельные коллекторы // Примечание: services, storages, logs, gpu, disks, network, vms вынесены в отдельные коллекторы
func collectProxCluster(ctx context.Context) (map[string]any, error) { func collectProxCluster(ctx context.Context) (map[string]any, error) {
result := map[string]any{
"collector_name": "proxcluster",
}
// Основная информация о кластере из corosync.conf // Основная информация о кластере из corosync.conf
clusterInfo, err := collectClusterInfo(ctx) clusterInfo, err := collectClusterInfo(ctx)
if err == nil { if err != nil {
for k, v := range clusterInfo { return nil, err
result[k] = v
}
} }
// Получаем данные для агрегированных ресурсов // Получаем данные для агрегированных ресурсов
clusterUUID := "" clusterUUID := ""
clusterName := "" clusterName := ""
if uuid, ok := result["cluster_uuid"].(string); ok { if uuid, ok := clusterInfo["cluster_uuid"].(string); ok {
clusterUUID = uuid clusterUUID = uuid
} }
if name, ok := result["name"].(string); ok { if name, ok := clusterInfo["name"].(string); ok {
clusterName = name clusterName = name
} }
// Собираем информацию о нодах для агрегации // Собираем информацию о нодах
nodesInfo, err := collectDetailedNodesInfo(ctx, clusterName, clusterUUID) nodesInfo, err := collectDetailedNodesInfo(ctx, clusterName, clusterUUID)
if err != nil {
// Создаем блок summary с информацией о кластере return nil, err
summary := map[string]any{}
// Копируем основную информацию о кластере
for k, v := range result {
if k != "collector_name" && k != "nodes" {
summary[k] = v
} }
// Создаем блок summary с точной структурой
summary := map[string]any{
"cluster_id": clusterInfo["cluster_id"],
"cluster_uuid": clusterInfo["cluster_uuid"],
"name": clusterInfo["name"],
"version": clusterInfo["version"],
} }
// Агрегированная информация о ресурсах кластера // Агрегированная информация о ресурсах кластера
@ -81,16 +76,11 @@ func collectProxCluster(ctx context.Context) (map[string]any, error) {
summary["corosync"] = corosyncInfo summary["corosync"] = corosyncInfo
} }
// Формируем финальный результат // Формируем финальный результат с точной структурой
result["summary"] = summary result := map[string]any{
"collector_name": "proxcluster",
// Подробная информация о нодах "summary": summary,
if nodesInfo != nil { "nodes": nodesInfo,
result["nodes"] = nodesInfo
}
if len(result) == 0 {
return nil, errors.New("no cluster data found")
} }
return result, nil return result, nil