Sorting nodes by name now, dynamic padding for indexes based on if hidden indexes are toggled, fixed width for the node roles panel

This commit is contained in:
Dionysus 2024-11-29 13:24:14 -05:00
parent 7d2187ae85
commit 29ea00fb73
Signed by: acidvegas
GPG Key ID: EF4B922DB85DC9DE
2 changed files with 72 additions and 50 deletions

BIN
elastop

Binary file not shown.

View File

@ -456,28 +456,15 @@ func updateGridLayout(grid *tview.Grid, showRoles, showIndices, showMetrics bool
// Start with clean grid
grid.Clear()
visiblePanels := make([]struct {
panel *tview.TextView
show bool
}, 0)
visiblePanels := 0
if showRoles {
visiblePanels = append(visiblePanels, struct {
panel *tview.TextView
show bool
}{rolesPanel, true})
visiblePanels++
}
if showIndices {
visiblePanels = append(visiblePanels, struct {
panel *tview.TextView
show bool
}{indicesPanel, true})
visiblePanels++
}
if showMetrics {
visiblePanels = append(visiblePanels, struct {
panel *tview.TextView
show bool
}{metricsPanel, true})
visiblePanels++
}
// Adjust row configuration based on whether nodes panel is shown
@ -487,32 +474,54 @@ func updateGridLayout(grid *tview.Grid, showRoles, showIndices, showMetrics bool
grid.SetRows(3, 0) // Just header and bottom panels
}
// Set up columns based on number of visible panels
switch len(visiblePanels) {
case 3:
grid.SetColumns(-1, -2, -1) // 1:2:1 ratio
case 2:
grid.SetColumns(-1, -1) // Two equal columns
case 1:
grid.SetColumns(-1) // Single column
// Configure columns based on visible panels
switch {
case visiblePanels == 3:
if showRoles {
grid.SetColumns(30, -2, -1) // Changed from 20 to 30 for roles panel width
}
case visiblePanels == 2:
if showRoles {
grid.SetColumns(30, 0) // Changed from 20 to 30 for roles panel width
} else {
grid.SetColumns(-1, -1) // Equal split between two panels
}
case visiblePanels == 1:
grid.SetColumns(0) // Single column takes full width
}
// Always show header at top spanning all columns
grid.AddItem(header, 0, 0, 1, len(visiblePanels), 0, 0, false)
grid.AddItem(header, 0, 0, 1, visiblePanels, 0, 0, false)
// Add nodes panel if visible, spanning all columns
if showNodes {
grid.AddItem(nodesPanel, 1, 0, 1, len(visiblePanels), 0, 0, false)
grid.AddItem(nodesPanel, 1, 0, 1, visiblePanels, 0, 0, false)
}
// Add bottom panels
for i, panel := range visiblePanels {
grid.AddItem(panel.panel, 2, i, 1, 1, 0, 0, false)
// Add bottom panels in their respective positions
col := 0
if showRoles {
row := 1
if showNodes {
row = 2
}
} else {
// Add bottom panels starting from row 1
for i, panel := range visiblePanels {
grid.AddItem(panel.panel, 1, i, 1, 1, 0, 0, false)
grid.AddItem(rolesPanel, row, col, 1, 1, 0, 0, false)
col++
}
if showIndices {
row := 1
if showNodes {
row = 2
}
grid.AddItem(indicesPanel, row, col, 1, 1, 0, 0, false)
col++
}
if showMetrics {
row := 1
if showNodes {
row = 2
}
grid.AddItem(metricsPanel, row, col, 1, 1, 0, 0, false)
}
}
@ -545,7 +554,7 @@ func main() {
app := tview.NewApplication()
// Update the grid layout to use three columns for the bottom section
// Update the grid layout to use proportional columns
grid := tview.NewGrid().
SetRows(3, 0, 0). // Three rows: header, nodes, bottom panels
SetColumns(-1, -2, -1). // Three columns for bottom row: roles (1), indices (2), metrics (1)
@ -708,8 +717,18 @@ func main() {
fmt.Fprintf(nodesPanel, "[::b][#00ffff][[#ff5555]2[#00ffff]] Nodes Information[::-]\n\n")
fmt.Fprint(nodesPanel, getNodesPanelHeader(maxNodeNameLen))
// Create a sorted slice of node IDs based on node names
var nodeIDs []string
for id := range nodesInfo.Nodes {
nodeIDs = append(nodeIDs, id)
}
sort.Slice(nodeIDs, func(i, j int) bool {
return nodesInfo.Nodes[nodeIDs[i]].Name < nodesInfo.Nodes[nodeIDs[j]].Name
})
// Update node entries with dynamic width
for id, nodeInfo := range nodesInfo.Nodes {
for _, id := range nodeIDs {
nodeInfo := nodesInfo.Nodes[id]
nodeStats, exists := nodesStats.Nodes[id]
if !exists {
continue
@ -850,7 +869,6 @@ func main() {
// Update index entries with dynamic width
for _, idx := range indices {
// Only show purple dot if there's actual indexing happening
writeIcon := "[#444444]⚪"
if idx.indexingRate > 0 {
writeIcon = "[#5555ff]⚫"
@ -861,9 +879,11 @@ func main() {
ingestedStr := ""
if activity != nil && activity.InitialDocsCount < idx.docs {
docChange := idx.docs - activity.InitialDocsCount
ingestedStr = fmt.Sprintf("[green]+%-11s", formatNumber(docChange))
// Pad the ingested string to 12 characters
ingestedStr = fmt.Sprintf("[green]%-12s", fmt.Sprintf("+%s", formatNumber(docChange)))
} else {
ingestedStr = fmt.Sprintf("%-12s", "") // Empty space if no changes
// When there's no ingestion, still pad with 12 spaces
ingestedStr = fmt.Sprintf("%-12s", "")
}
// Format indexing rate
@ -881,7 +901,7 @@ func main() {
// Convert the size format before display
sizeStr := convertSizeFormat(idx.storeSize)
fmt.Fprintf(indicesPanel, "%s [%s]%-*s [white][#444444]│[white] %15s [#444444]│[white] %12s [#444444]│[white] %8s [#444444]│[white] %8s [#444444]│[white] %s [#444444]│[white] %-10s\n",
fmt.Fprintf(indicesPanel, "%s [%s]%-*s[white] [#444444]│[white] %15s [#444444]│[white] %12s [#444444]│[white] %8s [#444444]│[white] %8s [#444444]│[white] %s [#444444]│[white] %-8s\n",
writeIcon,
getHealthColor(idx.health),
maxIndexNameLen,
@ -890,7 +910,7 @@ func main() {
sizeStr,
idx.priShards,
idx.replicas,
ingestedStr,
ingestedStr, // Now properly padded
rateStr)
}
@ -1072,7 +1092,7 @@ func main() {
updateGridLayout(grid, showRoles, showIndices, showMetrics)
case 'h':
showHiddenIndices = !showHiddenIndices
// Don't call update() directly, just let the periodic update handle it
// Let the regular update cycle handle it
}
}
return event
@ -1126,17 +1146,19 @@ func getMaxLengths(nodesInfo NodesInfo, indicesStats IndexStats) (int, int) {
}
}
// Get max index name length
// Get max index name length only for visible indices
for _, index := range indicesStats {
// Consider hidden indices in max length calculation if they're shown
if (showHiddenIndices || !strings.HasPrefix(index.Index, ".")) &&
len(index.Index) > maxIndexNameLen {
maxIndexNameLen = len(index.Index)
// Only consider indices that should be visible based on showHiddenIndices
if (showHiddenIndices || !strings.HasPrefix(index.Index, ".")) && index.DocsCount != "0" {
if len(index.Index) > maxIndexNameLen {
maxIndexNameLen = len(index.Index)
}
}
}
maxNodeNameLen += 2 // Add padding
maxIndexNameLen += 2 // Add padding
// Add padding
maxNodeNameLen += 2
maxIndexNameLen += 1 // Single space before separator
return maxNodeNameLen, maxIndexNameLen
}
@ -1157,7 +1179,7 @@ func getNodesPanelHeader(maxNodeNameLen int) string {
}
func getIndicesPanelHeader(maxIndexNameLen int) string {
return fmt.Sprintf(" [::b]%-*s [#444444]│[#00ffff] %15s [#444444]│[#00ffff] %12s [#444444]│[#00ffff] %8s [#444444]│[#00ffff] %8s [#444444]│[#00ffff] %-12s [#444444]│[#00ffff] %-10s[white]\n",
return fmt.Sprintf(" [::b]%-*s [#444444]│[#00ffff] %15s [#444444]│[#00ffff] %12s [#444444]│[#00ffff] %8s [#444444]│[#00ffff] %8s [#444444]│[#00ffff] %-12s [#444444]│[#00ffff] %-8s[white]\n",
maxIndexNameLen,
"Index Name",
"Documents",