in pkg/display/graph/gauge/gauge.go [82:138]
func NewMetricColumn(column []*api.SelectedRecord, config *dashboard.MetricTemplate) (*MetricColumn, error) {
var ret MetricColumn
t, err := text.New()
if err != nil {
return nil, err
}
if err := t.Write(config.Title, text.WriteCellOpts(cell.FgColor(cell.ColorRed))); err != nil {
return nil, err
}
ret.title = t
if len(column) == 0 {
return nil, fmt.Errorf("the metrics data is empty, please check the GraphQL backend")
}
for _, item := range column {
strValue := *(item.Value)
v, err := strconv.Atoi(strValue)
if err != nil {
return nil, err
}
if config.AggregationNum != "" {
aggregationNum, convErr := strconv.Atoi(config.AggregationNum)
if convErr != nil {
return nil, convErr
}
strValue = fmt.Sprintf("%.4f", float64(v)/float64(aggregationNum))
ret.aggregationNum = aggregationNum
}
g, err := gauge.New(
gauge.Height(1),
gauge.Border(linestyle.Light),
gauge.Color(cell.ColorMagenta),
gauge.BorderTitle("["+strValue+"]"),
gauge.HideTextProgress(),
gauge.TextLabel(item.Name),
)
if err != nil {
return nil, err
}
maxValue, err := findMaxValue(column)
if err != nil {
return nil, err
}
if err := g.Absolute(v, maxValue); err != nil {
return nil, err
}
ret.gauges = append(ret.gauges, g)
}
return &ret, nil
}