serviceconf.go 1.6 KB

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