From 3fcc2c267815a107cd1e62cc74df50355bea7d02 Mon Sep 17 00:00:00 2001 From: skiffer-git <44203734@qq.com> Date: Sat, 3 Sep 2022 15:48:45 +0800 Subject: [PATCH 01/10] cache for GetDefaultGatewayConn4Unique --- pkg/grpc-etcdv3/getcdv3/resolver.go | 33 +++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/pkg/grpc-etcdv3/getcdv3/resolver.go b/pkg/grpc-etcdv3/getcdv3/resolver.go index e77bb626b..878cabc64 100644 --- a/pkg/grpc-etcdv3/getcdv3/resolver.go +++ b/pkg/grpc-etcdv3/getcdv3/resolver.go @@ -6,7 +6,6 @@ import ( "Open_IM/pkg/utils" "context" "fmt" - "go.etcd.io/etcd/api/v3/mvccpb" clientv3 "go.etcd.io/etcd/client/v3" @@ -277,8 +276,38 @@ func (r *Resolver) watch(prefix string, addrList []resolver.Address) { } } +var Conn4UniqueList []*grpc.ClientConn +var Conn4UniqueListMtx sync.RWMutex +var IsUpdateStart bool +var IsUpdateStartMtx sync.RWMutex + func GetDefaultGatewayConn4Unique(schema, etcdaddr, operationID string) []*grpc.ClientConn { - grpcConns := getConn4Unique(schema, etcdaddr, config.Config.RpcRegisterName.OpenImRelayName) + IsUpdateStartMtx.Lock() + if IsUpdateStart == false { + Conn4UniqueList = getConn4Unique(schema, etcdaddr, config.Config.RpcRegisterName.OpenImRelayName) + go func() { + for { + select { + case <-time.After(time.Second * time.Duration(30)): + Conn4UniqueListMtx.Lock() + Conn4UniqueList = getConn4Unique(schema, etcdaddr, config.Config.RpcRegisterName.OpenImRelayName) + Conn4UniqueListMtx.Unlock() + } + } + }() + } + IsUpdateStart = true + IsUpdateStartMtx.Unlock() + + Conn4UniqueListMtx.Lock() + var clientConnList []*grpc.ClientConn + for _, v := range Conn4UniqueList { + clientConnList = append(clientConnList, v) + } + Conn4UniqueListMtx.Unlock() + + //grpcConns := getConn4Unique(schema, etcdaddr, config.Config.RpcRegisterName.OpenImRelayName) + grpcConns := clientConnList if len(grpcConns) > 0 { return grpcConns } From 6754fdb580907d96b55f7c0d01f45d6692027d93 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 7 Sep 2022 18:20:41 +0800 Subject: [PATCH 02/10] getui --- config/config.yaml | 2 ++ internal/push/getui/push.go | 16 ++++++++++------ pkg/common/config/config.go | 2 ++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/config/config.yaml b/config/config.yaml index 6e10a65b2..c738166fd 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -221,6 +221,8 @@ push: appKey: "" intent: "" enable: false + channelID: "" + channelName: "" fcm: #firebase cloud message 消息推送 serviceAccount: "openim-5c6c0-firebase-adminsdk-ppwol-8765884a78.json" #帐号文件,此处需要改修配置,并且这个文件放在 config目录下 enable: false diff --git a/internal/push/getui/push.go b/internal/push/getui/push.go index 7f7012bb2..27c107b8c 100644 --- a/internal/push/getui/push.go +++ b/internal/push/getui/push.go @@ -88,9 +88,11 @@ type Android struct { } type Notification struct { - Title string `json:"title"` - Body string `json:"body"` - ClickType string `json:"click_type"` + Title string `json:"title"` + Body string `json:"body"` + ChannelID string `json:"channelID"` + ChannelName string `json:"ChannelName"` + ClickType string `json:"click_type"` } type Options struct { @@ -135,9 +137,11 @@ func (g *Getui) Push(userIDList []string, alert, detailContent, operationID stri }{Alias: []string{userIDList[0]}}, } pushReq.PushMessage.Notification = Notification{ - Title: alert, - Body: alert, - ClickType: "startapp", + Title: alert, + Body: alert, + ClickType: "startapp", + ChannelID: config.Config.Push.Getui.ChannelID, + ChannelName: config.Config.Push.Getui.ChannelName, } pushReq.PushChannel.Ios.Aps.Sound = "default" pushReq.PushChannel.Ios.Aps.Alert = Alert{ diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index d5450aa11..6440467ba 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -199,6 +199,8 @@ type config struct { Enable bool `yaml:"enable"` Intent string `yaml:"intent"` MasterSecret string `yaml:"masterSecret"` + ChannelID string `yaml:"channelID"` + ChannelName string `yaml:"channelName"` } Fcm struct { ServiceAccount string `yaml:"serviceAccount"` From 213106148227a924a42e00baabdef3be8cae8871 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 9 Sep 2022 18:30:49 +0800 Subject: [PATCH 03/10] v2.3.2 --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 115c49f9e..0ccdef7d7 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -126,7 +126,7 @@ services: # STORE_PORT: 3306 open_im_server: - image: openim/open_im_server:v2.3.1 + image: openim/open_im_server:v2.3.2 container_name: open_im_server volumes: - ./logs:/Open-IM-Server/logs From 081c47aba9e351b3f52c0477d0812908f167212b Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Sat, 10 Sep 2022 21:48:29 +0800 Subject: [PATCH 04/10] docker compose file update --- docker-compose.yaml | 70 ++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 81697ebb6..89aeec9cf 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -137,38 +137,38 @@ services: max-size: "1g" max-file: "2" - prometheus: - image: prom/prometheus - volumes: - - ./docker-compose_cfg/prometheus-compose.yml:/etc/prometheus/prometheus.yml - # - ./components/prometheus_data:/prometheus - container_name: prometheus - ports: - - 9091:9091 - depends_on: - - open_im_server - command: --web.listen-address=:9091 --config.file="/etc/prometheus/prometheus.yml" - network_mode: "host" - - grafana: - image: grafana/grafana - volumes: - # - ./grafana/dashboards/dashboard.json:/var/lib/grafana/dashboards/dashboard.json - # - ./grafana/provisioning/dashboard.yaml:/etc/grafana/provisioning/dashboards/dashboard.yaml - - ./docker-compose_cfg/datasource-compose.yaml:/etc/grafana/provisioning/datasources/datasource.yaml - - ./docker-compose_cfg/grafana.ini:/etc/grafana/grafana.ini - - ./docker-compose_cfg/node-exporter-full_rev1.json:/var/lib/grafana/dashboards/node-exporter-full_rev1.json - container_name: grafana - ports: - - 10007:10007 - depends_on: - - prometheus - network_mode: "host" - - node-exporter: - image: quay.io/prometheus/node-exporter - container_name: node-exporter - restart: always - ports: - - "9100:9100" - # command: --collector.ENTER-THE-NAME-OF-COLLECTOR +# prometheus: +# image: prom/prometheus +# volumes: +# - ./docker-compose_cfg/prometheus-compose.yml:/etc/prometheus/prometheus.yml +# # - ./components/prometheus_data:/prometheus +# container_name: prometheus +# ports: +# - 9091:9091 +# depends_on: +# - open_im_server +# command: --web.listen-address=:9091 --config.file="/etc/prometheus/prometheus.yml" +# network_mode: "host" +# +# grafana: +# image: grafana/grafana +# volumes: +# # - ./grafana/dashboards/dashboard.json:/var/lib/grafana/dashboards/dashboard.json +# # - ./grafana/provisioning/dashboard.yaml:/etc/grafana/provisioning/dashboards/dashboard.yaml +# - ./docker-compose_cfg/datasource-compose.yaml:/etc/grafana/provisioning/datasources/datasource.yaml +# - ./docker-compose_cfg/grafana.ini:/etc/grafana/grafana.ini +# - ./docker-compose_cfg/node-exporter-full_rev1.json:/var/lib/grafana/dashboards/node-exporter-full_rev1.json +# container_name: grafana +# ports: +# - 10007:10007 +# depends_on: +# - prometheus +# network_mode: "host" +# +# node-exporter: +# image: quay.io/prometheus/node-exporter +# container_name: node-exporter +# restart: always +# ports: +# - "9100:9100" +# # command: --collector.ENTER-THE-NAME-OF-COLLECTOR From 1c53c90ab5c7da9bcca3ed0854222de96f0b87d4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 14 Sep 2022 10:29:49 +0800 Subject: [PATCH 05/10] hash --- pkg/common/db/rocks_cache/rocks_cache.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/common/db/rocks_cache/rocks_cache.go b/pkg/common/db/rocks_cache/rocks_cache.go index d698029b6..440ae40c5 100644 --- a/pkg/common/db/rocks_cache/rocks_cache.go +++ b/pkg/common/db/rocks_cache/rocks_cache.go @@ -394,6 +394,13 @@ func DelJoinedSuperGroupIDListFromCache(userID string) error { func GetGroupMemberListHashFromCache(groupID string) (uint64, error) { generateHash := func() (string, error) { + groupInfo, err := GetGroupInfoFromCache(groupID) + if err != nil { + return "0", utils.Wrap(err, "GetGroupInfoFromCache failed") + } + if groupInfo.Status == constant.GroupStatusDismissed { + return "0", nil + } groupMemberIDList, err := GetGroupMemberIDListFromCache(groupID) if err != nil { return "", utils.Wrap(err, "GetGroupMemberIDListFromCache failed") @@ -408,6 +415,9 @@ func GetGroupMemberListHashFromCache(groupID string) (uint64, error) { return strconv.Itoa(int(bi.Uint64())), nil } hashCode, err := db.DB.Rc.Fetch(groupMemberListHashCache+groupID, time.Second*30*60, generateHash) + if err != nil { + return 0, utils.Wrap(err, "fetch failed") + } hashCodeUint64, err := strconv.Atoi(hashCode) return uint64(hashCodeUint64), err } From 19f725965d0b17c9f0feed2cdc13084fdd795aa6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 14 Sep 2022 18:30:52 +0800 Subject: [PATCH 06/10] private message cache update --- internal/rpc/conversation/conversaion.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/internal/rpc/conversation/conversaion.go b/internal/rpc/conversation/conversaion.go index ef86dee3d..3a6af935e 100644 --- a/internal/rpc/conversation/conversaion.go +++ b/internal/rpc/conversation/conversaion.go @@ -148,7 +148,11 @@ func syncPeerUserConversation(conversation *pbConversation.Conversation, operati } err = rocksCache.DelConversationFromCache(conversation.UserID, utils.GetConversationIDBySessionType(conversation.OwnerUserID, constant.SingleChatType)) if err != nil { - log.NewError(operationID, utils.GetSelfFuncName(), "DelConversationFromCache failed", err.Error()) + log.NewError(operationID, utils.GetSelfFuncName(), "DelConversationFromCache failed", err.Error(), conversation.OwnerUserID, conversation.ConversationID) + } + err = rocksCache.DelConversationFromCache(conversation.OwnerUserID, conversation.ConversationID) + if err != nil { + log.NewError(operationID, utils.GetSelfFuncName(), "DelConversationFromCache failed", err.Error(), conversation.OwnerUserID, conversation.ConversationID) } chat.ConversationSetPrivateNotification(operationID, conversation.OwnerUserID, conversation.UserID, conversation.IsPrivateChat) return nil From a0a2b6c340872018093b9636df1823e13e0c4747 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 15 Sep 2022 11:38:31 +0800 Subject: [PATCH 07/10] fix bug --- internal/msg_transfer/logic/persistent_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msg_transfer/logic/persistent_msg_handler.go b/internal/msg_transfer/logic/persistent_msg_handler.go index dec72181b..a8b578c11 100644 --- a/internal/msg_transfer/logic/persistent_msg_handler.go +++ b/internal/msg_transfer/logic/persistent_msg_handler.go @@ -85,11 +85,11 @@ func (pc *PersistentConsumerHandler) handleChatWs2Mysql(cMsg *sarama.ConsumerMes log.NewInfo(msgFromMQ.OperationID, "msg_transfer msg persisting", string(msg)) if err = im_mysql_msg_model.InsertMessageToChatLog(msgFromMQ); err != nil { log.NewError(msgFromMQ.OperationID, "Message insert failed", "err", err.Error(), "msg", msgFromMQ.String()) - msgInsertFailedMysqlCounter.Inc() + // msgInsertFailedMysqlCounter.Inc() return } if config.Config.Prometheus.Enable { - msgInsertMysqlCounter.Inc() + // msgInsertMysqlCounter.Inc() } } From 46e233ccbb56a6caceac33977cdf15d3f5e105c0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 15 Sep 2022 15:40:26 +0800 Subject: [PATCH 08/10] fix bug --- pkg/base_info/group_api_struct.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/base_info/group_api_struct.go b/pkg/base_info/group_api_struct.go index f2703bba2..8f2eaccd4 100644 --- a/pkg/base_info/group_api_struct.go +++ b/pkg/base_info/group_api_struct.go @@ -16,7 +16,7 @@ type CommDataResp struct { type KickGroupMemberReq struct { GroupID string `json:"groupID" binding:"required"` - KickedUserIDList []string `json:"kickedUserIDList" binding:"required, min=1, max=100"` + KickedUserIDList []string `json:"kickedUserIDList" binding:"required"` Reason string `json:"reason"` OperationID string `json:"operationID" binding:"required"` } @@ -38,7 +38,7 @@ type GetGroupMembersInfoResp struct { type InviteUserToGroupReq struct { GroupID string `json:"groupID" binding:"required"` - InvitedUserIDList []string `json:"invitedUserIDList" binding:"required, min=1, max=100"` + InvitedUserIDList []string `json:"invitedUserIDList" binding:"required"` Reason string `json:"reason"` OperationID string `json:"operationID" binding:"required"` } From 427a598385018a1ba5d4caa624592de1e7bc78f1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 16 Sep 2022 18:11:14 +0800 Subject: [PATCH 09/10] check login --- internal/demo/register/check_login.go | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/internal/demo/register/check_login.go b/internal/demo/register/check_login.go index 6592172ca..8cb051baf 100644 --- a/internal/demo/register/check_login.go +++ b/internal/demo/register/check_login.go @@ -48,17 +48,7 @@ func CheckLoginLimit(c *gin.Context) { var Limited bool var LimitError error - Limited, LimitError = imdb.IsLimitLoginIp(ip) - if LimitError != nil { - log.NewError(req.OperationID, utils.GetSelfFuncName(), LimitError, ip) - c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.ErrDB.ErrCode, "errMsg": LimitError}) - return - } - if Limited { - log.NewInfo(req.OperationID, utils.GetSelfFuncName(), Limited, ip, req.UserID) - c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.LoginLimit, "errMsg": "ip limited Login"}) - return - } + // 指定账户指定ip才能登录 Limited, LimitError = imdb.IsLimitUserLoginIp(user.UserID, ip) if LimitError != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), LimitError, ip) @@ -70,6 +60,20 @@ func CheckLoginLimit(c *gin.Context) { c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.LoginLimit, "errMsg": "user ip limited Login"}) return } + + // 该ip不能登录 + Limited, LimitError = imdb.IsLimitLoginIp(ip) + if LimitError != nil { + log.NewError(req.OperationID, utils.GetSelfFuncName(), LimitError, ip) + c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.ErrDB.ErrCode, "errMsg": LimitError}) + return + } + if Limited { + log.NewInfo(req.OperationID, utils.GetSelfFuncName(), Limited, ip, req.UserID) + c.JSON(http.StatusBadRequest, gin.H{"errCode": constant.LoginLimit, "errMsg": "ip limited Login"}) + return + } + Limited, LimitError = imdb.UserIsBlock(user.UserID) if LimitError != nil { log.NewError(req.OperationID, utils.GetSelfFuncName(), LimitError, user.UserID) From d971397c8b4b466f6526ba3fdf24147b38f308f3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Fri, 16 Sep 2022 18:41:11 +0800 Subject: [PATCH 10/10] v2.3.3 --- pkg/common/constant/constant.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index aa7a747cf..3642b31c3 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -337,4 +337,4 @@ const StatisticsTimeInterval = 60 const MaxNotificationNum = 100 -const CurrentVersion = "v2.3.3-rc0" +const CurrentVersion = "v2.3.3"