serviceconf.go 1.8 KB

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