func NewServer(addr string, debugVarAddr string, conf *Conf) *Server { log.Infof("%+v", conf) s := &Server{ evtbus: make(chan interface{}, 100), top: topo.NewTopo(conf.productName, conf.zkAddr, conf.f), counter: stats.NewCounters("router"), lastActionSeq: -1, startAt: time.Now(), addr: addr, concurrentLimiter: utils.NewTokenLimiter(100), moper: NewMultiOperator("localhost:" + strings.Split(addr, ":")[1]), pools: cachepool.NewCachePool(), } s.mu.Lock() s.pi.Id = conf.proxyId s.pi.State = models.PROXY_STATE_OFFLINE hname, err := os.Hostname() if err != nil { log.Fatal("get host name failed", err) } s.pi.Addr = hname + ":" + strings.Split(addr, ":")[1] s.pi.DebugVarAddr = hname + ":" + strings.Split(debugVarAddr, ":")[1] log.Infof("proxy_info:%+v", s.pi) s.mu.Unlock() //todo:fill more field stats.Publish("evtbus", stats.StringFunc(func() string { return strconv.Itoa(len(s.evtbus)) })) stats.Publish("startAt", stats.StringFunc(func() string { return s.startAt.String() })) s.RegisterAndWait() _, err = s.top.WatchChildren(models.GetWatchActionPath(conf.productName), s.evtbus) if err != nil { log.Fatal(errors.ErrorStack(err)) } s.FillSlots() //start event handler go s.handleTopoEvent() log.Info("proxy start ok") return s }
func NewServer(addr string, debugVarAddr string, conf *Conf) *Server { log.Infof("start with configuration: %+v", conf) s := &Server{ conf: conf, evtbus: make(chan interface{}, 1000), top: topo.NewTopo(conf.productName, conf.zkAddr, conf.f, conf.provider), counter: stats.NewCounters("router"), lastActionSeq: -1, startAt: time.Now(), addr: addr, moper: NewMultiOperator(addr), reqCh: make(chan *PipelineRequest, 1000), pools: cachepool.NewCachePool(), pipeConns: make(map[string]*taskRunner), bufferedReq: list.New(), } s.pi.Id = conf.proxyId s.pi.State = models.PROXY_STATE_OFFLINE host := strings.Split(addr, ":")[0] debugHost := strings.Split(debugVarAddr, ":")[0] hname, err := os.Hostname() if err != nil { log.Fatal("get host name failed", err) } if host == "0.0.0.0" || strings.HasPrefix(host, "127.0.0.") { host = hname } if debugHost == "0.0.0.0" || strings.HasPrefix(debugHost, "127.0.0.") { debugHost = hname } s.pi.Addr = host + ":" + strings.Split(addr, ":")[1] s.pi.DebugVarAddr = debugHost + ":" + strings.Split(debugVarAddr, ":")[1] s.pi.Pid = os.Getpid() s.pi.StartAt = time.Now().String() log.Infof("proxy_info:%+v", s.pi) stats.Publish("evtbus", stats.StringFunc(func() string { return strconv.Itoa(len(s.evtbus)) })) stats.Publish("startAt", stats.StringFunc(func() string { return s.startAt.String() })) s.RegisterAndWait() _, err = s.top.WatchChildren(models.GetWatchActionPath(conf.productName), s.evtbus) if err != nil { log.Fatal(errors.ErrorStack(err)) } s.FillSlots() //start event handler go s.handleTopoEvent() log.Info("proxy start ok") return s }