github.com/lingyao2333/mo-zero@v1.4.1/core/service/serviceconf.go (about) 1 package service 2 3 import ( 4 "log" 5 6 "github.com/lingyao2333/mo-zero/core/load" 7 "github.com/lingyao2333/mo-zero/core/logx" 8 "github.com/lingyao2333/mo-zero/core/proc" 9 "github.com/lingyao2333/mo-zero/core/prometheus" 10 "github.com/lingyao2333/mo-zero/core/stat" 11 "github.com/lingyao2333/mo-zero/core/trace" 12 ) 13 14 const ( 15 // DevMode means development mode. 16 DevMode = "dev" 17 // TestMode means test mode. 18 TestMode = "test" 19 // RtMode means regression test mode. 20 RtMode = "rt" 21 // PreMode means pre-release mode. 22 PreMode = "pre" 23 // ProMode means production mode. 24 ProMode = "pro" 25 ) 26 27 // A ServiceConf is a service config. 28 type ServiceConf struct { 29 Name string 30 Log logx.LogConf 31 Mode string `json:",default=pro,options=dev|test|rt|pre|pro"` 32 MetricsUrl string `json:",optional"` 33 Prometheus prometheus.Config `json:",optional"` 34 Telemetry trace.Config `json:",optional"` 35 } 36 37 // MustSetUp sets up the service, exits on error. 38 func (sc ServiceConf) MustSetUp() { 39 if err := sc.SetUp(); err != nil { 40 log.Fatal(err) 41 } 42 } 43 44 // SetUp sets up the service. 45 func (sc ServiceConf) SetUp() error { 46 if len(sc.Log.ServiceName) == 0 { 47 sc.Log.ServiceName = sc.Name 48 } 49 if err := logx.SetUp(sc.Log); err != nil { 50 return err 51 } 52 53 sc.initMode() 54 prometheus.StartAgent(sc.Prometheus) 55 56 if len(sc.Telemetry.Name) == 0 { 57 sc.Telemetry.Name = sc.Name 58 } 59 trace.StartAgent(sc.Telemetry) 60 proc.AddShutdownListener(func() { 61 trace.StopAgent() 62 }) 63 64 if len(sc.MetricsUrl) > 0 { 65 stat.SetReportWriter(stat.NewRemoteWriter(sc.MetricsUrl)) 66 } 67 68 return nil 69 } 70 71 func (sc ServiceConf) initMode() { 72 switch sc.Mode { 73 case DevMode, TestMode, RtMode, PreMode: 74 load.Disable() 75 stat.SetReporter(nil) 76 } 77 }