func checkNodeStatus(line string) (*topo.Node, bool) { xs := strings.Split(line, " ") _, _, id, addr, flags, parent := xs[0], xs[1], xs[2], xs[3], xs[4], xs[5] node := topo.NewNodeFromString(addr) // basic info node.SetId(id) node.SetParentId(parent) handshake := false if strings.Contains(flags, "handshake") { handshake = true } if strings.Contains(flags, "fail?") { node.SetFail(true) } return node, handshake }
func main() { flag.Parse() seedNodes := []*topo.Node{} for _, addr := range strings.Split(seeds, ",") { glog.Info(addr) n := topo.NewNodeFromString(addr) if n == nil { glog.Fatal("invalid seeds %s", addr) } seedNodes = append(seedNodes, n) } if httpPort == 0 { glog.Fatal("invalid http port") flag.PrintDefaults() } if wsPort == 0 { glog.Fatal("invalid websocket port") flag.PrintDefaults() } initCh := make(chan error) go meta.Run(appName, localRegion, httpPort, wsPort, zkHosts, seedNodes, initCh) err := <-initCh if err != nil { glog.Warning(err) } streams.StartAllStreams() streams.LogStream.Sub(log.WriteFileHandler) streams.LogStream.Sub(log.WriteRingBufferHandler) sp := inspector.NewInspector() go sp.Run() c := controller.NewController() fe := frontend.NewFrontEnd(c, httpPort, wsPort) fe.Run() }
func (self *Inspector) buildNode(line string) (*topo.Node, bool, error) { xs := strings.Split(line, " ") mod, tag, id, addr, flags, parent := xs[0], xs[1], xs[2], xs[3], xs[4], xs[5] node := topo.NewNodeFromString(addr) ranges := []string{} for _, word := range xs[10:] { if strings.HasPrefix(word, "[") { word = word[1 : len(word)-1] xs := strings.Split(word, "->-") if len(xs) == 2 { slot, _ := strconv.Atoi(xs[0]) node.AddMigrating(xs[1], slot) } xs = strings.Split(word, "-<-") if len(xs) == 2 { slot, _ := strconv.Atoi(xs[0]) node.AddImporting(xs[1], slot) } continue } ranges = append(ranges, word) } for _, r := range ranges { xs = strings.Split(r, "-") if len(xs) == 2 { left, _ := strconv.Atoi(xs[0]) right, _ := strconv.Atoi(xs[1]) node.AddRange(topo.Range{left, right}) } else { left, _ := strconv.Atoi(r) node.AddRange(topo.Range{left, left}) } } // basic info node.SetId(id) node.SetParentId(parent) node.SetTag(tag) node.SetReadable(mod[0] == 'r') node.SetWritable(mod[1] == 'w') myself := false if strings.Contains(flags, "myself") { myself = true } if strings.Contains(flags, "master") { node.SetRole("master") } else if strings.Contains(flags, "slave") { node.SetRole("slave") } if strings.Contains(flags, "noaddr") { return nil, myself, ErrNodeNoAddr } if strings.Contains(flags, "handshake") { return nil, myself, ErrNodeInHandShake } if strings.Contains(flags, "fail?") { node.SetPFail(true) node.IncrPFailCount() } xs = strings.Split(tag, ":") if len(xs) == 3 { node.SetRegion(xs[0]) node.SetZone(xs[1]) node.SetRoom(xs[2]) } else if node.Tag != "-" { return nil, myself, ErrInvalidTag } return node, myself, nil }