简化API节点的数据库配置(db.yaml)

This commit is contained in:
刘祥超
2024-05-06 17:31:08 +08:00
parent a8061c9bf4
commit 6361655beb
8 changed files with 159 additions and 80 deletions

View File

@@ -28,56 +28,63 @@ func SharedAPIConfig() (*APIConfig, error) {
}
// 候选文件
localFile := Tea.ConfigFile("api.yaml")
isFromLocal := false
paths := []string{localFile}
homeDir, homeErr := os.UserHomeDir()
if homeErr == nil {
paths = append(paths, homeDir+"/."+teaconst.ProcessName+"/api.yaml")
}
paths = append(paths, "/etc/"+teaconst.ProcessName+"/api.yaml")
// 依次检查文件
var data []byte
var err error
for _, path := range paths {
data, err = os.ReadFile(path)
if err == nil {
if path == localFile {
isFromLocal = true
}
break
var config = &APIConfig{}
{
var localFile = Tea.ConfigFile("api.yaml")
var isFromLocal = false
var paths = []string{localFile}
homeDir, homeErr := os.UserHomeDir()
if homeErr == nil {
paths = append(paths, homeDir+"/."+teaconst.ProcessName+"/api.yaml")
}
}
if err != nil {
return nil, err
}
paths = append(paths, "/etc/"+teaconst.ProcessName+"/api.yaml")
// 解析内容
config := &APIConfig{}
err = yaml.Unmarshal(data, config)
if err != nil {
return nil, err
}
// 依次检查文件
var data []byte
var err error
var firstErr error
for _, path := range paths {
data, err = os.ReadFile(path)
if err != nil {
if firstErr == nil {
firstErr = err
}
} else {
if path == localFile {
isFromLocal = true
}
break
}
}
if firstErr != nil {
return nil, firstErr
}
if !isFromLocal {
// 恢复文件
_ = os.WriteFile(localFile, data, 0666)
// 解析内容
err = yaml.Unmarshal(data, config)
if err != nil {
return nil, err
}
if !isFromLocal {
// 恢复文件
_ = os.WriteFile(localFile, data, 0666)
}
}
// 恢复数据库文件
{
dbConfigFile := Tea.ConfigFile("db.yaml")
var dbConfigFile = Tea.ConfigFile("db.yaml")
_, err := os.Stat(dbConfigFile)
if err != nil {
paths := []string{}
var paths = []string{}
homeDir, homeErr := os.UserHomeDir()
if homeErr == nil {
paths = append(paths, homeDir+"/."+teaconst.ProcessName+"/db.yaml")
}
paths = append(paths, "/etc/"+teaconst.ProcessName+"/db.yaml")
for _, path := range paths {
_, err := os.Stat(path)
_, err = os.Stat(path)
if err == nil {
data, err := os.ReadFile(path)
if err == nil {
@@ -112,9 +119,9 @@ func (this *APIConfig) WriteFile(path string) error {
}
// 生成备份文件
filename := filepath.Base(path)
var filename = filepath.Base(path)
homeDir, _ := os.UserHomeDir()
backupDirs := []string{"/etc/edge-api"}
var backupDirs = []string{"/etc/edge-api"}
if len(homeDir) > 0 {
backupDirs = append(backupDirs, homeDir+"/.edge-api")
}
@@ -135,7 +142,7 @@ func (this *APIConfig) WriteFile(path string) error {
// ResetAPIConfig 重置配置
func ResetAPIConfig() error {
for _, filename := range []string{"api.yaml", "db.yaml"} {
for _, filename := range []string{"api.yaml", "db.yaml", ".db.yaml"} {
// 重置 configs/api.yaml
{
var configFile = Tea.ConfigFile(filename)

View File

@@ -0,0 +1,25 @@
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
package configs
import (
"errors"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
"gopkg.in/yaml.v3"
"os"
)
func LoadDBConfig() (*dbs.Config, error) {
var config = &dbs.Config{}
for _, filename := range []string{".db.yaml", "db.yaml"} {
configData, err := os.ReadFile(Tea.ConfigFile(filename))
if err != nil {
continue
}
err = yaml.Unmarshal(configData, config)
return config, err
}
return nil, errors.New("could not find database config file '.db.yaml' or 'db.yaml'")
}

View File

@@ -0,0 +1,58 @@
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
package configs
import (
"fmt"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
"gopkg.in/yaml.v3"
"net/url"
"os"
)
type SimpleDBConfig struct {
User string `yaml:"user"`
Password string `yaml:"password"`
Database string `yaml:"database"`
Host string `yaml:"host"`
BoolFields []string `yaml:"boolFields,omitempty"`
}
func ParseSimpleDBConfig(data []byte) (*SimpleDBConfig, error) {
var config = &SimpleDBConfig{}
err := yaml.Unmarshal(data, config)
return config, err
}
func (this *SimpleDBConfig) GenerateOldConfig() error {
var dbConfig = &dbs.DBConfig{
Driver: "mysql",
Dsn: url.QueryEscape(this.User) + ":" + url.QueryEscape(this.Password) + "@tcp(" + this.Host + ")/" + url.PathEscape(this.Database) + "?charset=utf8mb4&timeout=30s&multiStatements=true",
Prefix: "edge",
}
dbConfig.Models.Package = "internal/db/models"
var config = &dbs.Config{
DBs: map[string]*dbs.DBConfig{
Tea.Env: dbConfig,
},
}
config.Default.DB = Tea.Env
config.Fields = map[string][]string{
"bool": this.BoolFields,
}
oldConfigYAML, encodeErr := yaml.Marshal(config)
if encodeErr != nil {
return encodeErr
}
var targetFile = Tea.ConfigFile(".db.yaml")
err := os.WriteFile(targetFile, oldConfigYAML, 0666)
if err != nil {
return fmt.Errorf("create database config file failed: %w", err)
}
return nil
}