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 - вся информация по нодам
// Примечание: 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)
// Создаем блок summary с информацией о кластере
summary := map[string]any{}
// Копируем основную информацию о кластере
for k, v := range result {
if k != "collector_name" && k != "nodes" {
summary[k] = v
if err != nil {
return nil, err
}
// Создаем блок 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