/* Copyright © 2026 Thomas von Dein This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package es import ( "context" "errors" "fmt" "sync" "github.com/elastic/go-elasticsearch/v9" "github.com/elastic/go-elasticsearch/v9/typedapi/cat/indices" "github.com/elastic/go-elasticsearch/v9/typedapi/cat/tasks" "github.com/elastic/go-elasticsearch/v9/typedapi/ccr/stats" "github.com/elastic/go-elasticsearch/v9/typedapi/cluster/health" clusterstats "github.com/elastic/go-elasticsearch/v9/typedapi/cluster/stats" "github.com/elastic/go-elasticsearch/v9/typedapi/core/info" "github.com/elastic/go-elasticsearch/v9/typedapi/ilm/explainlifecycle" "github.com/elastic/go-elasticsearch/v9/typedapi/ilm/getlifecycle" "github.com/elastic/go-elasticsearch/v9/typedapi/types/enums/bytes" ) const ( ResponseHealth = iota ResponseInfo ResponseCcr ResponseStats ResponseIndices ResponseTasks ResponseExplain ResponseLifecycle ) type apiResponse struct { error error info *info.Response health *health.Response ccr *stats.Response stats *clusterstats.Response indices *indices.Response indicesbytes *indices.Response tasks *tasks.Response lifecycle *getlifecycle.Response explainlifecycle *explainlifecycle.Response which int } func getApiData(es *elasticsearch.TypedClient, wg *sync.WaitGroup, reschan chan apiResponse, which string) { defer wg.Done() ar := apiResponse{} arerr := errors.New("") switch which { case "health": res, err := es.Cluster.Health(). Do(context.Background()) ar.health = res ar.which = ResponseHealth arerr = err case "info": res, err := es.Info(). Do(context.Background()) ar.info = res ar.which = ResponseInfo arerr = err case "ccrstats": res, err := es.Ccr.Stats(). Do(context.Background()) ar.ccr = res ar.which = ResponseCcr arerr = err case "stats": res, err := es.Cluster.Stats(). Do(context.Background()) ar.stats = res ar.which = ResponseStats arerr = err case "indices": res, err := es.Cat.Indices(). Do(context.Background()) ar.indices = &res ar.which = ResponseIndices arerr = err case "indicesbytes": res, err := es.Cat. Indices(). Bytes(bytes.Bytes{Name: "b"}). Do(context.Background()) ar.indices = &res ar.which = ResponseIndices arerr = err case "tasks": res, err := es.Cat.Tasks(). Do(context.Background()) ar.tasks = &res ar.which = ResponseTasks arerr = err case "explain": res, err := es.Ilm. ExplainLifecycle("_all"). Do(context.Background()) ar.explainlifecycle = res ar.which = ResponseExplain arerr = err case "policies": res, err := es.Ilm. GetLifecycle(). Do(context.Background()) ar.lifecycle = &res ar.which = ResponseLifecycle arerr = err } if arerr != nil { ar.error = fmt.Errorf("failed to get data from API: %s", arerr) } reschan <- ar }