EasyAudioEncode/internal/conf/config.go
2025-12-25 17:01:46 +08:00

85 lines
2.8 KiB
Go

package conf
import "time"
type Bootstrap struct {
Debug bool `toml:"-" json:"-"`
BuildVersion string `toml:"-" json:"-"`
ConfigDir string `toml:"-" json:"-"`
ConfigPath string `toml:"-" json:"-"`
Server Server // 服务器
Data Data // 数据
Log Log // 日志
Plugin Plugin
}
type Plugin struct {
HttpAPI string `json:"http_api" comment:"http 地址"`
// Enable bool `json:"enable" comment:"是否开启"`
GrpcPort int `json:"port" comment:"通信端口"`
AllDebug bool `json:"all_debug" comment:"是否开启"`
}
type Server struct {
HTTP ServerHTTP `comment:"对外提供的服务,建议由 nginx 代理"` // HTTP服务器
}
type ServerHTTP struct {
Port int `comment:"http 端口"` // 服务器端口号
Timeout Duration `comment:"请求超时时间"` // 请求超时时间
JwtSecret string `comment:"jwt 秘钥,空串时,每次启动程序将随机赋值"` // JWT密钥
PProf ServerPPROF // Pprof配置
}
// ServerPPROF 结构体,包含 Enabled 和 AccessIps 两个字段
type ServerPPROF struct {
Enabled bool `comment:"是否启用 pprof, 建议设置为 true"` // 是否启用
AccessIps []string `comment:"访问白名单" json:"access_ips"` // 允许访问的IP地址列表
}
// Data 结构体,包含 Database 和 Redis 两个字段
type Data struct {
// Database 数据库
Database Database `comment:"数据库支持 sqlite 和 postgres 两种,使用 sqlite 时 dsn 应当填写文件存储路径"`
// Redis Redis数据库
// Redis DataRedis
}
// Database 结构体,包含 Dsn、MaxIdleConns、MaxOpenConns、ConnMaxLifetime 和 SlowThreshold 五个字段
type Database struct {
Dsn string // 数据源名称
MaxIdleConns int32 // 最大空闲连接数
MaxOpenConns int32 // 最大打开连接数
ConnMaxLifetime Duration // 连接最大生命周期
SlowThreshold Duration // 慢查询阈值
}
// Log 结构体,包含 Dir、Level、MaxAge、RotationTime 和 RotationSize 五个字段
type Log struct {
Dir string `comment:"日志存储目录,不能使用特殊符号"`
Level string `comment:"记录级别 debug/info/warn/error"`
MaxAge Duration `comment:"保留日志多久,超过时间自动删除"`
RotationTime Duration `comment:"多久时间,分割一个新的日志文件"`
RotationSize int64 `comment:"多大文件,分割一个新的日志文件(MB)"`
}
type Duration time.Duration
func (d *Duration) UnmarshalText(b []byte) error {
x, err := time.ParseDuration(string(b))
if err != nil {
return err
}
*d = Duration(x)
return nil
}
func (d Duration) MarshalText() ([]byte, error) {
return []byte(d.Duration().String()), nil
}
func (d *Duration) Duration() time.Duration {
return time.Duration(*d)
}