core/conf/new.go

93 lines
2.3 KiB
Go
Raw Normal View History

2025-02-07 13:01:38 +08:00
package conf
import (
"fmt"
"log"
"os"
"path/filepath"
"strings"
"time"
"git.apinb.com/bsm-sdk/core/env"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/vars"
"golang.org/x/exp/rand"
yaml "gopkg.in/yaml.v3"
)
func New(srvKey string, cfg any) *Runtime {
var run Runtime
// 设置服务键
vars.ServiceKey = srvKey
// 获取主机名
vars.HostName, _ = os.Hostname()
// 获取根目录路径,优先使用环境变量设置的路径,如果未设置则使用当前工作目录
rootDir := strings.ToLower(env.GetEnvDefault("CORE_Path", ""))
if rootDir == "" {
rootDir, _ = os.Getwd()
}
// 获取运行模式,如果环境变量未设置,则默认为"dev"
run.Mode = strings.ToLower(env.GetEnvDefault("CORE_Mode", "dev"))
// 获取JWT密钥用于身份验证
run.JwtKey = strings.ToLower(env.GetEnvDefault("CORE_JwtKey", ""))
// 获取许可证路径,如果环境变量未设置,则默认在根目录下的"etc"文件夹
run.LicencePath = strings.ToLower(env.GetEnvDefault("CORE_LicencePath", ""))
if run.LicencePath == "" {
run.LicencePath = filepath.Join(rootDir, "etc")
}
// 如果JWT密钥未设置则记录错误并终止程序
if run.JwtKey == "" {
log.Fatalf("ENV: CORE_JwtKey Not Nil !")
}
// 构造配置文件路径,输出配置文件信息
cfp := fmt.Sprintf("%s_%s.yaml", srvKey, run.Mode)
cfp = filepath.Join(rootDir, "etc", cfp)
print.Info("[CORE - %s] Config File: %s", srvKey, cfp)
// 读取配置文件内容
yamlFile, err := os.ReadFile(cfp)
if err != nil {
log.Fatalf("ERROR: %v", err)
}
// 检查配置文件中是否存在Service和Addr字段
if !strings.Contains(string(yamlFile), "Service:") {
log.Fatalln("ERROR: Service Not Nil", cfp)
}
if !strings.Contains(string(yamlFile), "Port:") {
log.Fatalln("ERROR: Port Not Nil", cfp)
}
// 解析YAML
err = yaml.Unmarshal(yamlFile, cfg)
if err != nil {
log.Fatalf("ERROR: %v", err)
}
return &run
}
func NotNil(values ...string) {
for _, value := range values {
if strings.TrimSpace(value) == "" {
log.Fatalln("ERROR:Must config not nil")
}
}
}
func CheckPort(port int) int {
if port <= 0 || port >= 65535 {
rand.Seed(uint64(time.Now().UnixNano()))
return rand.Intn(65535-1024) + 1024 // 生成1024到65535之间的随机端口
}
return port
}