github.com/evdatsion/aphelion-dpos-bft@v0.32.1/tools/tm-monitor/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 "strings" 8 9 cmn "github.com/evdatsion/aphelion-dpos-bft/libs/common" 10 "github.com/evdatsion/aphelion-dpos-bft/libs/log" 11 monitor "github.com/evdatsion/aphelion-dpos-bft/tools/tm-monitor/monitor" 12 ) 13 14 var logger = log.NewNopLogger() 15 16 func main() { 17 var listenAddr string 18 var noton bool 19 20 flag.StringVar(&listenAddr, "listen-addr", "tcp://0.0.0.0:26670", "HTTP and Websocket server listen address") 21 flag.BoolVar(¬on, "no-ton", false, "Do not show ton (table of nodes)") 22 23 flag.Usage = func() { 24 fmt.Println(`Tendermint monitor watches over one or more Tendermint core 25 applications, collecting and providing various statistics to the user. 26 27 Usage: 28 tm-monitor [-no-ton] [-listen-addr="tcp://0.0.0.0:26670"] [endpoints] 29 30 Examples: 31 # monitor single instance 32 tm-monitor localhost:26657 33 34 # monitor a few instances by providing comma-separated list of RPC endpoints 35 tm-monitor host1:26657,host2:26657`) 36 fmt.Println("Flags:") 37 flag.PrintDefaults() 38 } 39 40 flag.Parse() 41 42 if flag.NArg() == 0 { 43 flag.Usage() 44 os.Exit(1) 45 } 46 47 if noton { 48 logger = log.NewTMLogger(log.NewSyncWriter(os.Stdout)) 49 } 50 51 monitor := startMonitor(flag.Arg(0)) 52 53 listener := startRPC(listenAddr, monitor, logger) 54 55 var ton *Ton 56 if !noton { 57 ton = NewTon(monitor) 58 ton.Start() 59 } 60 61 // Stop upon receiving SIGTERM or CTRL-C. 62 cmn.TrapSignal(logger, func() { 63 if !noton { 64 ton.Stop() 65 } 66 monitor.Stop() 67 listener.Close() 68 }) 69 70 // Run forever. 71 select {} 72 } 73 74 func startMonitor(endpoints string) *monitor.Monitor { 75 m := monitor.NewMonitor() 76 m.SetLogger(logger.With("component", "monitor")) 77 78 for _, e := range strings.Split(endpoints, ",") { 79 n := monitor.NewNode(e) 80 n.SetLogger(logger.With("node", e)) 81 if err := m.Monitor(n); err != nil { 82 panic(err) 83 } 84 } 85 86 if err := m.Start(); err != nil { 87 panic(err) 88 } 89 90 return m 91 }