core/conf/new.go

94 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package conf
import (
"fmt"
"log"
"os"
"path/filepath"
"strings"
"time"
"math/rand/v2"
"git.apinb.com/bsm-sdk/core/env"
"git.apinb.com/bsm-sdk/core/print"
"git.apinb.com/bsm-sdk/core/vars"
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("BSM_Path", ""))
if rootDir == "" {
rootDir, _ = os.Getwd()
}
// 获取运行模式,如果环境变量未设置,则默认为"dev"
run.Mode = strings.ToLower(env.GetEnvDefault("BSM_Mode", "dev"))
// 获取JWT密钥用于身份验证
run.JwtKey = strings.ToLower(env.GetEnvDefault("BSM_JwtKey", ""))
// 获取许可证路径,如果环境变量未设置,则默认在根目录下的"etc"文件夹
run.LicencePath = strings.ToLower(env.GetEnvDefault("BSM_LicencePath", ""))
if run.LicencePath == "" {
run.LicencePath = filepath.Join(rootDir, "etc")
}
// 如果JWT密钥未设置则记录错误并终止程序
if run.JwtKey == "" {
log.Fatalf("ENV: BSM_JwtKey Not Nil !")
}
// 构造配置文件路径,输出配置文件信息
cfp := fmt.Sprintf("%s_%s.yaml", srvKey, run.Mode)
cfp = filepath.Join(rootDir, "etc", cfp)
print.Info("[BSM - %s] Config File: %s", srvKey, cfp)
// 读取配置文件内容
yamlFile, err := os.ReadFile(cfp)
if err != nil {
log.Fatalf("ERROR: %v", err)
}
// 检查配置文件中是否存在Service和Port字段
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 {
r := rand.New(rand.NewPCG(1000, uint64(time.Now().UnixNano())))
return r.IntN(65535-1024) + 1024 // 生成1024到65535之间的随机端口
}
return port
}