serviceconf.go 1.8 KB

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