func (p *program) Start() error { glog.InitWithFlag(flagSet) flagSet.Parse(os.Args[1:]) if *showVersion { fmt.Println(version.String("nsqlookupd")) os.Exit(0) } var cfg map[string]interface{} if *config != "" { _, err := toml.DecodeFile(*config, &cfg) if err != nil { log.Fatalf("ERROR: failed to load config file %s - %s", *config, err.Error()) } } opts := nsqlookupd.NewOptions() options.Resolve(opts, flagSet, cfg) if opts.LogDir != "" { glog.SetGLogDir(opts.LogDir) } nsqlookupd.SetLogger(opts) glog.StartWorker(time.Second * 2) daemon := nsqlookupd.New(opts) daemon.Main() p.nsqlookupd = daemon return nil }
func New(opts *Options) *NSQLookupd { n := &NSQLookupd{ opts: opts, DB: NewRegistrationDB(), } nsqlookupLog.Logf(version.String("nsqlookupd")) return n }
func NewNsqdServer(opts *nsqd.Options) (*nsqd.NSQD, *NsqdServer) { ip := opts.DecideBroadcast() nsqdInstance := nsqd.New(opts) s := &NsqdServer{} ctx := &context{} ctx.nsqd = nsqdInstance _, port, _ := net.SplitHostPort(opts.TCPAddress) rpcport := opts.RPCPort if rpcport != "" { ip = opts.BroadcastAddress consistence.SetCoordLogger(opts.Logger, opts.LogLevel) coord := consistence.NewNsqdCoordinator(opts.ClusterID, ip, port, rpcport, strconv.FormatInt(opts.ID, 10), opts.DataPath, nsqdInstance) l := consistence.NewNsqdEtcdMgr(opts.ClusterLeadershipAddresses) coord.SetLeadershipMgr(l) ctx.nsqdCoord = coord } else { nsqd.NsqLogger().LogWarningf("Start without nsqd coordinator enabled") ctx.nsqdCoord = nil } s.ctx = ctx s.exitChan = make(chan int) tlsConfig, err := buildTLSConfig(opts) if err != nil { nsqd.NsqLogger().LogErrorf("FATAL: failed to build TLS config - %s", err) os.Exit(1) } if tlsConfig == nil && opts.TLSRequired != TLSNotRequired { nsqd.NsqLogger().LogErrorf("FATAL: cannot require TLS client connections without TLS key and cert") os.Exit(1) } s.ctx.tlsConfig = tlsConfig s.ctx.nsqd.SetPubLoop(s.ctx.internalPubLoop) nsqd.NsqLogger().Logf(version.String("nsqd")) nsqd.NsqLogger().Logf("ID: %d", opts.ID) return nsqdInstance, s }
func main() { glog.InitWithFlag(flagSet) flagSet.Parse(os.Args[1:]) if *showVersion { fmt.Println(version.String("nsqadmin")) return } defer glog.Flush() if *templateDir != "" { log.Printf("WARNING: --template-dir is deprecated and will be removed in the next release (templates are now compiled into the binary)") } exitChan := make(chan int) signalChan := make(chan os.Signal, 1) go func() { <-signalChan exitChan <- 1 }() signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM) var cfg map[string]interface{} if *config != "" { _, err := toml.DecodeFile(*config, &cfg) if err != nil { log.Fatalf("ERROR: failed to load config file %s - %s", *config, err) } } opts := nsqadmin.NewOptions() options.Resolve(opts, flagSet, cfg) if opts.LogDir != "" { glog.SetGLogDir(opts.LogDir) } glog.StartWorker(time.Second * 2) nsqadmin := nsqadmin.New(opts) nsqadmin.Main() <-exitChan nsqadmin.Exit() }
func (s *httpServer) printStats(stats []nsqd.TopicStats, health string, startTime time.Time, uptime time.Duration) []byte { var buf bytes.Buffer w := &buf now := time.Now() io.WriteString(w, fmt.Sprintf("%s\n", version.String("nsqd"))) io.WriteString(w, fmt.Sprintf("start_time %v\n", startTime.Format(time.RFC3339))) io.WriteString(w, fmt.Sprintf("uptime %s\n", uptime)) if len(stats) == 0 { io.WriteString(w, "\nNO_TOPICS\n") return buf.Bytes() } io.WriteString(w, fmt.Sprintf("\nHealth: %s\n", health)) for _, t := range stats { var pausedPrefix string pausedPrefix = " " io.WriteString(w, fmt.Sprintf("\n%s[%-15s] depth: %-5d be-depth: %-5d msgs: %-8d e2e%%: %s\n", pausedPrefix, t.TopicName, t.Depth, t.BackendDepth, t.MessageCount, t.E2eProcessingLatency)) for _, c := range t.Channels { if c.Paused { pausedPrefix = " *P " } else { pausedPrefix = " " } io.WriteString(w, fmt.Sprintf("%s[%-25s] depth: %-5d be-depth: %-5d inflt: %-4d def: %-4d re-q: %-5d timeout: %-5d msgs: %-8d e2e%%: %s\n", pausedPrefix, c.ChannelName, c.Depth, c.BackendDepth, c.InFlightCount, c.DeferredCount, c.RequeueCount, c.TimeoutCount, c.MessageCount, c.E2eProcessingLatency)) for _, client := range c.Clients { connectTime := time.Unix(client.ConnectTime, 0) // truncate to the second duration := time.Duration(int64(now.Sub(connectTime).Seconds())) * time.Second _, port, _ := net.SplitHostPort(client.RemoteAddress) io.WriteString(w, fmt.Sprintf(" [%s %-21s] state: %d inflt: %-4d rdy: %-4d fin: %-8d re-q: %-8d msgs: %-8d connected: %s\n", client.Version, fmt.Sprintf("%s:%s", client.Name, port), client.State, client.InFlightCount, client.ReadyCount, client.FinishCount, client.RequeueCount, client.MessageCount, duration, )) } } } return buf.Bytes() }