func NewMetricColumn()

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
}