Small CLI monitoring tool to decode proprietary [...] protocol and display info in human readable representation
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ycli-mon/ui/ui.go

86 lines
1.7 KiB

package ui
import (
"cli-mon/yabl"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
"os"
)
const (
connectors_page = "Connectors"
)
type page struct {
left string
right string
primitive tview.Primitive
}
func InitCliApp(events <-chan *yabl.Event) {
var app = tview.NewApplication()
pages := tview.NewPages()
var active page
var layout map[string]page
connectors := newConnectorsGrid()
page2 := tview.NewBox().SetBorder(true).SetTitle("Bbbbbb")
layout = map[string]page{
connectors_page: {
left: "Page2",
right: "Page2",
primitive: connectors,
},
"Page2": {
left: connectors_page,
right: connectors_page,
primitive: page2,
},
}
for k, p := range layout {
pages.AddPage(k, p.primitive, true, true)
}
active = layout["Page1"]
pages.SwitchToPage("Page1")
app.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
switch event.Key() {
case tcell.KeyRight:
pages.SwitchToPage(active.right)
active = layout[active.right]
return nil
case tcell.KeyLeft:
pages.SwitchToPage(active.left)
active = layout[active.left]
return nil
case tcell.KeyCtrlC:
app.Stop()
}
return event
})
go func() {
if err := app.SetRoot(pages, true).EnableMouse(true).Run(); err != nil {
panic(err)
}
os.Exit(0)
}()
for event := range events {
switch obj := event.Object.(type) {
case *yabl.PuPresentEnergy:
connectors.updatePU(event.UnitId, event.Field, event.Value)
case *yabl.PuPeriphery:
connectors.updatePU(event.UnitId, event.Field, event.Value)
case *yabl.PuDebug:
connectors.updatePU(event.UnitId, event.Field, event.Value)
case *yabl.PuErrors:
connectors.updatePuErrors(obj)
}
app.Draw()
}
}