From 5d449400da8ceff941aea3b0a445a7b770b6520f Mon Sep 17 00:00:00 2001 From: icey-yu <1186114839@qq.com> Date: Tue, 24 Dec 2024 10:58:45 +0800 Subject: [PATCH] feat: config --- internal/api/config_manager.go | 7 ++++++- internal/api/init.go | 9 ++++++--- internal/api/router.go | 5 +++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/internal/api/config_manager.go b/internal/api/config_manager.go index c7fc758cb..e9e0b4d18 100644 --- a/internal/api/config_manager.go +++ b/internal/api/config_manager.go @@ -24,10 +24,11 @@ type ConfigManager struct { runtimeEnv string } -func NewConfigManager(IMAdminUserID []string, cfg *config.AllConfig, configPath string, runtimeEnv string) *ConfigManager { +func NewConfigManager(IMAdminUserID []string, cfg *config.AllConfig, client *clientv3.Client, configPath string, runtimeEnv string) *ConfigManager { return &ConfigManager{ imAdminUserID: IMAdminUserID, config: cfg, + client: client, configPath: configPath, runtimeEnv: runtimeEnv, } @@ -69,6 +70,10 @@ func (cm *ConfigManager) GetConfigList(c *gin.Context) { } func (cm *ConfigManager) SetConfig(c *gin.Context) { + if cm.config.Discovery.Enable != config.ETCD { + apiresp.GinError(c, errs.New("only etcd support set config").Wrap()) + return + } var req apistruct.SetConfigReq if err := c.BindJSON(&req); err != nil { apiresp.GinError(c, errs.ErrArgs.WithDetail(err.Error()).Wrap()) diff --git a/internal/api/init.go b/internal/api/init.go index 6414513de..4ceabda90 100644 --- a/internal/api/init.go +++ b/internal/api/init.go @@ -40,6 +40,7 @@ import ( "github.com/openimsdk/tools/utils/jsonutil" "github.com/openimsdk/tools/utils/network" "github.com/openimsdk/tools/utils/runtimeenv" + clientv3 "go.etcd.io/etcd/client/v3" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ) @@ -94,7 +95,11 @@ func Start(ctx context.Context, index int, config *Config) error { return errs.New("only etcd support autoSetPorts", "RegisterName", "api").Wrap() } - router := newGinRouter(client, config) + var etcdClient *clientv3.Client + if config.Discovery.Enable == conf.ETCD { + etcdClient = client.(*etcd.SvcDiscoveryRegistryImpl).GetClient() + } + router := newGinRouter(client, config, etcdClient) if config.API.Prometheus.Enable { var ( listener net.Listener @@ -106,8 +111,6 @@ func Start(ctx context.Context, index int, config *Config) error { return err } - etcdClient := client.(*etcd.SvcDiscoveryRegistryImpl).GetClient() - _, err = etcdClient.Put(ctx, prommetrics.BuildDiscoveryKey(prommetrics.APIKeyName), jsonutil.StructToJsonString(prommetrics.BuildDefaultTarget(registerIP, prometheusPort))) if err != nil { return errs.WrapMsg(err, "etcd put err") diff --git a/internal/api/router.go b/internal/api/router.go index db8e298da..e524901bd 100644 --- a/internal/api/router.go +++ b/internal/api/router.go @@ -7,6 +7,7 @@ import ( "github.com/openimsdk/open-im-server/v3/internal/api/jssdk" pbAuth "github.com/openimsdk/protocol/auth" + clientv3 "go.etcd.io/etcd/client/v3" "github.com/gin-contrib/gzip" @@ -47,7 +48,7 @@ func prommetricsGin() gin.HandlerFunc { } } -func newGinRouter(disCov discovery.SvcDiscoveryRegistry, config *Config) *gin.Engine { +func newGinRouter(disCov discovery.SvcDiscoveryRegistry, config *Config, client *clientv3.Client) *gin.Engine { disCov.AddOption(mw.GrpcClient(), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, "round_robin"))) gin.SetMode(gin.ReleaseMode) @@ -259,7 +260,7 @@ func newGinRouter(disCov discovery.SvcDiscoveryRegistry, config *Config) *gin.En proDiscoveryGroup.GET("/msg_gateway", pd.MessageGateway) proDiscoveryGroup.GET("/msg_transfer", pd.MessageTransfer) - cm := NewConfigManager(config.Share.IMAdminUserID, config.AllConfig, config.ConfigPath, config.RuntimeEnv) + cm := NewConfigManager(config.Share.IMAdminUserID, config.AllConfig, client, config.ConfigPath, config.RuntimeEnv) configGroup := r.Group("/config", cm.CheckAdmin) configGroup.POST("/get_config_list", cm.GetConfigList) configGroup.POST("/get_config", cm.GetConfig)