mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	初步实现安装界面
This commit is contained in:
		@@ -1,18 +1,47 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/apps"
 | 
			
		||||
	teaconst "github.com/TeaOSLab/EdgeAPI/internal/const"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/nodes"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/setup"
 | 
			
		||||
	_ "github.com/TeaOSLab/EdgeAPI/internal/tasks"
 | 
			
		||||
	"github.com/iwind/TeaGo/Tea"
 | 
			
		||||
	_ "github.com/iwind/TeaGo/bootstrap"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
	"log"
 | 
			
		||||
	"os"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	if !Tea.IsTesting() {
 | 
			
		||||
		Tea.Env = "prod"
 | 
			
		||||
	}
 | 
			
		||||
	app := apps.NewAppCmd()
 | 
			
		||||
	app.Version(teaconst.Version)
 | 
			
		||||
	app.Product(teaconst.ProductName)
 | 
			
		||||
	app.Usage(teaconst.ProcessName + " [start|stop|restart]")
 | 
			
		||||
	app.Usage(teaconst.ProcessName + " [start|stop|restart|setup]")
 | 
			
		||||
	app.On("setup", func() {
 | 
			
		||||
		setupCmd := setup.NewSetupFromCmd()
 | 
			
		||||
		err := setupCmd.Run()
 | 
			
		||||
		result := maps.Map{}
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			result["isOk"] = false
 | 
			
		||||
			result["error"] = err.Error()
 | 
			
		||||
		} else {
 | 
			
		||||
			result["isOk"] = true
 | 
			
		||||
			result["adminNodeId"] = setupCmd.AdminNodeId
 | 
			
		||||
			result["adminNodeSecret"] = setupCmd.AdminNodeSecret
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		resultJSON, err := json.Marshal(result)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatal(err.Error())
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		_, _ = os.Stdout.Write(resultJSON)
 | 
			
		||||
	})
 | 
			
		||||
	app.Run(func() {
 | 
			
		||||
		nodes.NewAPINode().Start()
 | 
			
		||||
	})
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										103
									
								
								cmd/sql-generate/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								cmd/sql-generate/main.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,103 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"flag"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/iwind/TeaGo/Tea"
 | 
			
		||||
	_ "github.com/iwind/TeaGo/bootstrap"
 | 
			
		||||
	"github.com/iwind/TeaGo/logs"
 | 
			
		||||
	"go/format"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	var dir string
 | 
			
		||||
	flag.StringVar(&dir, "dir", "", "SQL dir")
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
 | 
			
		||||
	if len(dir) == 0 {
 | 
			
		||||
		fmt.Println("[ERROR]'dir' should not be empty")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sourceDir := filepath.Dir(Tea.Root)
 | 
			
		||||
 | 
			
		||||
	// full
 | 
			
		||||
	fullSQLFile := dir + "/full.sql"
 | 
			
		||||
	_, err := os.Stat(fullSQLFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if os.IsNotExist(err) {
 | 
			
		||||
			fmt.Println("[ERROR]'full.sql' not found")
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		fmt.Println("[ERROR]checking 'full.sql' failed: " + err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	matches, err := filepath.Glob(dir + "/*.sql")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println("[ERROR]" + err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	versionsCode := "// generated\npackage sqls\n\nvar SQLVersions = []map[string]string{"
 | 
			
		||||
 | 
			
		||||
	for _, match := range matches {
 | 
			
		||||
		baseName := filepath.Base(match)
 | 
			
		||||
		logs.Println("reading " + baseName + " ...")
 | 
			
		||||
 | 
			
		||||
		data, err := ioutil.ReadFile(match)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Println("[ERROR]" + err.Error())
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		version := baseName[:strings.LastIndex(baseName, ".")]
 | 
			
		||||
		versionsCode += "\n" + `{ "version": "` + version + `", "sql": SQL_` + version + ` },`
 | 
			
		||||
 | 
			
		||||
		code := "// generated\npackage sqls \n\n"
 | 
			
		||||
		lines := bytes.Split(data, []byte{'\n'})
 | 
			
		||||
		for index, line := range lines {
 | 
			
		||||
			if index == 0 {
 | 
			
		||||
				code += "var SQL_" + version + " = "
 | 
			
		||||
			}
 | 
			
		||||
			code += `"` + string(line) + `\n"`
 | 
			
		||||
			if index != len(lines)-1 {
 | 
			
		||||
				code += "+"
 | 
			
		||||
			}
 | 
			
		||||
			code += "\n"
 | 
			
		||||
		}
 | 
			
		||||
		code += "\n"
 | 
			
		||||
 | 
			
		||||
		codeBytes, err := format.Source([]byte(code))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Println("[ERROR]" + err.Error())
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		fmt.Println("writing sql_" + version + ".go ...")
 | 
			
		||||
		err = ioutil.WriteFile(sourceDir+"/internal/setup/sqls/sql_"+version+".go", codeBytes, 0666)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			fmt.Println("[ERROR]" + err.Error())
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		fmt.Println("ok")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	versionsCode += "\n}"
 | 
			
		||||
	versionsCodeBytes, err := format.Source([]byte(versionsCode))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println("[ERROR]" + err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Println("writing sqls.go ...")
 | 
			
		||||
	err = ioutil.WriteFile(sourceDir+"/internal/setup/sqls/sqls.go", versionsCodeBytes, 0666)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println("[ERROR]" + err.Error())
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Println("ok")
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user