From 71a20610fa39590ab639cf3d1260e2eb1a87439a Mon Sep 17 00:00:00 2001 From: Sergey Antropoff Date: Thu, 11 Sep 2025 16:57:51 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BF=D1=80=D0=B8=D0=B2=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BB=D0=BB=D0=B5=D0=BA=D1=82=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=20proxcluster=20=D0=BA=20=D1=82=D0=BE=D1=87=D0=BD=D0=BE=D0=B9?= =?UTF-8?q?=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Упрощена функция collectProxCluster для точного соответствия требуемой структуре - Убраны лишние поля из summary, оставлены только: cluster_id, cluster_uuid, name, version, cluster_resources, quorum, corosync - Улучшена обработка ошибок - Структура вывода теперь точно соответствует спецификации Автор: Сергей Антропов, сайт: https://devops.org.ru --- .../proxcluster/proxcluster_linux.go | 48 ++++++++----------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/src/collectors/proxcluster/proxcluster_linux.go b/src/collectors/proxcluster/proxcluster_linux.go index d0bd05d..c3eafdd 100644 --- a/src/collectors/proxcluster/proxcluster_linux.go +++ b/src/collectors/proxcluster/proxcluster_linux.go @@ -26,39 +26,34 @@ import ( // 2. nodes - вся информация по нодам // Примечание: services, storages, logs, gpu, disks, network, vms вынесены в отдельные коллекторы func collectProxCluster(ctx context.Context) (map[string]any, error) { - result := map[string]any{ - "collector_name": "proxcluster", - } - // Основная информация о кластере из corosync.conf clusterInfo, err := collectClusterInfo(ctx) - if err == nil { - for k, v := range clusterInfo { - result[k] = v - } + if err != nil { + return nil, err } // Получаем данные для агрегированных ресурсов clusterUUID := "" clusterName := "" - if uuid, ok := result["cluster_uuid"].(string); ok { + if uuid, ok := clusterInfo["cluster_uuid"].(string); ok { clusterUUID = uuid } - if name, ok := result["name"].(string); ok { + if name, ok := clusterInfo["name"].(string); ok { clusterName = name } - // Собираем информацию о нодах для агрегации + // Собираем информацию о нодах nodesInfo, err := collectDetailedNodesInfo(ctx, clusterName, clusterUUID) + if err != nil { + return nil, err + } - // Создаем блок summary с информацией о кластере - 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 } - // Формируем финальный результат - result["summary"] = summary - - // Подробная информация о нодах - if nodesInfo != nil { - result["nodes"] = nodesInfo - } - - if len(result) == 0 { - return nil, errors.New("no cluster data found") + // Формируем финальный результат с точной структурой + result := map[string]any{ + "collector_name": "proxcluster", + "summary": summary, + "nodes": nodesInfo, } return result, nil