mirror of
https://codeberg.org/scip/esctl.git
synced 2026-08-24 13:24:19 +02:00
Compare commits
8 Commits
97a509da9e
...
feature/en
| Author | SHA1 | Date | |
|---|---|---|---|
| 83307ac677 | |||
| 56e4b34ab9 | |||
| 1f96fb9ab3 | |||
| c554b2a6cb | |||
| 068711589b | |||
| ffe79a2277 | |||
| 56c636fa2a | |||
| b20f3b39a3 |
@@ -26,7 +26,6 @@ import (
|
|||||||
|
|
||||||
"codeberg.org/scip/esctl/pkg/cfg"
|
"codeberg.org/scip/esctl/pkg/cfg"
|
||||||
"codeberg.org/scip/esctl/pkg/printer"
|
"codeberg.org/scip/esctl/pkg/printer"
|
||||||
"github.com/dustin/go-humanize"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func NodeList(conf *cfg.Config) error {
|
func NodeList(conf *cfg.Config) error {
|
||||||
@@ -126,6 +125,9 @@ func NodeShow(conf *cfg.Config, nodename string) error {
|
|||||||
{"OS", info.Os.PrettyName + " " + info.Os.Version},
|
{"OS", info.Os.PrettyName + " " + info.Os.Version},
|
||||||
{"Node roles", roles},
|
{"Node roles", roles},
|
||||||
{"Node version", info.Version},
|
{"Node version", info.Version},
|
||||||
|
// FIXME: not implemented upstream
|
||||||
|
// see: https://github.com/elastic/go-elasticsearch/issues/1526
|
||||||
|
// {"Allocated shards", stat.Allocations.XXX},
|
||||||
{"HTTP clients", *stat.Http.CurrentOpen},
|
{"HTTP clients", *stat.Http.CurrentOpen},
|
||||||
{"CPUs", *info.Os.AllocatedProcessors},
|
{"CPUs", *info.Os.AllocatedProcessors},
|
||||||
{"Load 15m/5m/1m", fmt.Sprintf("%.2f/%.2f/%.2f",
|
{"Load 15m/5m/1m", fmt.Sprintf("%.2f/%.2f/%.2f",
|
||||||
@@ -134,18 +136,41 @@ func NodeShow(conf *cfg.Config, nodename string) error {
|
|||||||
stat.Os.Cpu.LoadAverage["1m"],
|
stat.Os.Cpu.LoadAverage["1m"],
|
||||||
)},
|
)},
|
||||||
{"Open FD's", *stat.Process.OpenFileDescriptors},
|
{"Open FD's", *stat.Process.OpenFileDescriptors},
|
||||||
{"Response time avg", fmt.Sprintf("%dns", *stat.AdaptiveSelection[id].AvgResponseTimeNs)},
|
{"HTTP sesssions current/total", fmt.Sprintf("%d/%d",
|
||||||
|
*stat.Http.CurrentOpen,
|
||||||
|
*stat.Http.TotalOpened,
|
||||||
|
)},
|
||||||
|
{"Traffic rx/tx",
|
||||||
|
printer.ByteString(*stat.Transport.RxSizeInBytes) + " / " + printer.ByteString(*stat.Transport.TxSizeInBytes)},
|
||||||
|
{"Response time avg", time.Duration(*stat.AdaptiveSelection[id].AvgResponseTimeNs)},
|
||||||
{"Memory usage (used/avail)",
|
{"Memory usage (used/avail)",
|
||||||
humanize.Bytes(uint64(*stat.Os.Mem.UsedInBytes)) + " / " + humanize.Bytes(uint64(*stat.Os.Mem.TotalInBytes))},
|
printer.ByteString(*stat.Os.Mem.UsedInBytes) + " / " + printer.ByteString(*stat.Os.Mem.TotalInBytes)},
|
||||||
|
{"Search queries current/total", fmt.Sprintf("%d/%d",
|
||||||
|
stat.Indices.Search.QueryCurrent,
|
||||||
|
stat.Indices.Search.QueryTotal,
|
||||||
|
)},
|
||||||
|
{"Search efficiency", stat.Indices.Search.QueryTimeInMillis / stat.Indices.Search.QueryTotal},
|
||||||
|
{"Docs count", stat.Indices.Docs.Count},
|
||||||
|
{"Merges current/total", fmt.Sprintf("%d/%d",
|
||||||
|
stat.Indices.Merges.Current,
|
||||||
|
stat.Indices.Merges.Total,
|
||||||
|
)},
|
||||||
|
{"Merge docs count current/total", fmt.Sprintf("%d/%d",
|
||||||
|
stat.Indices.Merges.CurrentDocs,
|
||||||
|
stat.Indices.Merges.TotalDocs,
|
||||||
|
)},
|
||||||
|
{"Merge size current/total", fmt.Sprintf("%s/%s",
|
||||||
|
printer.ByteString(stat.Indices.Merges.CurrentSizeInBytes),
|
||||||
|
printer.ByteString(stat.Indices.Merges.TotalSizeInBytes),
|
||||||
|
)},
|
||||||
|
{"CircuitBreaker trip count", *stat.Breakers["fielddata"].Tripped},
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(stat.Fs.Data) > 0 {
|
if len(stat.Fs.Data) > 0 {
|
||||||
fs := stat.Fs.Data[0]
|
fs := stat.Fs.Data[0]
|
||||||
table.Entries = append(table.Entries, [][]any{
|
table.AddRow("Storage usage (used/avail)",
|
||||||
{"Storage usage (used/avail)",
|
printer.ByteString(*fs.AvailableInBytes)+" / "+printer.ByteString(*fs.TotalInBytes))
|
||||||
humanize.Bytes(uint64(*fs.AvailableInBytes)) + " / " + humanize.Bytes(uint64(*fs.TotalInBytes))},
|
table.AddRow("Storage mount", *fs.Mount)
|
||||||
{"Storage mount", *fs.Mount},
|
|
||||||
}...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := table.Print(); err != nil {
|
if err := table.Print(); err != nil {
|
||||||
|
|||||||
@@ -22,10 +22,16 @@ type ByteSize struct {
|
|||||||
size uint64
|
size uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func Bytes(size int64) ByteSize {
|
|
||||||
return ByteSize{size: uint64(size)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (b *ByteSize) String() string {
|
func (b *ByteSize) String() string {
|
||||||
return humanize.Bytes(b.size)
|
return humanize.Bytes(b.size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Bytes(size int64) *ByteSize {
|
||||||
|
return &ByteSize{size: uint64(size)}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ByteString(size int64) string {
|
||||||
|
b := ByteSize{size: uint64(size)}
|
||||||
|
|
||||||
|
return b.String()
|
||||||
|
}
|
||||||
|
|||||||
@@ -38,12 +38,16 @@ func any2string(in any) string {
|
|||||||
return strconv.Itoa(val)
|
return strconv.Itoa(val)
|
||||||
case float64:
|
case float64:
|
||||||
return fmt.Sprintf("%.2f", val)
|
return fmt.Sprintf("%.2f", val)
|
||||||
|
case float32:
|
||||||
|
return fmt.Sprintf("%.2f", val)
|
||||||
case []string:
|
case []string:
|
||||||
return strings.Join(val, ",")
|
return strings.Join(val, ",")
|
||||||
case ByteSize:
|
case ByteSize:
|
||||||
return val.String()
|
return val.String()
|
||||||
case time.Time:
|
case time.Time:
|
||||||
return val.Format("2006-01-02 15:04:05")
|
return val.Format("2006-01-02 15:04:05")
|
||||||
|
case time.Duration:
|
||||||
|
return val.String()
|
||||||
case []byte:
|
case []byte:
|
||||||
return string(val)
|
return string(val)
|
||||||
case nil:
|
case nil:
|
||||||
|
|||||||
Reference in New Issue
Block a user