tendermint/tm-monitor/main.go

88 lines
1.6 KiB
Go
Raw Normal View History

2017-02-24 06:54:36 -08:00
package main
import (
"flag"
"fmt"
"os"
"strings"
cmn "github.com/tendermint/go-common"
logger "github.com/tendermint/go-logger"
)
var log = logger.New()
func main() {
var listenAddr string
var verbose bool
flag.StringVar(&listenAddr, "-listen-addr", "tcp://0.0.0.0:46670", "HTTP and Websocket server listen address")
flag.BoolVar(&verbose, "v", false, "verbose logging")
flag.Usage = func() {
fmt.Println(`Tendermint monitor watches over one or more Tendermint core
applications, collecting and providing various statistics to the user.
Usage:
tm-monitor [-v] [--listen-addr="tcp://0.0.0.0:46670"] [endpoints]
Examples:
# monitor single instance
tm-monitor localhost:46657
# monitor a few instances by providing comma-separated list of RPC endpoints
tm-monitor host1:46657,host2:46657`)
fmt.Println("Flags:")
flag.PrintDefaults()
}
flag.Parse()
if flag.NArg() == 0 {
flag.Usage()
os.Exit(1)
}
if verbose {
log.SetHandler(logger.LvlFilterHandler(
logger.LvlDebug,
logger.BypassHandler(),
))
} else {
log.SetHandler(logger.LvlFilterHandler(
logger.LvlInfo,
logger.BypassHandler(),
))
}
m := startMonitor(flag.Arg(0))
startRPC(listenAddr, m)
ton := NewTon(m)
ton.Start()
cmn.TrapSignal(func() {
ton.Stop()
m.Stop()
})
}
func startMonitor(endpoints string) *Monitor {
m := NewMonitor()
for _, e := range strings.Split(endpoints, ",") {
if err := m.Monitor(NewNode(e)); err != nil {
log.Crit(err.Error())
os.Exit(1)
}
}
if err := m.Start(); err != nil {
log.Crit(err.Error())
os.Exit(1)
}
return m
}