8
0

config.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package config
  2. import (
  3. "fmt"
  4. "git.sxidc.com/go-framework/baize/framework/core/application"
  5. "git.sxidc.com/go-tools/utils/strutils"
  6. "git.sxidc.com/service-supports/fslog"
  7. "git.sxidc.com/service-supports/scm-sdk"
  8. "gopkg.in/yaml.v3"
  9. "os"
  10. "time"
  11. )
  12. type Config struct {
  13. ApplicationConfig application.Config
  14. OsmConfig OsmConfig `json:"osm" yaml:"osm"`
  15. }
  16. var conf Config
  17. func init() {
  18. useSCMEnv := os.Getenv("USE_SCM")
  19. if useSCMEnv == "true" {
  20. initConfigFromSCM()
  21. } else {
  22. initConfigFromConfigFile()
  23. }
  24. }
  25. type OsmConfig struct {
  26. Namespace string `yaml:"namespace"`
  27. Name string `yaml:"name"`
  28. Prefix string `yaml:"prefix"`
  29. TmpPrefix string `yaml:"tmp_prefix"`
  30. BaseUrl string `yaml:"base_url"`
  31. TimeoutSec time.Duration `yaml:"timeout_sec"`
  32. }
  33. func GetConfig() Config {
  34. return conf
  35. }
  36. func initConfigFromSCM() {
  37. scmBaseUrl := loadEnvOrPanic("SCM_BASE_URL")
  38. scmNamespace := loadEnvOrPanic("SCM_NAMESPACE")
  39. scmName := loadEnvOrPanic("SCM_NAME")
  40. info, err := scm_sdk.GetCurrentConfiguration(scmBaseUrl, scmNamespace, scmName)
  41. if err != nil {
  42. fslog.Error(err)
  43. panic(err)
  44. }
  45. applicationConfig, err := application.LoadFromYaml(info.Content)
  46. if err != nil {
  47. panic(err)
  48. }
  49. conf.ApplicationConfig = applicationConfig
  50. err = yaml.Unmarshal([]byte(info.Content), &conf)
  51. if err != nil {
  52. panic(err)
  53. }
  54. fslog.Info("Load config from scm finish")
  55. }
  56. func initConfigFromConfigFile() {
  57. configFilePath := os.Getenv("CONFIG_FILE_PATH")
  58. applicationConfig, err := application.LoadFromYamlFile(configFilePath)
  59. if err != nil {
  60. panic(err)
  61. }
  62. conf.ApplicationConfig = applicationConfig
  63. yamlBytes, err := os.ReadFile(configFilePath)
  64. if err != nil {
  65. panic(err)
  66. }
  67. err = yaml.Unmarshal(yamlBytes, &conf)
  68. if err != nil {
  69. panic(err)
  70. }
  71. fmt.Println("Load config file finish")
  72. }
  73. func loadEnvOrPanic(envName string) string {
  74. envValue := os.Getenv(envName)
  75. if strutils.IsStringEmpty(envValue) {
  76. panic("请配置" + envName)
  77. }
  78. return envValue
  79. }