2023-06-04 22:54:54 +08:00

92 lines
2.5 KiB
Go

package config
import (
"ai-gateway/common/utils"
"bytes"
"code.freebrio.com/fb-go/lib/fbl"
"embed"
"fmt"
"github.com/spf13/viper"
_ "embed"
)
// FbConsul consul配置
type FbConsul struct {
Address string `mapstructure:"address" json:"address" yaml:"address"`
Datacenter string `mapstructure:"datacenter" json:"datacenter" yaml:"datacenter"`
Token string `mapstructure:"token" json:"token" yaml:"token"`
}
// Rpc rpc配置
type Rpc struct {
ApiGolangAddress string `mapstructure:"api-golang" json:"api-golang" yaml:"api-golang"`
WssAddress string `mapstructure:"wss" json:"wss" yaml:"wss"`
}
// Mysql mysql配置
type Mysql struct {
Dsn string `mapstructure:"dsn" json:"dsn" yaml:"dsn"`
MaxIdleConn int `mapstructure:"maxIdleConn" json:"maxIdleConn" yaml:"maxIdleConn"`
MaxOpenConn int `mapstructure:"maxOpenConn" json:"maxOpenConn" yaml:"maxOpenConn"`
ConnMaxLifetime int `mapstructure:"connMaxLifetime" json:"connMaxLifetime" yaml:"connMaxLifetime"`
}
// Redis redis配置
type Redis struct {
DB int `mapstructure:"db" json:"db" yaml:"db"` // redis的哪个数据库
Addr string `mapstructure:"addr" json:"addr" yaml:"addr"` // 服务器地址:端口
Password string `mapstructure:"password" json:"password" yaml:"password"` // 密码
ReadTimeOut int64 `mapstructure:"readTimeout" json:"readTimeout" yaml:"readTimeout"`
WriteTimeout int64 `mapstructure:"writeTimeout" json:"writeTimeout" yaml:"writeTimeout"`
}
type Conf struct {
FbConsul *FbConsul `mapstructure:"fbConsul" json:"fbConsul" yaml:"fbConsul"` // fbConsul 配置
Rpc *Rpc `mapstructure:"rpc" json:"rpc" yaml:"rpc"` // rpc 配置
Mysql *Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"` // mysql 配置
Redis *Redis `mapstructure:"redis" json:"redis" yaml:"redis"` // redis 配置
}
var Instance = initCf()
//go:embed *.yaml
var multiCf embed.FS
func initCf() *Conf {
//获取环境变量
env := utils.FillValOfKey("API_ENV", "dev")
//读取配置文件
data, err := multiCf.ReadFile("config." + env + ".yaml")
if err != nil {
fmt.Println(err)
}
//读取配置文件
v := viper.New()
v.SetConfigType("yaml")
err = v.ReadConfig(bytes.NewBuffer(data))
//err = v.ReadInConfig()
if err != nil {
panic(err)
}
//解析配置文件
var cf *Conf
err = v.Unmarshal(&cf)
if err != nil {
panic(err)
}
//根据配置参数更新 consul token
cf.FbConsul.Token = utils.FillValOfKey("CONSUL_HTTP_TOKEN", cf.FbConsul.Token)
fbl.Log().Sugar().Infof("start in %s", env)
return cf
}