add node usage

This commit is contained in:
2026-07-10 13:29:46 +02:00
parent 5644046c78
commit 6134fcfd22
3 changed files with 93 additions and 5 deletions

View File

@@ -37,11 +37,11 @@ func NodeList(conf *cfg.Config) error {
slog.Debug("ES result", "nodes", nodes)
table := printer.NewTable(conf, 7, len(nodes))
table.Addheaders("name", "ip", "load1m", "load5m", "load15m", "ram %", "heap %")
table := printer.NewTableEmpty(conf).WithHeaders(
"name", "ip", "load1m", "load5m", "load15m", "ram %", "heap %")
for idx, node := range nodes {
table.Entries[idx] = []any{
for _, node := range nodes {
table.AddRow(
*node.Name,
*node.Ip,
*node.Load1M,
@@ -49,7 +49,7 @@ func NodeList(conf *cfg.Config) error {
*node.Load15M,
node.RamPercent,
node.HeapPercent,
}
)
}
table.Sort()
@@ -235,3 +235,72 @@ func NodeClients(conf *cfg.Config, nodename string) error {
return table.Print()
}
func NodeUsage(conf *cfg.Config, nodeid string) error {
usage := conf.DefaultCluster.ES().Nodes.Usage()
if nodeid != "" {
usage.NodeId(nodeid)
}
stats, err := usage.Do(context.Background())
if err != nil {
return fmt.Errorf("failed to get node usage: %w", esErrorString(err))
}
slog.Debug("ES result", "usage", stats)
table := printer.NewTableEmpty(conf).WithHeaders(
"node",
"bulk",
"doc get",
"doc mget",
"doc update",
"index doc",
"index stats",
"search",
"msearch",
"open pit",
)
for id, actions := range stats.Nodes {
node, err := getNodeName(conf, id)
if err != nil {
return err
}
stat := actions.RestActions
table.AddRow(
node,
stat["bulk_action"],
stat["document_get_action"],
stat["document_mget_action"],
stat["document_update_action"],
stat["document_index_action"],
stat["indices_stats_action"],
stat["search_action"],
stat["msearch_action"],
stat["open_point_in_time"],
)
}
return table.Print()
}
func getNodeName(conf *cfg.Config, id string) (string, error) {
res, err := conf.DefaultCluster.ES().Nodes.Info().
Metric("os").
Do(context.Background())
if err != nil {
return "", fmt.Errorf("failed to get node info: %w", esErrorString(err))
}
for nodeid, node := range res.Nodes {
if id == nodeid {
return node.Name, nil
}
}
return "", nil
}