Explorar o código

2020-01-29 20:09

zry %!s(int64=4) %!d(string=hai) anos
pai
achega
ebe8953f6a
Modificáronse 1 ficheiros con 105 adicións e 2 borrados
  1. 105 2
      defaultFrontend/main.go

+ 105 - 2
defaultFrontend/main.go

@@ -1,7 +1,110 @@
 package main
 
-import "fmt"
+import (
+	"fmt"
+	"gopkg.in/natefinch/lumberjack.v2"
+	"gopkg.in/yaml.v2"
+	"io/ioutil"
+	"os"
+)
+
+var ListenAddress string
+var WWWRootPath string
+var BackendPrefix string
+var BackendTarget string
+
+var ConfigData FrontendConfigYAML
+var AccessLogLevelConfigData *AccessLoggerLevelConfig
+var ErrorLogOutputLevel DWSILogLevel
+
+var AccessLog *AccessLogger
+var ErrorLog *CommonLogger
 
 func main() {
-	fmt.Println("zDWSI Frontend Start...")
+	fmt.Println("--- zDWSI Default Frontend ---")
+	GetConfigEnv()
+	ParseYAMLConfig()
+	InitLogger()
+}
+
+func GetConfigEnv() {
+	fmt.Println("Get Basic Config From Environment Variables...")
+	ListenAddress = os.Getenv("listen")
+	WWWRootPath = os.Getenv("wwwroot")
+	BackendPrefix = os.Getenv("backend_prefix")
+	BackendTarget = os.Getenv("backend_target")
+	if ListenAddress == "" {
+		fmt.Println("No environment variable 'listen', use default value ':8080'")
+		ListenAddress = ":8080"
+	}
+	if WWWRootPath == "" {
+		fmt.Println("No environment variable 'wwwroot', use default value '/data/wwwroot/'")
+		WWWRootPath = "/data/wwwroot/"
+	}
+	if BackendPrefix == "" {
+		fmt.Println("No environment variable 'backend_prefix', use default value 'api'")
+		BackendPrefix = ":8080"
+	}
+	if BackendTarget == "" {
+		fmt.Println("No environment variable 'backend_target', use default value 'http://localhost:9090/'")
+		BackendTarget = "http://localhost:9090/"
+	}
+	fmt.Println("Listen Address: ", ListenAddress)
+	fmt.Println("WWW Root Path: ", WWWRootPath)
+	fmt.Println("Backend Prefix: ", BackendPrefix)
+	fmt.Println("Backend Route Path: ", fmt.Sprintf("/%s/", BackendPrefix))
+	fmt.Println("Backend Proxy Target: ", BackendTarget)
+}
+
+func ParseYAMLConfig() {
+	fmt.Println("Load Config '/data/frontend/zdwsi.frontend.config.yaml'...")
+	jdata, err := ioutil.ReadFile("/data/frontend/zdwsi.frontend.config.yaml")
+	if err != nil {
+		fmt.Println("failed read config file: ", err)
+		os.Exit(ExitCode_YAMLFileReadError)
+	}
+	err = yaml.Unmarshal(jdata, &ConfigData)
+	if err != nil {
+		fmt.Println("failed parse config YAML: ", err)
+		os.Exit(ExitCode_YAMLParseError)
+	}
+	err, AccessLogLevelConfigData = ConvertLogLevelConfig(ConfigData.LogConfig.AccessLoggerDetailConfig)
+	if err != nil {
+		fmt.Println("failed parse config YAML in semantics: ", err)
+		os.Exit(ExitCode_YAMLSemanticsError)
+	}
+	ErrorLogOutputLevel = transLevelStringIntoLevel(ConfigData.LogConfig.ErrorLoggerDetailConfig.OutputLevel)
+	fmt.Println("Config Loaded.")
+	err = yaml.Unmarshal(jdata, &ConfigData)
+	if err != nil {
+		fmt.Println("failed parse config YAML: ", err)
+		os.Exit(ExitCode_YAMLParseError)
+	}
+}
+
+func InitLogger() {
+	cfg := ConfigData.LogConfig.RollingLogConfig.ErrLogCfg
+	elw := &lumberjack.Logger{
+		Filename:   cfg.FileName,
+		MaxSize:    cfg.MaxSize,
+		MaxAge:     cfg.MaxAge,
+		MaxBackups: cfg.MaxBackups,
+		LocalTime:  cfg.UseLocalTime,
+		Compress:   cfg.Compress,
+	}
+	ErrorLog = NewCommonLogger(ErrorLogOutputLevel, elw)
+	ErrorLog.SetFormatter(ConfigData.LogConfig.ErrorLoggerDetailConfig.LogFormat)
+	cfg = ConfigData.LogConfig.RollingLogConfig.AccessLogCfg
+	AccessLog = NewAccessLogger()
+	if ConfigData.LogConfig.AccessLogEnable {
+		alw := &lumberjack.Logger{
+			Filename:   cfg.FileName,
+			MaxSize:    cfg.MaxSize,
+			MaxAge:     cfg.MaxAge,
+			MaxBackups: cfg.MaxBackups,
+			LocalTime:  cfg.UseLocalTime,
+			Compress:   cfg.Compress,
+		}
+		AccessLog.UseLogger(alw, AccessLogLevelConfigData)
+	}
 }