main.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package main
  2. import (
  3. "fmt"
  4. "gopkg.in/natefinch/lumberjack.v2"
  5. "gopkg.in/yaml.v2"
  6. "io/ioutil"
  7. "os"
  8. )
  9. var ListenAddress string
  10. var WWWRootPath string
  11. var BackendPrefix string
  12. var BackendTarget string
  13. var ConfigData FrontendConfigYAML
  14. var AccessLogLevelConfigData *AccessLoggerLevelConfig
  15. var ErrorLogOutputLevel DWSILogLevel
  16. var AccessLog *AccessLogger
  17. var ErrorLog *CommonLogger
  18. func main() {
  19. fmt.Println("--- zDWSI Default Frontend ---")
  20. GetConfigEnv()
  21. ParseYAMLConfig()
  22. InitLogger()
  23. StartServer()
  24. }
  25. func GetConfigEnv() {
  26. fmt.Println("Get Basic Config From Environment Variables...")
  27. ListenAddress = os.Getenv("listen")
  28. WWWRootPath = os.Getenv("wwwroot")
  29. BackendPrefix = os.Getenv("backend_prefix")
  30. BackendTarget = os.Getenv("backend_target")
  31. if ListenAddress == "" {
  32. fmt.Println("No environment variable 'listen', use default value ':8080'")
  33. ListenAddress = ":8080"
  34. }
  35. if WWWRootPath == "" {
  36. fmt.Println("No environment variable 'wwwroot', use default value '/data/wwwroot/'")
  37. WWWRootPath = "/data/wwwroot/"
  38. }
  39. if BackendPrefix == "" {
  40. fmt.Println("No environment variable 'backend_prefix', use default value 'api'")
  41. BackendPrefix = "api"
  42. }
  43. if BackendTarget == "" {
  44. fmt.Println("No environment variable 'backend_target', use default value 'http://localhost:9090/'")
  45. BackendTarget = "http://localhost:9090/"
  46. }
  47. fmt.Println("Listen Address: ", ListenAddress)
  48. fmt.Println("WWW Root Path: ", WWWRootPath)
  49. fmt.Println("Backend Prefix: ", BackendPrefix)
  50. fmt.Println("Backend Route Path: ", fmt.Sprintf("/%s/", BackendPrefix))
  51. fmt.Println("Backend Proxy Target: ", BackendTarget)
  52. }
  53. func ParseYAMLConfig() {
  54. fmt.Println("Load Config '/data/frontend/zdwsi.frontend.config.yaml'...")
  55. jdata, err := ioutil.ReadFile("/data/frontend/zdwsi.frontend.config.yaml")
  56. if err != nil {
  57. fmt.Println("failed read config file: ", err)
  58. os.Exit(ExitCode_YAMLFileReadError)
  59. }
  60. err = yaml.Unmarshal(jdata, &ConfigData)
  61. if err != nil {
  62. fmt.Println("failed parse config YAML: ", err)
  63. os.Exit(ExitCode_YAMLParseError)
  64. }
  65. err, AccessLogLevelConfigData = ConvertLogLevelConfig(ConfigData.LogConfig.AccessLoggerDetailConfig)
  66. if err != nil {
  67. fmt.Println("failed parse config YAML in semantics: ", err)
  68. os.Exit(ExitCode_YAMLSemanticsError)
  69. }
  70. ErrorLogOutputLevel = transLevelStringIntoLevel(ConfigData.LogConfig.ErrorLoggerDetailConfig.OutputLevel)
  71. fmt.Println("Config Loaded.")
  72. err = yaml.Unmarshal(jdata, &ConfigData)
  73. if err != nil {
  74. fmt.Println("failed parse config YAML: ", err)
  75. os.Exit(ExitCode_YAMLParseError)
  76. }
  77. if ConfigData.CommonConfig.IsDebugModeOn {
  78. fmt.Println("Debug Mode is Enable.")
  79. fmt.Println("Print All Config For Debug:")
  80. tmpyaml, err := yaml.Marshal(ConfigData)
  81. if err != nil {
  82. fmt.Println("Failed Print Config: ", err)
  83. } else {
  84. fmt.Printf("%v\n\n", string(tmpyaml))
  85. }
  86. }
  87. }
  88. func InitLogger() {
  89. cfg := ConfigData.LogConfig.RollingLogConfig.ErrLogCfg
  90. elw := &lumberjack.Logger{
  91. Filename: cfg.FileName,
  92. MaxSize: cfg.MaxSize,
  93. MaxAge: cfg.MaxAge,
  94. MaxBackups: cfg.MaxBackups,
  95. LocalTime: cfg.UseLocalTime,
  96. Compress: cfg.Compress,
  97. }
  98. _, _ = fmt.Fprintln(elw, "Lumberjack Logger Write Test")
  99. ErrorLog = NewCommonLogger(ErrorLogOutputLevel, elw)
  100. ErrorLog.SetFormatter(
  101. ConfigData.LogConfig.ErrorLoggerDetailConfig.LogFormat,
  102. ConfigData.LogConfig.ErrorLoggerDetailConfig.UseUTC,
  103. )
  104. cfg = ConfigData.LogConfig.RollingLogConfig.AccessLogCfg
  105. AccessLog = NewAccessLogger()
  106. if ConfigData.LogConfig.AccessLogEnable {
  107. alw := &lumberjack.Logger{
  108. Filename: cfg.FileName,
  109. MaxSize: cfg.MaxSize,
  110. MaxAge: cfg.MaxAge,
  111. MaxBackups: cfg.MaxBackups,
  112. LocalTime: cfg.UseLocalTime,
  113. Compress: cfg.Compress,
  114. }
  115. AccessLog.UseLogger(
  116. alw,
  117. AccessLogLevelConfigData,
  118. ConfigData.LogConfig.AccessLoggerDetailConfig.LogFormat,
  119. ConfigData.LogConfig.AccessLoggerDetailConfig.UseUTC,
  120. )
  121. }
  122. }