in pkg/display/graph/linear/linear.go [134:185]
func Display(ctx context.Context, inputs map[string]map[string]*displayable.MetricValue) error {
t, err := termbox.New()
if err != nil {
return err
}
defer t.Close()
c, err := container.New(
t,
container.ID(RootID),
)
if err != nil {
return err
}
elements := make(map[string]*linechart.LineChart)
for title, input := range inputs {
w, e := NewLineChart(input)
if e != nil {
return e
}
elements[title] = w
}
gridOpts, err := layout(LineChartElements(elements))
if err != nil {
return err
}
err = c.Update(RootID, append(
gridOpts,
container.Border(linestyle.Light),
container.BorderTitle(fmt.Sprintf("[%s]-PRESS Q TO QUIT", ctx.Value("name").(string))),
container.BorderTitleAlignLeft())...,
)
if err != nil {
return err
}
var cancel context.CancelFunc
ctx, cancel = context.WithCancel(ctx)
quitter := func(keyboard *terminalapi.Keyboard) {
if strings.EqualFold(keyboard.Key.String(), "q") {
cancel()
}
}
err = termdash.Run(ctx, t, c, termdash.KeyboardSubscriber(quitter))
return err
}