func (this *Zktop) displayZoneTop(zkzone *zk.ZkZone) { if this.batchMode { this.Ui.Output(fmt.Sprintf("%s %s", zkzone.Name(), bjtime.NowBj())) } else { this.Ui.Output(color.Green(zkzone.Name())) } header := "VER SERVER PORT M OUTST RECVD SENT CONNS ZNODES LAT(MIN/AVG/MAX)" this.Ui.Output(header) stats := zkzone.RunZkFourLetterCommand("stat") sortedHosts := make([]string, 0, len(stats)) for hp, _ := range stats { sortedHosts = append(sortedHosts, hp) } sort.Strings(sortedHosts) for _, hostPort := range sortedHosts { host, port, err := net.SplitHostPort(hostPort) if err != nil { panic(err) } stat := zk.ParseStatResult(stats[hostPort]) if stat.Mode == "" { if this.batchMode { stat.Mode = "E" } else { stat.Mode = color.Red("E") } } else if stat.Mode == "L" && !this.batchMode { stat.Mode = color.Blue(stat.Mode) } var sentQps, recvQps int if lastRecv, present := this.lastRecvs[hostPort]; present { r1, _ := strconv.Atoi(stat.Received) r0, _ := strconv.Atoi(lastRecv) recvQps = (r1 - r0) / int(this.refreshInterval.Seconds()) s1, _ := strconv.Atoi(stat.Sent) s0, _ := strconv.Atoi(this.lastSents[hostPort]) sentQps = (s1 - s0) / int(this.refreshInterval.Seconds()) } this.Ui.Output(fmt.Sprintf("%-15s %-15s %5s %1s %6s %16s %16s %5s %7s %s", stat.Version, // 15 host, // 15 port, // 5 stat.Mode, // 1 stat.Outstanding, // 6 fmt.Sprintf("%s/%d", stat.Received, recvQps), // 16 fmt.Sprintf("%s/%d", stat.Sent, sentQps), // 16 stat.Connections, // 5 stat.Znodes, // 7 stat.Latency, )) this.lastRecvs[hostPort] = stat.Received this.lastSents[hostPort] = stat.Sent } }
func (this *Zookeeper) printLeader(zkzone *zk.ZkZone) { // FIXME all zones will only show the 1st zone info because it blocks others for { this.Ui.Output(color.Blue(zkzone.Name())) for zkhost, lines := range zkzone.RunZkFourLetterCommand("mntr") { if this.zkHost != "" && !strings.HasPrefix(zkhost, this.zkHost+":") { continue } parts := strings.Split(lines, "\n") for _, l := range parts { if strings.HasPrefix(l, "zk_server_state") && strings.HasSuffix(l, "leader") { this.Ui.Output(color.Green("%28s", zkhost)) break } } } if this.watchMode { time.Sleep(time.Second * 5) } else { break } } }
func (this *Zookeeper) printZkStats(zkzone *zk.ZkZone) { for { this.Ui.Output(color.Blue(zkzone.Name())) for zkhost, lines := range zkzone.RunZkFourLetterCommand(this.flw) { if this.zkHost != "" && !strings.HasPrefix(zkhost, this.zkHost+":") { continue } this.Ui.Output(fmt.Sprintf("%s\n%s", color.Green("%28s", zkhost), lines)) } if this.watchMode { time.Sleep(time.Second * 5) } else { break } } }