feat: приведение вывода коллектора proxcluster к точной структуре
- Упрощена функция collectProxCluster для точного соответствия требуемой структуре - Убраны лишние поля из summary, оставлены только: cluster_id, cluster_uuid, name, version, cluster_resources, quorum, corosync - Улучшена обработка ошибок - Структура вывода теперь точно соответствует спецификации Автор: Сергей Антропов, сайт: https://devops.org.ru
This commit is contained in:
parent
ef598dbaf4
commit
71a20610fa
@ -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 {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// Создаем блок summary с информацией о кластере
|
// Создаем блок summary с точной структурой
|
||||||
summary := map[string]any{}
|
summary := map[string]any{
|
||||||
|
"cluster_id": clusterInfo["cluster_id"],
|
||||||
// Копируем основную информацию о кластере
|
"cluster_uuid": clusterInfo["cluster_uuid"],
|
||||||
for k, v := range result {
|
"name": clusterInfo["name"],
|
||||||
if k != "collector_name" && k != "nodes" {
|
"version": clusterInfo["version"],
|
||||||
summary[k] = v
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Агрегированная информация о ресурсах кластера
|
// Агрегированная информация о ресурсах кластера
|
||||||
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user