Files
chat-deploy/pkg/common/config/config.go
kim.dev.6789 e018f742ad
All checks were successful
itom-platform auto build image / build (push) Successful in 3m17s
feat: 支持环境变量控制 Prometheus metrics
2026-01-16 23:21:11 +08:00

256 lines
7.3 KiB
Go
Raw Permalink 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 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,
}
}