All checks were successful
itom-platform auto build image / build (push) Successful in 3m17s
256 lines
7.3 KiB
Go
256 lines
7.3 KiB
Go
package config
|
||
|
||
import (
|
||
_ "embed"
|
||
|
||
"github.com/openimsdk/tools/db/mongoutil"
|
||
"github.com/openimsdk/tools/db/redisutil"
|
||
)
|
||
|
||
var (
|
||
//go:embed version
|
||
Version string
|
||
//go:embed template.xlsx
|
||
ImportTemplate []byte
|
||
)
|
||
|
||
type Share struct {
|
||
OpenIM struct {
|
||
ApiURL string `mapstructure:"apiURL"`
|
||
Secret string `mapstructure:"secret"`
|
||
AdminUserID string `mapstructure:"adminUserID"`
|
||
TokenRefreshInterval int `mapstructure:"tokenRefreshInterval"`
|
||
} `mapstructure:"openIM"`
|
||
ChatAdmin []string `mapstructure:"chatAdmin"`
|
||
ProxyHeader string `mapstructure:"proxyHeader"`
|
||
}
|
||
|
||
type RpcService struct {
|
||
Chat string `mapstructure:"chat"`
|
||
Admin string `mapstructure:"admin"`
|
||
Bot string `mapstructure:"bot"`
|
||
}
|
||
|
||
func (r *RpcService) GetServiceNames() []string {
|
||
return []string{
|
||
r.Chat,
|
||
r.Admin,
|
||
}
|
||
}
|
||
|
||
type API struct {
|
||
Api struct {
|
||
ListenIP string `mapstructure:"listenIP"`
|
||
Ports []int `mapstructure:"ports"`
|
||
} `mapstructure:"api"`
|
||
Prometheus Prometheus `mapstructure:"prometheus"` // 可选的 Prometheus 配置
|
||
}
|
||
|
||
type APIBot struct {
|
||
Api struct {
|
||
ListenIP string `mapstructure:"listenIP"`
|
||
Ports []int `mapstructure:"ports"`
|
||
} `mapstructure:"api"`
|
||
Prometheus Prometheus `mapstructure:"prometheus"` // 可选的 Prometheus 配置
|
||
}
|
||
|
||
type Mongo struct {
|
||
URI string `mapstructure:"uri"`
|
||
Address []string `mapstructure:"address"`
|
||
Database string `mapstructure:"database"`
|
||
Username string `mapstructure:"username"`
|
||
Password string `mapstructure:"password"`
|
||
AuthSource string `mapstructure:"authSource"`
|
||
MaxPoolSize int `mapstructure:"maxPoolSize"`
|
||
MaxRetry int `mapstructure:"maxRetry"`
|
||
}
|
||
|
||
func (m *Mongo) Build() *mongoutil.Config {
|
||
return &mongoutil.Config{
|
||
Uri: m.URI,
|
||
Address: m.Address,
|
||
Database: m.Database,
|
||
Username: m.Username,
|
||
Password: m.Password,
|
||
AuthSource: m.AuthSource,
|
||
MaxPoolSize: m.MaxPoolSize,
|
||
MaxRetry: m.MaxRetry,
|
||
}
|
||
}
|
||
|
||
type Redis struct {
|
||
Address []string `mapstructure:"address"`
|
||
Username string `mapstructure:"username"`
|
||
Password string `mapstructure:"password"`
|
||
EnablePipeline bool `mapstructure:"enablePipeline"`
|
||
ClusterMode bool `mapstructure:"clusterMode"`
|
||
DB int `mapstructure:"db"`
|
||
MaxRetry int `mapstructure:"MaxRetry"`
|
||
}
|
||
|
||
func (r *Redis) Build() *redisutil.Config {
|
||
return &redisutil.Config{
|
||
ClusterMode: r.ClusterMode,
|
||
Address: r.Address,
|
||
Username: r.Username,
|
||
Password: r.Password,
|
||
DB: r.DB,
|
||
MaxRetry: r.MaxRetry,
|
||
}
|
||
}
|
||
|
||
type Discovery struct {
|
||
Enable string `mapstructure:"enable"`
|
||
Etcd Etcd `mapstructure:"etcd"`
|
||
Kubernetes Kubernetes `mapstructure:"kubernetes"`
|
||
RpcService RpcService `mapstructure:"rpcService"`
|
||
}
|
||
|
||
// Prometheus 配置(可选,用于暴露 /metrics 端点)
|
||
type Prometheus struct {
|
||
Enable bool `mapstructure:"enable"` // 是否启用 Prometheus metrics,默认 false
|
||
Path string `mapstructure:"path"` // metrics 路径,默认 /metrics
|
||
}
|
||
|
||
type Kubernetes struct {
|
||
Namespace string `mapstructure:"namespace"`
|
||
}
|
||
|
||
type Etcd struct {
|
||
RootDirectory string `mapstructure:"rootDirectory"`
|
||
Address []string `mapstructure:"address"`
|
||
Username string `mapstructure:"username"`
|
||
Password string `mapstructure:"password"`
|
||
}
|
||
|
||
type Chat struct {
|
||
RPC struct {
|
||
RegisterIP string `mapstructure:"registerIP"`
|
||
ListenIP string `mapstructure:"listenIP"`
|
||
Ports []int `mapstructure:"ports"`
|
||
} `mapstructure:"rpc"`
|
||
VerifyCode VerifyCode `mapstructure:"verifyCode"`
|
||
LiveKit struct {
|
||
URL string `mapstructure:"url"`
|
||
Key string `mapstructure:"key"`
|
||
Secret string `mapstructure:"secret"`
|
||
} `mapstructure:"liveKit"`
|
||
AllowRegister bool `mapstructure:"allowRegister"`
|
||
}
|
||
|
||
type Bot struct {
|
||
RPC struct {
|
||
RegisterIP string `mapstructure:"registerIP"`
|
||
ListenIP string `mapstructure:"listenIP"`
|
||
Ports []int `mapstructure:"ports"`
|
||
} `mapstructure:"rpc"`
|
||
Timeout int `mapstructure:"timeout"`
|
||
}
|
||
type VerifyCode struct {
|
||
ValidTime int `mapstructure:"validTime"`
|
||
ValidCount int `mapstructure:"validCount"`
|
||
UintTime int `mapstructure:"uintTime"`
|
||
MaxCount int `mapstructure:"maxCount"`
|
||
SuperCode string `mapstructure:"superCode"`
|
||
Len int `mapstructure:"len"`
|
||
Phone struct {
|
||
Use string `mapstructure:"use"`
|
||
Ali struct {
|
||
Endpoint string `mapstructure:"endpoint"`
|
||
AccessKeyID string `mapstructure:"accessKeyId"`
|
||
AccessKeySecret string `mapstructure:"accessKeySecret"`
|
||
SignName string `mapstructure:"signName"`
|
||
VerificationCodeTemplateCode string `mapstructure:"verificationCodeTemplateCode"`
|
||
} `mapstructure:"ali"`
|
||
Bao struct {
|
||
Endpoint string `mapstructure:"endpoint"`
|
||
AccessKeyID string `mapstructure:"accessKeyId"`
|
||
AccessKeySecret string `mapstructure:"accessKeySecret"`
|
||
SignName string `mapstructure:"signName"`
|
||
VerificationCodeTemplateCode string `mapstructure:"verificationCodeTemplateCode"`
|
||
} `mapstructure:"bao"`
|
||
} `mapstructure:"phone"`
|
||
Mail struct {
|
||
Use string `mapstructure:"use"`
|
||
Title string `mapstructure:"title"`
|
||
SenderMail string `mapstructure:"senderMail"`
|
||
SenderAuthorizationCode string `mapstructure:"senderAuthorizationCode"`
|
||
SMTPAddr string `mapstructure:"smtpAddr"`
|
||
SMTPPort int `mapstructure:"smtpPort"`
|
||
} `mapstructure:"mail"`
|
||
}
|
||
|
||
type Admin struct {
|
||
RPC struct {
|
||
RegisterIP string `mapstructure:"registerIP"`
|
||
ListenIP string `mapstructure:"listenIP"`
|
||
Ports []int `mapstructure:"ports"`
|
||
} `mapstructure:"rpc"`
|
||
TokenPolicy struct {
|
||
Expire int `mapstructure:"expire"`
|
||
} `mapstructure:"tokenPolicy"`
|
||
Secret string `mapstructure:"secret"`
|
||
}
|
||
|
||
type Log struct {
|
||
StorageLocation string `mapstructure:"storageLocation"`
|
||
RotationTime uint `mapstructure:"rotationTime"`
|
||
RemainRotationCount uint `mapstructure:"remainRotationCount"`
|
||
RemainLogLevel int `mapstructure:"remainLogLevel"`
|
||
IsStdout bool `mapstructure:"isStdout"`
|
||
IsJson bool `mapstructure:"isJson"`
|
||
IsSimplify bool `mapstructure:"isSimplify"`
|
||
WithStack bool `mapstructure:"withStack"`
|
||
}
|
||
|
||
type AllConfig struct {
|
||
AdminAPI API
|
||
ChatAPI API
|
||
Admin Admin
|
||
Chat Chat
|
||
Discovery Discovery
|
||
Log Log
|
||
Mongo Mongo
|
||
Redis Redis
|
||
Share Share
|
||
}
|
||
|
||
func (a *AllConfig) Name2Config(name string) any {
|
||
switch name {
|
||
case ChatAPIAdminCfgFileName:
|
||
return a.AdminAPI
|
||
case ChatAPIChatCfgFileName:
|
||
return a.ChatAPI
|
||
case ChatRPCAdminCfgFileName:
|
||
return a.Admin
|
||
case ChatRPCChatCfgFileName:
|
||
return a.Chat
|
||
case DiscoveryConfigFileName:
|
||
return a.Discovery
|
||
case LogConfigFileName:
|
||
return a.Log
|
||
case MongodbConfigFileName:
|
||
return a.Mongo
|
||
case RedisConfigFileName:
|
||
return a.Redis
|
||
case ShareFileName:
|
||
return a.Share
|
||
default:
|
||
return nil
|
||
}
|
||
}
|
||
|
||
func (a *AllConfig) GetConfigNames() []string {
|
||
return []string{
|
||
ShareFileName,
|
||
RedisConfigFileName,
|
||
DiscoveryConfigFileName,
|
||
MongodbConfigFileName,
|
||
LogConfigFileName,
|
||
ChatAPIAdminCfgFileName,
|
||
ChatAPIChatCfgFileName,
|
||
ChatRPCAdminCfgFileName,
|
||
ChatRPCChatCfgFileName,
|
||
}
|
||
}
|