diff --git a/TODO.md b/TODO.md index eb684e1..f3d13ff 100644 --- a/TODO.md +++ b/TODO.md @@ -3,3 +3,5 @@ - Fix index names custom completion - add cluster default which would add a flag to the config, so that no -C is needed subsequently +- add `cluster stats` from `/_cluster/stats` like mem, procs, open files, num indices, shards etc +- add version[s] to `cluster status` diff --git a/pkg/cfg/config.go b/pkg/cfg/config.go index f3521a7..e666b66 100644 --- a/pkg/cfg/config.go +++ b/pkg/cfg/config.go @@ -17,6 +17,7 @@ along with this program. If not, see . package cfg import ( + "context" "crypto/tls" "errors" "fmt" @@ -76,6 +77,8 @@ func (conf *Config) Init() error { } } + conf.SetupES() + if conf.CurrentCluster != "" { current, exists := conf.Clusters[conf.CurrentCluster] if !exists { @@ -83,14 +86,29 @@ func (conf *Config) Init() error { } else { conf.DefaultCluster = current } + } else { + if len(conf.Clusters) == 1 { + for _, cluster := range conf.Clusters { + conf.DefaultCluster = cluster + } + } else { + for _, cluster := range conf.Clusters { + _, err := cluster.ES.Cluster.Health(). + Header("content-type", "application/json"). + Header("accept", "application/json"). + Do(context.Background()) + + if err == nil { + conf.DefaultCluster = cluster + } + } + } } if conf.Debug { repr.Println(conf) } - conf.SetupES() - return nil } diff --git a/pkg/es/cluster.go b/pkg/es/cluster.go index c8a4af7..ed43483 100644 --- a/pkg/es/cluster.go +++ b/pkg/es/cluster.go @@ -75,12 +75,24 @@ func ClusterCompare(conf *cfg.Config, leader, follower string) error { } func ClusterList(conf *cfg.Config) error { - table := NewTable(2, len(conf.Clusters)) - table.Addheaders("cluster", "uri") + table := NewTable(3, len(conf.Clusters)) + + table.Addheaders("cluster", "uri", "default") idx := 0 for name, cluster := range conf.Clusters { - table.entries[idx] = []string{name, cluster.Uri} + current := name == "default" || name == conf.CurrentCluster + + _, err := cluster.ES.Cluster.Health(). + Header("content-type", "application/json"). + Header("accept", "application/json"). + Do(context.Background()) + + if err == nil { + name = Colorize("green", name) + } + + table.entries[idx] = []string{name, cluster.Uri, fmt.Sprintf("%t", current)} idx++ }