Browse Source

201908272322

zry 4 years ago
parent
commit
9057407297

+ 1 - 0
.gitignore

@@ -24,3 +24,4 @@ _testmain.go
 *.test
 *.prof
 
+

+ 10 - 0
.idea/misc.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptSettings">
+    <option name="languageLevel" value="ES6" />
+  </component>
+  <component name="RustProjectSettings">
+    <option name="explicitPathToStdlib" value="Z:\Public\Rust\Rust\lib\" />
+    <option name="toolchainHomeDirectory" value="$PROJECT_DIR$/../../../../../../Rust/Rust/bin" />
+  </component>
+</project>

+ 8 - 0
.idea/modules.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/zDWSI.iml" filepath="$PROJECT_DIR$/.idea/zDWSI.iml" />
+    </modules>
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 8 - 0
.idea/zDWSI.iml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="WEB_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$" />
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>

+ 7 - 0
defaultFrontend/main.go

@@ -0,0 +1,7 @@
+package main
+
+import "fmt"
+
+func main() {
+	fmt.Println("zDWSI Frontend Start...")
+}

+ 0 - 0
dist/Dockerfile


+ 33 - 0
dist/rel/config.default.json

@@ -0,0 +1,33 @@
+{
+  "frontend":{
+    "enable": true,
+    "entry": "zDWSIFrontend",
+    "shell_log":{
+      "file": "/data/logs/frontend.shell.log",
+      "max_size": 16,
+      "max_age": 30,
+      "max_backups": 50,
+      "use_local_time": true,
+      "compress_history": true
+    },
+    "listen": ":8080",
+    "wwwroot": "/data/wwwroot/",
+    "backend_proxy":{
+      "prefix": "api",
+      "target": "localhost:9090"
+    }
+  },
+  "backend":{
+    "enable": false,
+    "entry": "Backend",
+    "listen": ":9090",
+    "shell_log":{
+      "file": "/data/logs/backend.shell.log",
+      "max_size": 16,
+      "max_age": 30,
+      "max_backups": 50,
+      "use_local_time": true,
+      "compress_history": true
+    }
+  }
+}

+ 18 - 0
dist/rel/index.default.html

@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset=utf-8>
+        <meta http-equiv=X-UA-Compatible content="IE=edge">
+        <meta name=viewport content="width=device-width,initial-scale=1">
+        <title>zjinja_offical_v1</title>
+    </head>
+    <body>
+        <h1>Welcome!</h1>
+        <h2>zDWSI V1.0 deployed.</h2>
+        <hr />
+        <h6>
+            <a href="http://git.swzry.com/zry/zDWSI/" target="_blank">zDWSI</a>
+            - ZRY Docker Web Service Infrastructure - Version: 1.0
+        </h6>
+    </body>
+</html>

BIN
dist/rel/zDWSIFrontend_linux


BIN
dist/zDWSILauncher_linux


+ 36 - 0
launcher/jsondef.go

@@ -0,0 +1,36 @@
+package main
+
+type ConfigJSON struct {
+	Frontend FrontendJSON `json:"frontend"`
+	Backend  BackendJSON  `json:"backend"`
+}
+
+type FrontendJSON struct {
+	Enable       bool                 `json:"enable"`
+	EntryPoint   string               `json:"entry"`
+	ListenAddr   string               `json:"listen"`
+	WWWRoot      string               `json:"wwwroot"`
+	BackendProxy BackendProxyJSON     `json:"backend_proxy"`
+	ShellLog     LumberjackLoggerJSON `json:"shell_log"`
+}
+
+type BackendJSON struct {
+	Enable     bool                 `json:"enable"`
+	EntryPoint string               `json:"entry"`
+	ListenAddr string               `json:"listen"`
+	ShellLog   LumberjackLoggerJSON `json:"shell_log"`
+}
+
+type BackendProxyJSON struct {
+	Prefix     string `json:"prefix"`
+	ProxyTaret string `json:"target"`
+}
+
+type LumberjackLoggerJSON struct {
+	FileName     string `json:"file"`
+	MaxSize      int    `json:"max_size"`
+	MaxAge       int    `json:"max_age"`
+	MaxBackups   int    `json:"max_backups"`
+	UseLocalTime bool   `json:"use_local_time"`
+	Compress     bool   `json:"compress_history"`
+}

+ 135 - 0
launcher/main.go

@@ -0,0 +1,135 @@
+package main
+
+import (
+	"encoding/json"
+	"fmt"
+	"git.swzry.com/zry/pathutils"
+	"gopkg.in/natefinch/lumberjack.v2"
+	"io"
+	"io/ioutil"
+	"os/exec"
+)
+
+var ConfigData ConfigJSON
+var FrontendShellLogger *lumberjack.Logger
+var BackendShellLogger *lumberjack.Logger
+
+func main() {
+	fmt.Println("zDWSI Launcher Start.")
+	CheckInit()
+	LoadJSON()
+	StartFrontend()
+	StartBackend()
+	fmt.Println("Launcher Sleeping.")
+	RoutineSleep()
+}
+
+func CheckInit() {
+	pe, err := pathutils.PathExists("/data/config.json")
+	if err == nil && pe {
+		return
+	}
+	fmt.Println("Initializing Container...")
+	pathutils.MkDirIfNotExist("/data/frontend/", 0777)
+	pathutils.MkDirIfNotExist("/data/backend/", 0777)
+	pathutils.MkDirIfNotExist("/data/wwwroot/", 0777)
+	pathutils.MkDirIfNotExist("/data/logs/", 0777)
+	pathutils.CopyFile("/data/config.json", "/rel/config.default.json")
+	pathutils.CopyFile("/data/wwwroot/index.html", "/rel/index.default.html")
+	pathutils.CopyFile("/data/frontend/zDWSIFrontend", "/rel/zDWSIFrontend_linux")
+	fmt.Println("Container Initialized. Please Edit 'config.json'.")
+}
+
+func LoadJSON() {
+	fmt.Println("Load Config '/data/config.json'")
+	jdata, err := ioutil.ReadFile("/data/config.json")
+	if err != nil {
+		fmt.Println("failed read file 'config.json': ", err)
+		Dead()
+	}
+	err = json.Unmarshal(jdata, &ConfigData)
+	if err != nil {
+		fmt.Println("failed parse 'config.json': ", err)
+		Dead()
+	}
+	fmt.Println("Config Loaded.")
+}
+
+func Dead() {
+	fmt.Println("Program Dead By Fatal Error. Please Restart.")
+	RoutineSleep()
+}
+
+func RoutineSleep() {
+	c := make(chan int)
+	<-c
+}
+
+func InitLogger(cfg LumberjackLoggerJSON) *lumberjack.Logger {
+	ljl := &lumberjack.Logger{
+		Filename:   cfg.FileName,
+		MaxSize:    cfg.MaxSize,
+		MaxAge:     cfg.MaxAge,
+		MaxBackups: cfg.MaxBackups,
+		LocalTime:  cfg.UseLocalTime,
+		Compress:   cfg.Compress,
+	}
+	return ljl
+}
+
+func StartFrontend() {
+	if !ConfigData.Frontend.Enable {
+		fmt.Println("Frontend Not Enable.")
+		return
+	}
+	pe, err := pathutils.PathExists(ConfigData.Frontend.EntryPoint)
+	if err != nil || !pe {
+		fmt.Println("frontend entrypoint not exists")
+		return
+	}
+	FrontendShellLogger = InitLogger(ConfigData.Frontend.ShellLog)
+	go func() {
+		runenv := make([]string, 0)
+		err = StartProcess(ConfigData.Frontend.EntryPoint, runenv, FrontendShellLogger)
+		if err != nil {
+			fmt.Println("failed start frontend or frontend exited with error: ", err)
+		}
+	}()
+}
+
+func StartBackend() {
+	if !ConfigData.Backend.Enable {
+		fmt.Println("Backend Not Enable.")
+		return
+	}
+	pe, err := pathutils.PathExists(ConfigData.Backend.EntryPoint)
+	if err != nil || !pe {
+		fmt.Println("backend entrypoint not exists")
+		return
+	}
+	BackendShellLogger = InitLogger(ConfigData.Backend.ShellLog)
+	go func() {
+		runenv := make([]string, 0)
+		err = StartProcess(ConfigData.Backend.EntryPoint, runenv, BackendShellLogger)
+		if err != nil {
+			fmt.Println("failed start backend or backend exited with error: ", err)
+		}
+	}()
+}
+
+func StartProcess(entry string, runenv []string, logger io.Writer) error {
+	cmd := exec.Command(entry)
+	cmd.Env = runenv
+	pipe_r, pipe_w := io.Pipe()
+	cmd.Stdout = pipe_w
+	cmd.Stderr = pipe_w
+	go func() {
+		io.Copy(logger, pipe_r)
+	}()
+	err := cmd.Start()
+	if err != nil {
+		return err
+	}
+	err = cmd.Wait()
+	return err
+}