in pkg/display/graph/gauge/gauge.go [142:180]
func MetricColumnsElement(columns []*MetricColumn) []grid.Element {
var metricColumns []grid.Element
var columnWidthPerc int
// For the best display effect, the maximum number of columns that can be displayed
const MaxColumnNum = 4
// For the best display effect, the maximum number of gauges
// that can be displayed in each column
const MaxGaugeNum = 6
const TitleHeight = 10
// Number of columns to display, each column represents a global metric
// The number should be less than or equal to MaxColumnNum
columnNum := int(math.Min(MaxColumnNum, float64(len(columns))))
// columnWidthPerc should be in the range (0, 100)
if columnNum > 1 {
columnWidthPerc = 100 / columnNum
} else {
columnWidthPerc = 99
}
for i := range columnNum {
var column []grid.Element
column = append(column, grid.RowHeightPerc(TitleHeight, grid.Widget(columns[i].title)))
// Number of gauge in a column, each gauge represents a service or endpoint
// The number should be less than or equal to MaxGaugeNum
gaugeNum := int(math.Min(MaxGaugeNum, float64(len(columns[i].gauges))))
gaugeHeight := int(math.Floor(float64(99-TitleHeight) / float64(gaugeNum)))
for j := range gaugeNum {
column = append(column, grid.RowHeightPerc(gaugeHeight, grid.Widget(columns[i].gauges[j])))
}
metricColumns = append(metricColumns, grid.ColWidthPerc(columnWidthPerc, column...))
}
return metricColumns
}