carbon/app.go
func (app *App) Start() (err error) {
	app.Lock()
	defer app.Unlock()

	defer func() {
		if err != nil {
			app.stopAll()
		}
	}()

	conf := app.Config

	runtime.GOMAXPROCS(conf.Common.MaxCPU)

	core := cache.New()
	core.SetMaxSize(conf.Cache.MaxSize)
	core.SetWriteStrategy(conf.Cache.WriteStrategy)
	core.SetTagsEnabled(conf.Tags.Enabled)

	app.Cache = core

	/* API start */
	if conf.Grpc.Enabled {
		var grpcAddr *net.TCPAddr
		grpcAddr, err = net.ResolveTCPAddr("tcp", conf.Grpc.Listen)
		if err != nil {
			return
		}

		grpcApi := api.New(core)

		if err = grpcApi.Listen(grpcAddr); err != nil {
			return
		}

		app.Api = grpcApi
	}
	/* API end */

	/* WHISPER and TAGS start */
	app.startPersister()
	/* WHISPER and TAGS end */

	app.Receivers = make([]*NamedReceiver, 0)
	var rcv receiver.Receiver
	var rcvOptions map[string]interface{}

	/* UDP start */
	if conf.Udp.Enabled {
		if rcvOptions, err = receiver.WithProtocol(conf.Udp, "udp"); err != nil {
			return
		}

		if rcv, err = receiver.New("udp", rcvOptions, core.Add); err != nil {
			return
		}

		app.Receivers = append(app.Receivers, &NamedReceiver{
			Receiver: rcv,
			Name:     "udp",
		})
	}
	/* UDP end */

	/* TCP start */
	if conf.Tcp.Enabled {
		if rcvOptions, err = receiver.WithProtocol(conf.Tcp, "tcp"); err != nil {
			return
		}

		if rcv, err = receiver.New("tcp", rcvOptions, core.Add); err != nil {
			return
		}

		app.Receivers = append(app.Receivers, &NamedReceiver{
			Receiver: rcv,
			Name:     "tcp",
		})
	}
	/* TCP end */

	/* PICKLE start */
	if conf.Pickle.Enabled {
		if rcvOptions, err = receiver.WithProtocol(conf.Pickle, "pickle"); err != nil {
			return
		}

		if rcv, err = receiver.New("pickle", rcvOptions, core.Add); err != nil {
			return
		}

		app.Receivers = append(app.Receivers, &NamedReceiver{
			Receiver: rcv,
			Name:     "pickle",
		})
	}
	/* PICKLE end */

	/* CUSTOM RECEIVERS start */
	for receiverName, receiverOptions := range conf.Receiver {
		if rcv, err = receiver.New(receiverName, receiverOptions, core.Add); err != nil {
			return
		}

		app.Receivers = append(app.Receivers, &NamedReceiver{
			Receiver: rcv,
			Name:     receiverName,
		})
	}
	/* CUSTOM RECEIVERS end */

	/* CARBONSERVER start */
	if conf.Carbonserver.Enabled {
		if err != nil {
			return
		}

		carbonserver := carbonserver.NewCarbonserverListener(core.Get)
		carbonserver.SetWhisperData(conf.Whisper.DataDir)
		carbonserver.SetMaxGlobs(conf.Carbonserver.MaxGlobs)
		carbonserver.SetFLock(app.Config.Whisper.FLock)
		carbonserver.SetFailOnMaxGlobs(conf.Carbonserver.FailOnMaxGlobs)
		carbonserver.SetBuckets(conf.Carbonserver.Buckets)
		carbonserver.SetMetricsAsCounters(conf.Carbonserver.MetricsAsCounters)
		carbonserver.SetScanFrequency(conf.Carbonserver.ScanFrequency.Value())
		carbonserver.SetReadTimeout(conf.Carbonserver.ReadTimeout.Value())
		carbonserver.SetIdleTimeout(conf.Carbonserver.IdleTimeout.Value())
		carbonserver.SetWriteTimeout(conf.Carbonserver.WriteTimeout.Value())
		carbonserver.SetQueryCacheEnabled(conf.Carbonserver.QueryCacheEnabled)
		carbonserver.SetFindCacheEnabled(conf.Carbonserver.FindCacheEnabled)
		carbonserver.SetQueryCacheSizeMB(conf.Carbonserver.QueryCacheSizeMB)
		carbonserver.SetTrigramIndex(conf.Carbonserver.TrigramIndex)
		carbonserver.SetInternalStatsDir(conf.Carbonserver.InternalStatsDir)
		carbonserver.SetPercentiles(conf.Carbonserver.Percentiles)
		// carbonserver.SetQueryTimeout(conf.Carbonserver.QueryTimeout.Value())

		if conf.Prometheus.Enabled {
			carbonserver.InitPrometheus(app.PromRegisterer)
		}

		if err = carbonserver.Listen(conf.Carbonserver.Listen); err != nil {
			return
		}

		app.Carbonserver = carbonserver
	}
	/* CARBONSERVER end */

	/* CARBONLINK start */
	if conf.Carbonlink.Enabled {
		var linkAddr *net.TCPAddr
		linkAddr, err = net.ResolveTCPAddr("tcp", conf.Carbonlink.Listen)
		if err != nil {
			return
		}

		carbonlink := cache.NewCarbonlinkListener(core)
		carbonlink.SetReadTimeout(conf.Carbonlink.ReadTimeout.Value())
		// carbonlink.SetQueryTimeout(conf.Carbonlink.QueryTimeout.Value())

		if err = carbonlink.Listen(linkAddr); err != nil {
			return
		}

		app.CarbonLink = carbonlink
	}
	/* CARBONLINK end */

	/* RESTORE start */
	if conf.Dump.Enabled {
		go app.Restore(core.Add, conf.Dump.Path, conf.Dump.RestorePerSecond)
	}
	/* RESTORE end */

	/* COLLECTOR start */
	app.Collector = NewCollector(app)
	/* COLLECTOR end */

	return
}
func (app *App) Start() (err error) {
	app.Lock()
	defer app.Unlock()

	defer func() {
		if err != nil {
			app.stopAll()
		}
	}()

	conf := app.Config

	runtime.GOMAXPROCS(conf.Common.MaxCPU)

	core := cache.New()
	core.SetMaxSize(conf.Cache.MaxSize)
	core.SetWriteStrategy(conf.Cache.WriteStrategy)
	core.SetTagsEnabled(conf.Tags.Enabled)

	app.Cache = core

	/* API start */
	if conf.Grpc.Enabled {
		var grpcAddr *net.TCPAddr
		grpcAddr, err = net.ResolveTCPAddr("tcp", conf.Grpc.Listen)
		if err != nil {
			return
		}

		grpcApi := api.New(core)

		if err = grpcApi.Listen(grpcAddr); err != nil {
			return
		}

		app.Api = grpcApi
	}
	/* API end */

	/* WHISPER and TAGS start */
	app.startPersister()
	/* WHISPER and TAGS end */

	app.Receivers = make([]*NamedReceiver, 0)
	var rcv receiver.Receiver
	var rcvOptions map[string]interface{}

	/* UDP start */
	if conf.Udp.Enabled {
		if rcvOptions, err = receiver.WithProtocol(conf.Udp, "udp"); err != nil {
			return
		}

		if rcv, err = receiver.New("udp", rcvOptions, core.Add); err != nil {
			return
		}

		app.Receivers = append(app.Receivers, &NamedReceiver{
			Receiver: rcv,
			Name:     "udp",
		})
	}
	/* UDP end */

	/* TCP start */
	if conf.Tcp.Enabled {
		if rcvOptions, err = receiver.WithProtocol(conf.Tcp, "tcp"); err != nil {
			return
		}

		if rcv, err = receiver.New("tcp", rcvOptions, core.Add); err != nil {
			return
		}

		app.Receivers = append(app.Receivers, &NamedReceiver{
			Receiver: rcv,
			Name:     "tcp",
		})
	}
	/* TCP end */

	/* PICKLE start */
	if conf.Pickle.Enabled {
		if rcvOptions, err = receiver.WithProtocol(conf.Pickle, "pickle"); err != nil {
			return
		}

		if rcv, err = receiver.New("pickle", rcvOptions, core.Add); err != nil {
			return
		}

		app.Receivers = append(app.Receivers, &NamedReceiver{
			Receiver: rcv,
			Name:     "pickle",
		})
	}
	/* PICKLE end */

	/* CUSTOM RECEIVERS start */
	for receiverName, receiverOptions := range conf.Receiver {
		if rcv, err = receiver.New(receiverName, receiverOptions, core.Add); err != nil {
			return
		}

		app.Receivers = append(app.Receivers, &NamedReceiver{
			Receiver: rcv,
			Name:     receiverName,
		})
	}
	/* CUSTOM RECEIVERS end */

	/* CARBONSERVER start */
	if conf.Carbonserver.Enabled {
		if err != nil {
			return
		}

		carbonserver := carbonserver.NewCarbonserverListener(core.Get)
		carbonserver.SetWhisperData(conf.Whisper.DataDir)
		carbonserver.SetMaxGlobs(conf.Carbonserver.MaxGlobs)
		carbonserver.SetFLock(app.Config.Whisper.FLock)
		carbonserver.SetFailOnMaxGlobs(conf.Carbonserver.FailOnMaxGlobs)
		carbonserver.SetBuckets(conf.Carbonserver.Buckets)
		carbonserver.SetMetricsAsCounters(conf.Carbonserver.MetricsAsCounters)
		carbonserver.SetScanFrequency(conf.Carbonserver.ScanFrequency.Value())
		carbonserver.SetReadTimeout(conf.Carbonserver.ReadTimeout.Value())
		carbonserver.SetIdleTimeout(conf.Carbonserver.IdleTimeout.Value())
		carbonserver.SetWriteTimeout(conf.Carbonserver.WriteTimeout.Value())
		carbonserver.SetQueryCacheEnabled(conf.Carbonserver.QueryCacheEnabled)
		carbonserver.SetFindCacheEnabled(conf.Carbonserver.FindCacheEnabled)
		carbonserver.SetQueryCacheSizeMB(conf.Carbonserver.QueryCacheSizeMB)
		carbonserver.SetTrigramIndex(conf.Carbonserver.TrigramIndex)
		carbonserver.SetInternalStatsDir(conf.Carbonserver.InternalStatsDir)
		carbonserver.SetPercentiles(conf.Carbonserver.Percentiles)
		// carbonserver.SetQueryTimeout(conf.Carbonserver.QueryTimeout.Value())

		if conf.Prometheus.Enabled {
			carbonserver.InitPrometheus(app.PromRegisterer)
		}

		if err = carbonserver.Listen(conf.Carbonserver.Listen); err != nil {
			return
		}

		app.Carbonserver = carbonserver
	}
	/* CARBONSERVER end */

	/* CARBONLINK start */
	if conf.Carbonlink.Enabled {
		var linkAddr *net.TCPAddr
		linkAddr, err = net.ResolveTCPAddr("tcp", conf.Carbonlink.Listen)
		if err != nil {
			return
		}

		carbonlink := cache.NewCarbonlinkListener(core)
		carbonlink.SetReadTimeout(conf.Carbonlink.ReadTimeout.Value())
		// carbonlink.SetQueryTimeout(conf.Carbonlink.QueryTimeout.Value())

		if err = carbonlink.Listen(linkAddr); err != nil {
			return
		}

		app.CarbonLink = carbonlink
	}
	/* CARBONLINK end */

	/* RESTORE start */
	if conf.Dump.Enabled {
		go app.Restore(core.Add, conf.Dump.Path, conf.Dump.RestorePerSecond)
	}
	/* RESTORE end */

	/* COLLECTOR start */
	app.Collector = NewCollector(app)
	/* COLLECTOR end */

	return
}
func ( app * App ) Start ( ) ( err error ) { app . Lock ( ) defer app . Unlock ( ) defer func ( ) { if err != nil { app . stopAll ( ) } } ( ) conf := app . Config runtime . GOMAXPROCS ( conf . Common . MaxCPU ) core := cache . New ( ) core . SetMaxSize ( conf . Cache . MaxSize ) core . SetWriteStrategy ( conf . Cache . WriteStrategy ) core . SetTagsEnabled ( conf . Tags . Enabled ) app . Cache = core /* API start */ if conf . Grpc . Enabled { var grpcAddr * net . TCPAddr grpcAddr , err = net . ResolveTCPAddr ( " " , conf . Grpc . Listen ) if err != nil { return } grpcApi := api . New ( core ) if err = grpcApi . Listen ( grpcAddr ) ; err != nil { return } app . Api = grpcApi } /* API end */ /* WHISPER and TAGS start */ app . startPersister ( ) /* WHISPER and TAGS end */ app . Receivers = make ( [ ] * NamedReceiver , 0 ) var rcv receiver . Receiver var rcvOptions map [ string ] interface { } /* UDP start */ if conf . Udp . Enabled { if rcvOptions , err = receiver . WithProtocol ( conf . Udp , " " ) ; err != nil { return } if rcv , err = receiver . New ( " " , rcvOptions , core . Add ) ; err != nil { return } app . Receivers = append ( app . Receivers , & NamedReceiver { Receiver : rcv , Name : " " , } ) } /* UDP end */ /* TCP start */ if conf . Tcp . Enabled { if rcvOptions , err = receiver . WithProtocol ( conf . Tcp , " " ) ; err != nil { return } if rcv , err = receiver . New ( " " , rcvOptions , core . Add ) ; err != nil { return } app . Receivers = append ( app . Receivers , & NamedReceiver { Receiver : rcv , Name : " " , } ) } /* TCP end */ /* PICKLE start */ if conf . Pickle . Enabled { if rcvOptions , err = receiver . WithProtocol ( conf . Pickle , " " ) ; err != nil { return } if rcv , err = receiver . New ( " " , rcvOptions , core . Add ) ; err != nil { return } app . Receivers = append ( app . Receivers , & NamedReceiver { Receiver : rcv , Name : " " , } ) } /* PICKLE end */ /* CUSTOM RECEIVERS start */ for receiverName , receiverOptions := range conf . Receiver { if rcv , err = receiver . New ( receiverName , receiverOptions , core . Add ) ; err != nil { return } app . Receivers = append ( app . Receivers , & NamedReceiver { Receiver : rcv , Name : receiverName , } ) } /* CUSTOM RECEIVERS end */ /* CARBONSERVER start */ if conf . Carbonserver . Enabled { if err != nil { return } carbonserver := carbonserver . NewCarbonserverListener ( core . Get ) carbonserver . SetWhisperData ( conf . Whisper . DataDir ) carbonserver . SetMaxGlobs ( conf . Carbonserver . MaxGlobs ) carbonserver . SetFLock ( app . Config . Whisper . FLock ) carbonserver . SetFailOnMaxGlobs ( conf . Carbonserver . FailOnMaxGlobs ) carbonserver . SetBuckets ( conf . Carbonserver . Buckets ) carbonserver . SetMetricsAsCounters ( conf . Carbonserver . MetricsAsCounters ) carbonserver . SetScanFrequency ( conf . Carbonserver . ScanFrequency . Value ( ) ) carbonserver . SetReadTimeout ( conf . Carbonserver . ReadTimeout . Value ( ) ) carbonserver . SetIdleTimeout ( conf . Carbonserver . IdleTimeout . Value ( ) ) carbonserver . SetWriteTimeout ( conf . Carbonserver . WriteTimeout . Value ( ) ) carbonserver . SetQueryCacheEnabled ( conf . Carbonserver . QueryCacheEnabled ) carbonserver . SetFindCacheEnabled ( conf . Carbonserver . FindCacheEnabled ) carbonserver . SetQueryCacheSizeMB ( conf . Carbonserver . QueryCacheSizeMB ) carbonserver . SetTrigramIndex ( conf . Carbonserver . TrigramIndex ) carbonserver . SetInternalStatsDir ( conf . Carbonserver . InternalStatsDir ) carbonserver . SetPercentiles ( conf . Carbonserver . Percentiles ) // carbonserver.SetQueryTimeout(conf.Carbonserver.QueryTimeout.Value()) if conf . Prometheus . Enabled { carbonserver . InitPrometheus ( app . PromRegisterer ) } if err = carbonserver . Listen ( conf . Carbonserver . Listen ) ; err != nil { return } app . Carbonserver = carbonserver } /* CARBONSERVER end */ /* CARBONLINK start */ if conf . Carbonlink . Enabled { var linkAddr * net . TCPAddr linkAddr , err = net . ResolveTCPAddr ( " " , conf . Carbonlink . Listen ) if err != nil { return } carbonlink := cache . NewCarbonlinkListener ( core ) carbonlink . SetReadTimeout ( conf . Carbonlink . ReadTimeout . Value ( ) ) // carbonlink.SetQueryTimeout(conf.Carbonlink.QueryTimeout.Value()) if err = carbonlink . Listen ( linkAddr ) ; err != nil { return } app . CarbonLink = carbonlink } /* CARBONLINK end */ /* RESTORE start */ if conf . Dump . Enabled { go app . Restore ( core . Add , conf . Dump . Path , conf . Dump . RestorePerSecond ) } /* RESTORE end */ /* COLLECTOR start */ app . Collector = NewCollector ( app ) /* COLLECTOR end */ return }
// Start starts
Start starts