serviceconf.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. type (
  24. // DevServerConfig is type alias for devserver.Config
  25. DevServerConfig = devserver.Config
  26. // A ServiceConf is a service config.
  27. ServiceConf struct {
  28. Name string
  29. Log logx.LogConf
  30. Mode string `json:",default=pro,options=dev|test|rt|pre|pro"`
  31. MetricsUrl string `json:",optional"`
  32. // Deprecated: please use DevServer
  33. Prometheus prometheus.Config `json:",optional"`
  34. Telemetry trace.Config `json:",optional"`
  35. DevServer DevServerConfig `json:",optional"`
  36. }
  37. )
  38. // MustSetUp sets up the service, exits on error.
  39. func (sc ServiceConf) MustSetUp() {
  40. logx.Must(sc.SetUp())
  41. }
  42. // SetUp sets up the service.
  43. func (sc ServiceConf) SetUp() error {
  44. if len(sc.Log.ServiceName) == 0 {
  45. sc.Log.ServiceName = sc.Name
  46. }
  47. if err := logx.SetUp(sc.Log); err != nil {
  48. return err
  49. }
  50. sc.initMode()
  51. prometheus.StartAgent(sc.Prometheus)
  52. if len(sc.Telemetry.Name) == 0 {
  53. sc.Telemetry.Name = sc.Name
  54. }
  55. trace.StartAgent(sc.Telemetry)
  56. proc.AddShutdownListener(func() {
  57. trace.StopAgent()
  58. })
  59. if len(sc.MetricsUrl) > 0 {
  60. stat.SetReportWriter(stat.NewRemoteWriter(sc.MetricsUrl))
  61. }
  62. devserver.StartAgent(sc.DevServer)
  63. return nil
  64. }
  65. func (sc ServiceConf) initMode() {
  66. switch sc.Mode {
  67. case DevMode, TestMode, RtMode, PreMode:
  68. load.Disable()
  69. stat.SetReporter(nil)
  70. }
  71. }