2019-01-28 23:09:52 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
ui "github.com/sqshq/termui"
|
|
|
|
"github.com/sqshq/vcmd/config"
|
|
|
|
"github.com/sqshq/vcmd/widgets"
|
|
|
|
"log"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
|
|
cfg := config.Load("/Users/sqshq/Go/src/github.com/sqshq/vcmd/config.yml")
|
|
|
|
|
|
|
|
for _, linechart := range cfg.LineCharts {
|
|
|
|
for _, data := range linechart.Data {
|
|
|
|
value, _ := data.NextValue()
|
|
|
|
log.Printf("%s: %s - %v", linechart.Title, data.Label, value)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
p1 := widgets.NewTimePlot()
|
|
|
|
p1.Title = " CURL LATENCY STATISTICS (sec) "
|
|
|
|
p1.LineColors[0] = ui.ColorYellow
|
|
|
|
p1.Marker = widgets.MarkerBraille
|
|
|
|
|
2019-01-30 00:21:57 +00:00
|
|
|
p2 := widgets.NewTimePlot()
|
|
|
|
p2.Title = " CURL LATENCY STATISTICS 2 (sec) "
|
|
|
|
p2.LineColors[0] = ui.ColorYellow
|
|
|
|
p2.Marker = widgets.MarkerBraille
|
|
|
|
|
2019-01-28 23:09:52 +00:00
|
|
|
if err := ui.Init(); err != nil {
|
|
|
|
//log.Fatalf("failed to initialize termui: %v", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
defer ui.Close()
|
|
|
|
uiEvents := ui.PollEvents()
|
|
|
|
|
2019-01-30 00:21:57 +00:00
|
|
|
layout := widgets.NewLayout(ui.TerminalDimensions())
|
|
|
|
layout.AddItem(p1, 0, 0, 6, 6)
|
|
|
|
layout.AddItem(p2, 0, 6, 6, 12)
|
|
|
|
|
2019-01-28 23:09:52 +00:00
|
|
|
dataTicker := time.NewTicker(200 * time.Millisecond)
|
|
|
|
uiTicker := time.NewTicker(50 * time.Millisecond)
|
|
|
|
|
|
|
|
pause := false
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
for {
|
|
|
|
select {
|
|
|
|
case <-dataTicker.C:
|
|
|
|
if !pause {
|
|
|
|
value, err := cfg.LineCharts[0].Data[0].NextValue()
|
|
|
|
if err != nil {
|
|
|
|
log.Printf("failed to get value: %s", err)
|
|
|
|
break
|
|
|
|
}
|
|
|
|
p1.AddValue(value)
|
2019-01-30 00:21:57 +00:00
|
|
|
p2.AddValue(value)
|
2019-01-28 23:09:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
|
|
|
for {
|
|
|
|
select {
|
|
|
|
case e := <-uiEvents:
|
|
|
|
switch e.ID {
|
|
|
|
case "q", "<C-c>": // press 'q' or 'C-c' to quit
|
|
|
|
return
|
2019-01-30 00:21:57 +00:00
|
|
|
case "<Resize>":
|
|
|
|
payload := e.Payload.(ui.Resize)
|
|
|
|
layout.ChangeDimensions(payload.Width, payload.Height)
|
2019-01-28 23:09:52 +00:00
|
|
|
}
|
|
|
|
//case "<MouseLeft>":
|
|
|
|
// payload := e.Payload.(ui.Mouse)
|
|
|
|
// x, y := payload.X, payload.Y
|
|
|
|
// log.Printf("x: %v, y: %v", x, y)
|
|
|
|
//}
|
|
|
|
switch e.Type {
|
|
|
|
case ui.KeyboardEvent: // handle all key presses
|
|
|
|
//log.Printf("key: %v", e.ID)
|
|
|
|
switch e.ID {
|
|
|
|
case "<Left>":
|
2019-01-30 00:21:57 +00:00
|
|
|
layout.MoveItem(-1, 0)
|
2019-01-28 23:09:52 +00:00
|
|
|
case "<Right>":
|
2019-01-30 00:21:57 +00:00
|
|
|
layout.MoveItem(1, 0)
|
2019-01-28 23:09:52 +00:00
|
|
|
case "<Down>":
|
2019-01-30 00:21:57 +00:00
|
|
|
layout.MoveItem(0, 1)
|
2019-01-28 23:09:52 +00:00
|
|
|
case "<Up>":
|
2019-01-30 00:21:57 +00:00
|
|
|
layout.MoveItem(0, -1)
|
2019-01-28 23:09:52 +00:00
|
|
|
case "p":
|
|
|
|
pause = !pause
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case <-uiTicker.C:
|
|
|
|
if !pause {
|
2019-01-30 00:21:57 +00:00
|
|
|
ui.Render(layout)
|
2019-01-28 23:09:52 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|