1
0
mirror of https://github.com/divan/expvarmon.git synced 2025-04-29 13:49:19 +08:00
expvarmon/main.go

73 lines
1.4 KiB
Go
Raw Normal View History

2015-04-21 12:51:01 +03:00
package main
import (
"flag"
"log"
"time"
2015-04-25 22:46:16 +03:00
"github.com/divan/termui"
2015-04-21 12:51:01 +03:00
)
var (
2015-04-30 23:54:54 +03:00
interval = flag.Duration("i", 1*time.Second, "Polling interval")
portsArg = flag.String("ports", "40001,40002,40000,40004,1233,1234,1235", "Ports for accessing services expvars")
extraVars = flag.String("extravars", "Goroutines,Counters.A", "Extra vars exported with expvars package")
dummy = flag.Bool("dummy", false, "Use dummy (console) output")
2015-04-21 12:51:01 +03:00
)
func main() {
flag.Parse()
ports, err := ParsePorts(*portsArg)
if err != nil {
log.Fatal("cannot parse ports:", err)
}
2015-04-21 16:33:04 +03:00
data := *NewData()
2015-04-25 15:54:17 +03:00
var source = NewExpvarsSource(ports)
2015-04-21 12:51:01 +03:00
for _, port := range ports {
service := NewService(port)
data.Services = append(data.Services, service)
}
2015-04-25 22:46:16 +03:00
data.Total = len(data.Services)
2015-04-21 12:51:01 +03:00
var ui UI = &TermUI{}
if *dummy {
ui = &DummyUI{}
}
2015-04-25 22:46:16 +03:00
ui.Init(data)
2015-04-21 12:51:01 +03:00
defer ui.Close()
tick := time.NewTicker(*interval)
evtCh := termui.EventCh()
update := func() {
2015-04-25 15:54:17 +03:00
for _, port := range source.Ports {
service := data.FindService(port)
if service == nil {
continue
2015-04-21 12:51:01 +03:00
}
2015-04-25 15:54:17 +03:00
service.Update()
2015-04-21 12:51:01 +03:00
}
2015-04-25 15:54:17 +03:00
2015-04-21 12:51:01 +03:00
data.LastTimestamp = time.Now()
2015-04-25 15:54:17 +03:00
2015-04-21 12:51:01 +03:00
ui.Update(data)
}
update()
for {
select {
case <-tick.C:
update()
case e := <-evtCh:
if e.Type == termui.EventKey && e.Ch == 'q' {
return
}
2015-04-25 22:46:16 +03:00
if e.Type == termui.EventResize {
termui.Body.Width = termui.TermWidth()
termui.Body.Align()
}
2015-04-21 12:51:01 +03:00
}
}
}