From eec9446abe503d69e77e51f187bcaae3532ebec9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 10:43:02 +0800 Subject: [PATCH 01/54] msg update --- internal/rpc/msg/send_pull.go | 11 ++++++----- pkg/common/mw/rpc_server_interceptor.go | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/rpc/msg/send_pull.go b/internal/rpc/msg/send_pull.go index eac40bc1a..af3c65760 100644 --- a/internal/rpc/msg/send_pull.go +++ b/internal/rpc/msg/send_pull.go @@ -9,6 +9,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" + "github.com/go-redis/redis/v8" "github.com/golang/protobuf/proto" "sync" ) @@ -260,24 +261,23 @@ func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMin resp := new(sdkws.GetMaxAndMinSeqResp) m2 := make(map[string]*sdkws.MaxAndMinSeq) maxSeq, err := m.MsgDatabase.GetUserMaxSeq(ctx, req.UserID) - if err != nil { + if err != nil && err != redis.Nil { return nil, err } minSeq, err := m.MsgDatabase.GetUserMinSeq(ctx, req.UserID) - if err != nil { + if err != nil && err != redis.Nil { return nil, err } resp.MaxSeq = maxSeq resp.MinSeq = minSeq if len(req.GroupIDs) > 0 { - resp.GroupMaxAndMinSeq = make(map[string]*sdkws.MaxAndMinSeq) for _, groupID := range req.GroupIDs { maxSeq, err := m.MsgDatabase.GetGroupMaxSeq(ctx, groupID) - if err != nil { + if err != nil && err != redis.Nil { return nil, err } minSeq, err := m.MsgDatabase.GetGroupMinSeq(ctx, groupID) - if err != nil { + if err != nil && err != redis.Nil { return nil, err } m2[groupID] = &sdkws.MaxAndMinSeq{ @@ -286,6 +286,7 @@ func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMin } } } + resp.GroupMaxAndMinSeq = m2 return resp, nil } diff --git a/pkg/common/mw/rpc_server_interceptor.go b/pkg/common/mw/rpc_server_interceptor.go index ca6af8f7d..26362c786 100644 --- a/pkg/common/mw/rpc_server_interceptor.go +++ b/pkg/common/mw/rpc_server_interceptor.go @@ -119,7 +119,7 @@ func rpcServerInterceptor(ctx context.Context, req interface{}, info *grpc.Unary if err != nil { panic(err) } - log.ZError(ctx, "rpc server resp", err, "funcName", funcName) + log.ZWarn(ctx, "rpc server resp", err, "funcName", funcName) return nil, details.Err() } From c2862424f21ca4aced3ddeaa25e108f614b1d463 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 10:44:22 +0800 Subject: [PATCH 02/54] msg update --- internal/push/consumer_init.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/internal/push/consumer_init.go b/internal/push/consumer_init.go index cead76bbf..6eba5306e 100644 --- a/internal/push/consumer_init.go +++ b/internal/push/consumer_init.go @@ -7,11 +7,7 @@ package push import ( - "fmt" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" - "github.com/OpenIMSDK/Open-IM-Server/pkg/statistics" ) type Consumer struct { @@ -31,6 +27,6 @@ func (c *Consumer) initPrometheus() { } func (c *Consumer) Start() { - statistics.NewStatistics(&c.successCount, config.Config.ModuleName.PushName, fmt.Sprintf("%d second push to msg_gateway count", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) + //statistics.NewStatistics(&c.successCount, config.Config.ModuleName.PushName, fmt.Sprintf("%d second push to msg_gateway count", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) go c.pushCh.pushConsumerGroup.RegisterHandleAndConsumer(&c.pushCh) } From 0aaa8cb36bacd3454e9789e716fd230ab980406d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 11:30:14 +0800 Subject: [PATCH 03/54] msg update --- internal/rpc/msg/send_pull.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/rpc/msg/send_pull.go b/internal/rpc/msg/send_pull.go index af3c65760..342885585 100644 --- a/internal/rpc/msg/send_pull.go +++ b/internal/rpc/msg/send_pull.go @@ -3,6 +3,7 @@ package msg import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" promePkg "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" pbConversation "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/conversation" @@ -274,6 +275,7 @@ func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMin for _, groupID := range req.GroupIDs { maxSeq, err := m.MsgDatabase.GetGroupMaxSeq(ctx, groupID) if err != nil && err != redis.Nil { + log.ZDebug(ctx, "redis err", err.Error()) return nil, err } minSeq, err := m.MsgDatabase.GetGroupMinSeq(ctx, groupID) From 7e2db9cd433ea2af47fb7b4bbdee2e0f0aeb9b4a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 12:36:41 +0800 Subject: [PATCH 04/54] msg update --- internal/rpc/msg/send_pull.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/rpc/msg/send_pull.go b/internal/rpc/msg/send_pull.go index 342885585..13e23a3c0 100644 --- a/internal/rpc/msg/send_pull.go +++ b/internal/rpc/msg/send_pull.go @@ -275,7 +275,7 @@ func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMin for _, groupID := range req.GroupIDs { maxSeq, err := m.MsgDatabase.GetGroupMaxSeq(ctx, groupID) if err != nil && err != redis.Nil { - log.ZDebug(ctx, "redis err", err.Error()) + log.ZDebug(ctx, "redis err", "err", err.Error()) return nil, err } minSeq, err := m.MsgDatabase.GetGroupMinSeq(ctx, groupID) From 99c486295bffee49655cb13bf7a33e49fcf17997 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 12:58:18 +0800 Subject: [PATCH 05/54] msg update --- internal/rpc/msg/send_pull.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/rpc/msg/send_pull.go b/internal/rpc/msg/send_pull.go index 13e23a3c0..f47aa4c56 100644 --- a/internal/rpc/msg/send_pull.go +++ b/internal/rpc/msg/send_pull.go @@ -262,11 +262,11 @@ func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMin resp := new(sdkws.GetMaxAndMinSeqResp) m2 := make(map[string]*sdkws.MaxAndMinSeq) maxSeq, err := m.MsgDatabase.GetUserMaxSeq(ctx, req.UserID) - if err != nil && err != redis.Nil { + if err != nil && errs.Unwrap(err) != redis.Nil { return nil, err } minSeq, err := m.MsgDatabase.GetUserMinSeq(ctx, req.UserID) - if err != nil && err != redis.Nil { + if err != nil && errs.Unwrap(err) != redis.Nil { return nil, err } resp.MaxSeq = maxSeq @@ -274,12 +274,12 @@ func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMin if len(req.GroupIDs) > 0 { for _, groupID := range req.GroupIDs { maxSeq, err := m.MsgDatabase.GetGroupMaxSeq(ctx, groupID) - if err != nil && err != redis.Nil { + if err != nil && errs.Unwrap(err) != redis.Nil { log.ZDebug(ctx, "redis err", "err", err.Error()) return nil, err } minSeq, err := m.MsgDatabase.GetGroupMinSeq(ctx, groupID) - if err != nil && err != redis.Nil { + if err != nil && errs.Unwrap(err) != redis.Nil { return nil, err } m2[groupID] = &sdkws.MaxAndMinSeq{ From e0a422fd1668282d6018575a72dd8fd6fb4ce716 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Mon, 20 Mar 2023 14:36:42 +0800 Subject: [PATCH 06/54] code error --- pkg/errs/code.go | 2 +- pkg/errs/coderr.go | 17 ++++++++++++++--- pkg/errs/predefine.go | 2 +- pkg/errs/relation.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 pkg/errs/relation.go diff --git a/pkg/errs/code.go b/pkg/errs/code.go index 166cbd3b9..36c0e2e81 100644 --- a/pkg/errs/code.go +++ b/pkg/errs/code.go @@ -48,7 +48,7 @@ const ( // 群组错误码 GroupIDNotFoundError = 1201 //GroupID不存在 - GroupIDIDExisted = 1202 //GroupID已存在 + GroupIDExisted = 1202 //GroupID已存在 OnlyOneOwnerError = 1203 //只能有一个群主 InGroupAlreadyError = 1204 //已在群组中 NotInGroupYetError = 1205 //不在群组中 diff --git a/pkg/errs/coderr.go b/pkg/errs/coderr.go index 1ce329905..445ee0ddd 100644 --- a/pkg/errs/coderr.go +++ b/pkg/errs/coderr.go @@ -11,7 +11,8 @@ type CodeError interface { Msg() string Detail() string WithDetail(detail string) CodeError - Is(err error) bool + // Is 判断是否是某个错误, loose为false时, 只有错误码相同就认为是同一个错误, 默认为true + Is(err error, loose ...bool) bool Wrap(msg ...string) error error } @@ -59,13 +60,23 @@ func (e *codeError) Wrap(w ...string) error { return errors.Wrap(e, strings.Join(w, ", ")) } -func (e *codeError) Is(err error) bool { +func (e *codeError) Is(err error, loose ...bool) bool { if err == nil { return false } + var allowSubclasses bool + if len(loose) == 0 { + allowSubclasses = true + } else { + allowSubclasses = loose[0] + } codeErr, ok := Unwrap(err).(CodeError) if ok { - return codeErr.Code() == e.code + if allowSubclasses { + return Relation.Is(e.code, codeErr.Code()) + } else { + return codeErr.Code() == e.code + } } return false } diff --git a/pkg/errs/predefine.go b/pkg/errs/predefine.go index e18cdf4eb..6ba2f76f8 100644 --- a/pkg/errs/predefine.go +++ b/pkg/errs/predefine.go @@ -12,7 +12,7 @@ var ( ErrUserIDNotFound = NewCodeError(UserIDNotFoundError, "UserIDNotFoundError") ErrGroupIDNotFound = NewCodeError(GroupIDNotFoundError, "GroupIDNotFoundError") - ErrGroupIDExisted = NewCodeError(GroupIDIDExisted, "GroupIDExisted") + ErrGroupIDExisted = NewCodeError(GroupIDExisted, "GroupIDExisted") ErrUserIDExisted = NewCodeError(UserIDExisted, "UserIDExisted") ErrRecordNotFound = NewCodeError(RecordNotFoundError, "RecordNotFoundError") diff --git a/pkg/errs/relation.go b/pkg/errs/relation.go new file mode 100644 index 000000000..5d87ab59e --- /dev/null +++ b/pkg/errs/relation.go @@ -0,0 +1,43 @@ +package errs + +var Relation = &relation{m: make(map[int]map[int]struct{})} + +func init() { + Relation.Add(RecordNotFoundError, UserIDNotFoundError) + Relation.Add(RecordNotFoundError, GroupIDNotFoundError) + Relation.Add(DuplicateKeyError, UserIDExisted) + Relation.Add(DuplicateKeyError, GroupIDExisted) +} + +type relation struct { + m map[int]map[int]struct{} +} + +func (r *relation) Add(codes ...int) { + if len(codes) < 2 { + panic("codes length must be greater than 2") + } + for i := 1; i < len(codes); i++ { + parent := codes[i-1] + s, ok := r.m[parent] + if !ok { + s = make(map[int]struct{}) + r.m[parent] = s + } + for _, code := range codes[i:] { + s[code] = struct{}{} + } + } +} + +func (r *relation) Is(parent, child int) bool { + if parent == child { + return true + } + s, ok := r.m[parent] + if !ok { + return false + } + _, ok = s[child] + return ok +} From 762d6516a584aaeb5040513be3894b08f94b810c Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Mon, 20 Mar 2023 15:11:00 +0800 Subject: [PATCH 07/54] db --- pkg/common/db/{relation => ormutil}/utils.go | 12 ++++++------ pkg/common/db/relation/black_model.go | 3 ++- pkg/common/db/relation/group_member_model.go | 11 ++++++----- pkg/common/db/relation/group_model.go | 3 ++- pkg/common/db/relation/group_request_model.go | 3 ++- 5 files changed, 18 insertions(+), 14 deletions(-) rename pkg/common/db/{relation => ormutil}/utils.go (78%) diff --git a/pkg/common/db/relation/utils.go b/pkg/common/db/ormutil/utils.go similarity index 78% rename from pkg/common/db/relation/utils.go rename to pkg/common/db/ormutil/utils.go index fcb275b16..c64938f6c 100644 --- a/pkg/common/db/relation/utils.go +++ b/pkg/common/db/ormutil/utils.go @@ -1,11 +1,11 @@ -package relation +package ormutil import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "gorm.io/gorm" ) -func gormPage[E any](db *gorm.DB, pageNumber, showNumber int32) (uint32, []*E, error) { +func GormPage[E any](db *gorm.DB, pageNumber, showNumber int32) (uint32, []*E, error) { var count int64 if err := db.Count(&count).Error; err != nil { return 0, nil, utils.Wrap(err, "") @@ -17,7 +17,7 @@ func gormPage[E any](db *gorm.DB, pageNumber, showNumber int32) (uint32, []*E, e return uint32(count), es, nil } -func gormSearch[E any](db *gorm.DB, fields []string, value string, pageNumber, showNumber int32) (uint32, []*E, error) { +func GormSearch[E any](db *gorm.DB, fields []string, value string, pageNumber, showNumber int32) (uint32, []*E, error) { if len(fields) > 0 && value != "" { value = "%" + value + "%" if len(fields) == 1 { @@ -30,17 +30,17 @@ func gormSearch[E any](db *gorm.DB, fields []string, value string, pageNumber, s db = db.Where(t) } } - return gormPage[E](db, pageNumber, showNumber) + return GormPage[E](db, pageNumber, showNumber) } -func gormIn[E any](db **gorm.DB, field string, es []E) { +func GormIn[E any](db **gorm.DB, field string, es []E) { if len(es) == 0 { return } *db = (*db).Where(field+" in (?)", es) } -func mapCount(db *gorm.DB, field string) (map[string]uint32, error) { +func MapCount(db *gorm.DB, field string) (map[string]uint32, error) { var items []struct { ID string `gorm:"column:id"` Count uint32 `gorm:"column:count"` diff --git a/pkg/common/db/relation/black_model.go b/pkg/common/db/relation/black_model.go index e7ffa9a49..77efa5502 100644 --- a/pkg/common/db/relation/black_model.go +++ b/pkg/common/db/relation/black_model.go @@ -2,6 +2,7 @@ package relation import ( "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/ormutil" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" @@ -50,7 +51,7 @@ func (b *BlackGorm) FindOwnerBlacks(ctx context.Context, ownerUserID string, pag if err != nil { return nil, 0, utils.Wrap(err, "") } - totalUint32, blacks, err := gormPage[relation.BlackModel](b.db(ctx), pageNumber, showNumber) + totalUint32, blacks, err := ormutil.GormPage[relation.BlackModel](b.db(ctx), pageNumber, showNumber) total = int64(totalUint32) return } diff --git a/pkg/common/db/relation/group_member_model.go b/pkg/common/db/relation/group_member_model.go index 42266c550..d63416e89 100644 --- a/pkg/common/db/relation/group_member_model.go +++ b/pkg/common/db/relation/group_member_model.go @@ -3,6 +3,7 @@ package relation import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/ormutil" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "gorm.io/gorm" @@ -71,14 +72,14 @@ func (g *GroupMemberGorm) TakeOwner(ctx context.Context, groupID string) (groupM func (g *GroupMemberGorm) SearchMember(ctx context.Context, keyword string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (total uint32, groupList []*relation.GroupMemberModel, err error) { db := g.DB - gormIn(&db, "group_id", groupIDs) - gormIn(&db, "user_id", userIDs) - gormIn(&db, "role_level", roleLevels) - return gormSearch[relation.GroupMemberModel](db, []string{"nickname"}, keyword, pageNumber, showNumber) + ormutil.GormIn(&db, "group_id", groupIDs) + ormutil.GormIn(&db, "user_id", userIDs) + ormutil.GormIn(&db, "role_level", roleLevels) + return ormutil.GormSearch[relation.GroupMemberModel](db, []string{"nickname"}, keyword, pageNumber, showNumber) } func (g *GroupMemberGorm) MapGroupMemberNum(ctx context.Context, groupIDs []string) (count map[string]uint32, err error) { - return mapCount(g.DB.Where("group_id in (?)", groupIDs), "group_id") + return ormutil.MapCount(g.DB.Where("group_id in (?)", groupIDs), "group_id") } func (g *GroupMemberGorm) FindJoinUserID(ctx context.Context, groupIDs []string) (groupUsers map[string][]string, err error) { diff --git a/pkg/common/db/relation/group_model.go b/pkg/common/db/relation/group_model.go index e4d5d9759..39feb5d7a 100644 --- a/pkg/common/db/relation/group_model.go +++ b/pkg/common/db/relation/group_model.go @@ -2,6 +2,7 @@ package relation import ( "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/ormutil" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "gorm.io/gorm" @@ -43,7 +44,7 @@ func (g *GroupGorm) Take(ctx context.Context, groupID string) (group *relation.G } func (g *GroupGorm) Search(ctx context.Context, keyword string, pageNumber, showNumber int32) (total uint32, groups []*relation.GroupModel, err error) { - return gormSearch[relation.GroupModel](g.DB, []string{"name"}, keyword, pageNumber, showNumber) + return ormutil.GormSearch[relation.GroupModel](g.DB, []string{"name"}, keyword, pageNumber, showNumber) } func (g *GroupGorm) GetGroupIDsByGroupType(ctx context.Context, groupType int) (groupIDs []string, err error) { diff --git a/pkg/common/db/relation/group_request_model.go b/pkg/common/db/relation/group_request_model.go index b6dfa3b23..e7e15539b 100644 --- a/pkg/common/db/relation/group_request_model.go +++ b/pkg/common/db/relation/group_request_model.go @@ -2,6 +2,7 @@ package relation import ( "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/ormutil" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" @@ -39,5 +40,5 @@ func (g *GroupRequestGorm) Take(ctx context.Context, groupID string, userID stri } func (g *GroupRequestGorm) Page(ctx context.Context, userID string, pageNumber, showNumber int32) (total uint32, groups []*relation.GroupRequestModel, err error) { - return gormSearch[relation.GroupRequestModel](g.DB.Where("user_id = ?", userID), nil, "", pageNumber, showNumber) + return ormutil.GormSearch[relation.GroupRequestModel](g.DB.Where("user_id = ?", userID), nil, "", pageNumber, showNumber) } From 78d5fa30ba322dffe063b6f5d192ec2125a7e2ad Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 19:34:50 +0800 Subject: [PATCH 08/54] user update --- internal/api/msg.go | 76 +++++++++++++++++------------------ internal/api/route.go | 2 +- internal/rpc/msg/send_pull.go | 6 ++- pkg/apistruct/manage.go | 16 ++++++-- 4 files changed, 54 insertions(+), 46 deletions(-) diff --git a/internal/api/msg.go b/internal/api/msg.go index 5d8ca40b0..e12c9ce45 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -2,7 +2,6 @@ package api import ( "context" - "errors" "github.com/OpenIMSDK/Open-IM-Server/pkg/a2r" "github.com/OpenIMSDK/Open-IM-Server/pkg/apiresp" "github.com/OpenIMSDK/Open-IM-Server/pkg/apistruct" @@ -23,23 +22,23 @@ import ( var _ context.Context // 解决goland编辑器bug -func NewMsg(c discoveryregistry.SvcDiscoveryRegistry) *Msg { - return &Msg{c: c, validate: validator.New()} +func NewMsg(c discoveryregistry.SvcDiscoveryRegistry) *Message { + return &Message{c: c, validate: validator.New()} } -type Msg struct { +type Message struct { c discoveryregistry.SvcDiscoveryRegistry validate *validator.Validate } -func (Msg) SetOptions(options map[string]bool, value bool) { +func (Message) SetOptions(options map[string]bool, value bool) { utils.SetSwitchFromOptions(options, constant.IsHistory, value) utils.SetSwitchFromOptions(options, constant.IsPersistent, value) utils.SetSwitchFromOptions(options, constant.IsSenderSync, value) utils.SetSwitchFromOptions(options, constant.IsConversationUpdate, value) } -func (m Msg) newUserSendMsgReq(c *gin.Context, params *apistruct.ManagementSendMsgReq) *msg.SendMsgReq { +func (m Message) newUserSendMsgReq(c *gin.Context, params *apistruct.ManagementSendMsgReq) *msg.SendMsgReq { var newContent string var err error switch params.ContentType { @@ -106,7 +105,7 @@ func (m Msg) newUserSendMsgReq(c *gin.Context, params *apistruct.ManagementSendM return &pbData } -func (m *Msg) client() (msg.MsgClient, error) { +func (m *Message) client() (msg.MsgClient, error) { conn, err := m.c.GetConn(config.Config.RpcRegisterName.OpenImMsgName) if err != nil { return nil, err @@ -114,46 +113,46 @@ func (m *Msg) client() (msg.MsgClient, error) { return msg.NewMsgClient(conn), nil } -func (m *Msg) GetSeq(c *gin.Context) { +func (m *Message) GetSeq(c *gin.Context) { a2r.Call(msg.MsgClient.GetMaxAndMinSeq, m.client, c) } -func (m *Msg) PullMsgBySeqs(c *gin.Context) { +func (m *Message) PullMsgBySeqs(c *gin.Context) { a2r.Call(msg.MsgClient.PullMessageBySeqs, m.client, c) } -func (m *Msg) DelMsg(c *gin.Context) { +func (m *Message) DelMsg(c *gin.Context) { a2r.Call(msg.MsgClient.DelMsgs, m.client, c) } -func (m *Msg) DelSuperGroupMsg(c *gin.Context) { +func (m *Message) DelSuperGroupMsg(c *gin.Context) { a2r.Call(msg.MsgClient.DelSuperGroupMsg, m.client, c) } -func (m *Msg) ClearMsg(c *gin.Context) { +func (m *Message) ClearMsg(c *gin.Context) { a2r.Call(msg.MsgClient.ClearMsg, m.client, c) } -func (m *Msg) SetMessageReactionExtensions(c *gin.Context) { +func (m *Message) SetMessageReactionExtensions(c *gin.Context) { a2r.Call(msg.MsgClient.SetMessageReactionExtensions, m.client, c) } -func (m *Msg) GetMessageListReactionExtensions(c *gin.Context) { +func (m *Message) GetMessageListReactionExtensions(c *gin.Context) { a2r.Call(msg.MsgClient.GetMessagesReactionExtensions, m.client, c) } -func (m *Msg) AddMessageReactionExtensions(c *gin.Context) { +func (m *Message) AddMessageReactionExtensions(c *gin.Context) { a2r.Call(msg.MsgClient.AddMessageReactionExtensions, m.client, c) } -func (m *Msg) DeleteMessageReactionExtensions(c *gin.Context) { +func (m *Message) DeleteMessageReactionExtensions(c *gin.Context) { a2r.Call(msg.MsgClient.DeleteMessageReactionExtensions, m.client, c) } -func (m *Msg) SendMsg(c *gin.Context) { +func (m *Message) SendMessage(c *gin.Context) { params := apistruct.ManagementSendMsgReq{} if err := c.BindJSON(¶ms); err != nil { - apiresp.GinError(c, err) + apiresp.GinError(c, errs.ErrArgs.WithDetail(err.Error()).Wrap()) return } var data interface{} @@ -181,32 +180,29 @@ func (m *Msg) SendMsg(c *gin.Context) { data = apistruct.CustomElem{} case constant.CustomOnlineOnly: data = apistruct.CustomElem{} - //case constant.HasReadReceipt: - //case constant.Typing: - //case constant.Quote: default: - apiresp.GinError(c, errors.New("wrong contentType")) + apiresp.GinError(c, errs.ErrArgs.WithDetail("not support err contentType").Wrap()) return } if err := mapstructure.WeakDecode(params.Content, &data); err != nil { - apiresp.GinError(c, errs.ErrData) + apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error())) return } else if err := m.validate.Struct(data); err != nil { - apiresp.GinError(c, errs.ErrData) + apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error())) return } - switch params.SessionType { - case constant.SingleChatType: - if len(params.RecvID) == 0 { - apiresp.GinError(c, errs.ErrData) - return - } - case constant.GroupChatType, constant.SuperGroupChatType: - if len(params.GroupID) == 0 { - apiresp.GinError(c, errs.ErrData) - return - } - } + //switch params.SessionType { + //case constant.SingleChatType: + // if len(params.RecvID) == 0 { + // apiresp.GinError(c, errs.ErrData) + // return + // } + //case constant.GroupChatType, constant.SuperGroupChatType: + // if len(params.GroupID) == 0 { + // apiresp.GinError(c, errs.ErrData) + // return + // } + //} pbReq := m.newUserSendMsgReq(c, ¶ms) conn, err := m.c.GetConn(config.Config.RpcRegisterName.OpenImMsgName) if err != nil { @@ -232,18 +228,18 @@ func (m *Msg) SendMsg(c *gin.Context) { apiresp.GinSuccess(c, resp) } -func (m *Msg) ManagementBatchSendMsg(c *gin.Context) { +func (m *Message) ManagementBatchSendMsg(c *gin.Context) { a2r.Call(msg.MsgClient.SendMsg, m.client, c) } -func (m *Msg) CheckMsgIsSendSuccess(c *gin.Context) { +func (m *Message) CheckMsgIsSendSuccess(c *gin.Context) { a2r.Call(msg.MsgClient.GetSendMsgStatus, m.client, c) } -func (m *Msg) GetUsersOnlineStatus(c *gin.Context) { +func (m *Message) GetUsersOnlineStatus(c *gin.Context) { a2r.Call(msg.MsgClient.GetSendMsgStatus, m.client, c) } -func (m *Msg) AccountCheck(c *gin.Context) { +func (m *Message) AccountCheck(c *gin.Context) { a2r.Call(msg.MsgClient.GetSendMsgStatus, m.client, c) } diff --git a/internal/api/route.go b/internal/api/route.go index f26b195c3..2218777bf 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -126,7 +126,7 @@ func NewGinRouter(zk discoveryregistry.SvcDiscoveryRegistry, rdb redis.Universal m := NewMsg(zk) msgGroup.Use(mw.GinParseToken(rdb)) msgGroup.POST("/newest_seq", m.GetSeq) - msgGroup.POST("/send_msg", m.SendMsg) + msgGroup.POST("/send_msg", m.SendMessage) msgGroup.POST("/pull_msg_by_seq", m.PullMsgBySeqs) msgGroup.POST("/del_msg", m.DelMsg) msgGroup.POST("/del_super_group_msg", m.DelSuperGroupMsg) diff --git a/internal/rpc/msg/send_pull.go b/internal/rpc/msg/send_pull.go index f47aa4c56..5aedbe2ed 100644 --- a/internal/rpc/msg/send_pull.go +++ b/internal/rpc/msg/send_pull.go @@ -3,8 +3,8 @@ package msg import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" promePkg "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" pbConversation "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/conversation" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" @@ -259,6 +259,9 @@ func (m *msgServer) SendMsg(ctx context.Context, req *msg.SendMsgReq) (resp *msg } func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMinSeqReq) (*sdkws.GetMaxAndMinSeqResp, error) { + if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { + return nil, err + } resp := new(sdkws.GetMaxAndMinSeqResp) m2 := make(map[string]*sdkws.MaxAndMinSeq) maxSeq, err := m.MsgDatabase.GetUserMaxSeq(ctx, req.UserID) @@ -275,7 +278,6 @@ func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMin for _, groupID := range req.GroupIDs { maxSeq, err := m.MsgDatabase.GetGroupMaxSeq(ctx, groupID) if err != nil && errs.Unwrap(err) != redis.Nil { - log.ZDebug(ctx, "redis err", "err", err.Error()) return nil, err } minSeq, err := m.MsgDatabase.GetGroupMinSeq(ctx, groupID) diff --git a/pkg/apistruct/manage.go b/pkg/apistruct/manage.go index ea43ae99a..04df8ea57 100644 --- a/pkg/apistruct/manage.go +++ b/pkg/apistruct/manage.go @@ -34,7 +34,7 @@ type AccountCheckResp struct { type ManagementSendMsg struct { SendID string `json:"sendID" binding:"required"` - GroupID string `json:"groupID" ` + GroupID string `json:"groupID" binding:"required_if=SessionType 2|required_if=SessionType 3"` SenderNickname string `json:"senderNickname" ` SenderFaceURL string `json:"senderFaceURL" ` SenderPlatformID int32 `json:"senderPlatformID"` @@ -47,8 +47,18 @@ type ManagementSendMsg struct { } type ManagementSendMsgReq struct { - ManagementSendMsg - RecvID string `json:"recvID" ` + SendID string `json:"sendID" binding:"required"` + RecvID string `json:"recvID" binding:"required_if=SessionType 1|required_if=SessionType 4"` + GroupID string `json:"groupID" binding:"required_if=SessionType 2|required_if=SessionType 3"` + SenderNickname string `json:"senderNickname" ` + SenderFaceURL string `json:"senderFaceURL" ` + SenderPlatformID int32 `json:"senderPlatformID"` + Content map[string]interface{} `json:"content" binding:"required" swaggerignore:"true"` + ContentType int32 `json:"contentType" binding:"required"` + SessionType int32 `json:"sessionType" binding:"required"` + IsOnlineOnly bool `json:"isOnlineOnly"` + NotOfflinePush bool `json:"notOfflinePush"` + OfflinePushInfo *sdkws.OfflinePushInfo `json:"offlinePushInfo"` } type ManagementSendMsgResp struct { From 357245691d7c4421c0cde6dabaac4d750746fb65 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 20:00:16 +0800 Subject: [PATCH 09/54] user update --- pkg/apistruct/manage.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/apistruct/manage.go b/pkg/apistruct/manage.go index 04df8ea57..79cb1823d 100644 --- a/pkg/apistruct/manage.go +++ b/pkg/apistruct/manage.go @@ -48,8 +48,8 @@ type ManagementSendMsg struct { type ManagementSendMsgReq struct { SendID string `json:"sendID" binding:"required"` - RecvID string `json:"recvID" binding:"required_if=SessionType 1|required_if=SessionType 4"` - GroupID string `json:"groupID" binding:"required_if=SessionType 2|required_if=SessionType 3"` + RecvID string `json:"recvID" binding:"required_if=sessionType 1|required_if=sessionType 4"` + GroupID string `json:"groupID" binding:"required_if=sessionType 2|required_if=sessionType 3"` SenderNickname string `json:"senderNickname" ` SenderFaceURL string `json:"senderFaceURL" ` SenderPlatformID int32 `json:"senderPlatformID"` From b24960449d5e0a69c8aebcb5978b6163ad20ac05 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 20:42:02 +0800 Subject: [PATCH 10/54] user update --- internal/api/msg.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/internal/api/msg.go b/internal/api/msg.go index e12c9ce45..c4eaca706 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -15,6 +15,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" "github.com/go-playground/validator/v10" "github.com/golang/protobuf/proto" "github.com/mitchellh/mapstructure" @@ -148,13 +149,31 @@ func (m *Message) AddMessageReactionExtensions(c *gin.Context) { func (m *Message) DeleteMessageReactionExtensions(c *gin.Context) { a2r.Call(msg.MsgClient.DeleteMessageReactionExtensions, m.client, c) } - +func RequiredIf(fl validator.FieldLevel) bool { + sessionType := fl.Parent().FieldByName("SessionType").Int() + switch sessionType { + case 1, 4: + if fl.StructFieldName() == "RecvID" { + return fl.Field().String() != "" + } + case 2, 3: + if fl.StructFieldName() == "GroupID" { + return fl.Field().String() != "" + } + default: + return true + } + return false +} func (m *Message) SendMessage(c *gin.Context) { params := apistruct.ManagementSendMsgReq{} if err := c.BindJSON(¶ms); err != nil { apiresp.GinError(c, errs.ErrArgs.WithDetail(err.Error()).Wrap()) return } + if v, ok := binding.Validator.Engine().(*validator.Validate); ok { + _ = v.RegisterValidation("required_if", RequiredIf) + } var data interface{} switch params.ContentType { case constant.Text: From aa09e77ab625b80a8ab8a8946a09a4f942b06f6a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 20:43:36 +0800 Subject: [PATCH 11/54] user update --- internal/api/msg.go | 2 +- pkg/apistruct/manage.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/api/msg.go b/internal/api/msg.go index c4eaca706..2783bc13e 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -163,7 +163,7 @@ func RequiredIf(fl validator.FieldLevel) bool { default: return true } - return false + return true } func (m *Message) SendMessage(c *gin.Context) { params := apistruct.ManagementSendMsgReq{} diff --git a/pkg/apistruct/manage.go b/pkg/apistruct/manage.go index 79cb1823d..87c5854ea 100644 --- a/pkg/apistruct/manage.go +++ b/pkg/apistruct/manage.go @@ -48,8 +48,8 @@ type ManagementSendMsg struct { type ManagementSendMsgReq struct { SendID string `json:"sendID" binding:"required"` - RecvID string `json:"recvID" binding:"required_if=sessionType 1|required_if=sessionType 4"` - GroupID string `json:"groupID" binding:"required_if=sessionType 2|required_if=sessionType 3"` + RecvID string `json:"recvID" binding:"required_if"` + GroupID string `json:"groupID" binding:"required_if"` SenderNickname string `json:"senderNickname" ` SenderFaceURL string `json:"senderFaceURL" ` SenderPlatformID int32 `json:"senderPlatformID"` From 42301360644a664c27e19d848f9bdc167368b58c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 20:52:52 +0800 Subject: [PATCH 12/54] user update --- internal/api/msg.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/internal/api/msg.go b/internal/api/msg.go index 2783bc13e..219b9bb72 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -153,11 +153,18 @@ func RequiredIf(fl validator.FieldLevel) bool { sessionType := fl.Parent().FieldByName("SessionType").Int() switch sessionType { case 1, 4: + log.ZDebug(context.Background(), "1", sessionType) if fl.StructFieldName() == "RecvID" { + log.ZDebug(context.Background(), "2", sessionType) + return fl.Field().String() != "" } case 2, 3: + log.ZDebug(context.Background(), "3", sessionType) + if fl.StructFieldName() == "GroupID" { + log.ZDebug(context.Background(), "4", sessionType) + return fl.Field().String() != "" } default: From 33a09acdeef959da7b73e68aad7138e61139da9e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Mon, 20 Mar 2023 20:57:51 +0800 Subject: [PATCH 13/54] user update --- internal/api/msg.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/internal/api/msg.go b/internal/api/msg.go index 219b9bb72..35eac3237 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -2,6 +2,7 @@ package api import ( "context" + "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/a2r" "github.com/OpenIMSDK/Open-IM-Server/pkg/apiresp" "github.com/OpenIMSDK/Open-IM-Server/pkg/apistruct" @@ -153,17 +154,17 @@ func RequiredIf(fl validator.FieldLevel) bool { sessionType := fl.Parent().FieldByName("SessionType").Int() switch sessionType { case 1, 4: - log.ZDebug(context.Background(), "1", sessionType) + fmt.Println("1", sessionType) if fl.StructFieldName() == "RecvID" { - log.ZDebug(context.Background(), "2", sessionType) + fmt.Println("2", sessionType) return fl.Field().String() != "" } case 2, 3: - log.ZDebug(context.Background(), "3", sessionType) + fmt.Println("3", sessionType) if fl.StructFieldName() == "GroupID" { - log.ZDebug(context.Background(), "4", sessionType) + fmt.Println("4", sessionType) return fl.Field().String() != "" } From 71156eca21beaf21d0a823de9114d1ccb96d6ea9 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Mar 2023 10:18:53 +0800 Subject: [PATCH 14/54] msg update --- internal/api/msg.go | 28 +--------------------------- internal/api/route.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/internal/api/msg.go b/internal/api/msg.go index 35eac3237..b385cbf74 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -2,7 +2,6 @@ package api import ( "context" - "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/a2r" "github.com/OpenIMSDK/Open-IM-Server/pkg/apiresp" "github.com/OpenIMSDK/Open-IM-Server/pkg/apistruct" @@ -16,7 +15,6 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/gin-gonic/gin" - "github.com/gin-gonic/gin/binding" "github.com/go-playground/validator/v10" "github.com/golang/protobuf/proto" "github.com/mitchellh/mapstructure" @@ -150,38 +148,14 @@ func (m *Message) AddMessageReactionExtensions(c *gin.Context) { func (m *Message) DeleteMessageReactionExtensions(c *gin.Context) { a2r.Call(msg.MsgClient.DeleteMessageReactionExtensions, m.client, c) } -func RequiredIf(fl validator.FieldLevel) bool { - sessionType := fl.Parent().FieldByName("SessionType").Int() - switch sessionType { - case 1, 4: - fmt.Println("1", sessionType) - if fl.StructFieldName() == "RecvID" { - fmt.Println("2", sessionType) - return fl.Field().String() != "" - } - case 2, 3: - fmt.Println("3", sessionType) - - if fl.StructFieldName() == "GroupID" { - fmt.Println("4", sessionType) - - return fl.Field().String() != "" - } - default: - return true - } - return true -} func (m *Message) SendMessage(c *gin.Context) { params := apistruct.ManagementSendMsgReq{} if err := c.BindJSON(¶ms); err != nil { apiresp.GinError(c, errs.ErrArgs.WithDetail(err.Error()).Wrap()) return } - if v, ok := binding.Validator.Engine().(*validator.Validate); ok { - _ = v.RegisterValidation("required_if", RequiredIf) - } + var data interface{} switch params.ContentType { case constant.Text: diff --git a/internal/api/route.go b/internal/api/route.go index 2218777bf..89b6fa0e9 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -1,12 +1,15 @@ package api import ( + "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mw" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/gin-gonic/gin" + "github.com/gin-gonic/gin/binding" + "github.com/go-playground/validator/v10" "github.com/go-redis/redis/v8" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" @@ -19,6 +22,9 @@ func NewGinRouter(zk discoveryregistry.SvcDiscoveryRegistry, rdb redis.Universal //gin.DefaultWriter = io.MultiWriter(f) //gin.SetMode(gin.DebugMode) r := gin.New() + if v, ok := binding.Validator.Engine().(*validator.Validate); ok { + _ = v.RegisterValidation("required_if", RequiredIf) + } log.Info("load config: ", config.Config) r.Use(gin.Recovery(), mw.CorsHandler(), mw.GinParseOperationID()) if config.Config.Prometheus.Enable { @@ -156,3 +162,27 @@ func NewGinRouter(zk discoveryregistry.SvcDiscoveryRegistry, rdb redis.Universal } return r } + +func RequiredIf(fl validator.FieldLevel) bool { + sessionType := fl.Parent().FieldByName("SessionType").Int() + switch sessionType { + case 1, 4: + fmt.Println("1", sessionType) + if fl.FieldName() == "RecvID" { + fmt.Println("2", sessionType) + + return fl.Field().String() != "" + } + case 2, 3: + fmt.Println("3", sessionType) + + if fl.FieldName() == "GroupID" { + fmt.Println("4", sessionType) + + return fl.Field().String() != "" + } + default: + return true + } + return true +} From adfd11792618f014be4b3bd5e02e58609de2287c Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Mar 2023 10:30:40 +0800 Subject: [PATCH 15/54] msg update --- pkg/apistruct/manage.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/apistruct/manage.go b/pkg/apistruct/manage.go index 87c5854ea..1aa70fa1d 100644 --- a/pkg/apistruct/manage.go +++ b/pkg/apistruct/manage.go @@ -48,8 +48,8 @@ type ManagementSendMsg struct { type ManagementSendMsgReq struct { SendID string `json:"sendID" binding:"required"` - RecvID string `json:"recvID" binding:"required_if"` - GroupID string `json:"groupID" binding:"required_if"` + RecvID string `json:"recvID" binding:"required_if" message:"recvID is required if sessionType is SingleChatType or NotificationChatType"` + GroupID string `json:"groupID" binding:"required_if" message:"groupID is required if sessionType is GroupChatType or SuperGroupChatType"` SenderNickname string `json:"senderNickname" ` SenderFaceURL string `json:"senderFaceURL" ` SenderPlatformID int32 `json:"senderPlatformID"` From c92e48dfa33ad7e135dc0d4a232470d4e87225b8 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Mar 2023 10:32:09 +0800 Subject: [PATCH 16/54] msg update --- internal/api/msg.go | 12 ------------ internal/api/route.go | 13 +++---------- 2 files changed, 3 insertions(+), 22 deletions(-) diff --git a/internal/api/msg.go b/internal/api/msg.go index b385cbf74..a9f09d932 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -192,18 +192,6 @@ func (m *Message) SendMessage(c *gin.Context) { apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error())) return } - //switch params.SessionType { - //case constant.SingleChatType: - // if len(params.RecvID) == 0 { - // apiresp.GinError(c, errs.ErrData) - // return - // } - //case constant.GroupChatType, constant.SuperGroupChatType: - // if len(params.GroupID) == 0 { - // apiresp.GinError(c, errs.ErrData) - // return - // } - //} pbReq := m.newUserSendMsgReq(c, ¶ms) conn, err := m.c.GetConn(config.Config.RpcRegisterName.OpenImMsgName) if err != nil { diff --git a/internal/api/route.go b/internal/api/route.go index 89b6fa0e9..cc9f51788 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -1,8 +1,8 @@ package api import ( - "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mw" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" @@ -166,19 +166,12 @@ func NewGinRouter(zk discoveryregistry.SvcDiscoveryRegistry, rdb redis.Universal func RequiredIf(fl validator.FieldLevel) bool { sessionType := fl.Parent().FieldByName("SessionType").Int() switch sessionType { - case 1, 4: - fmt.Println("1", sessionType) + case constant.SingleChatType, constant.NotificationChatType: if fl.FieldName() == "RecvID" { - fmt.Println("2", sessionType) - return fl.Field().String() != "" } - case 2, 3: - fmt.Println("3", sessionType) - + case constant.GroupChatType, constant.SuperGroupChatType: if fl.FieldName() == "GroupID" { - fmt.Println("4", sessionType) - return fl.Field().String() != "" } default: From 1e8eb760131353a5bee69cc3d9a92a91a658e505 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Mar 2023 11:27:20 +0800 Subject: [PATCH 17/54] test --- internal/rpc/msg/send_msg.go | 7 +-- internal/rpc/msg/send_pull.go | 81 --------------------------------- internal/rpc/msg/server.go | 84 +++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 84 deletions(-) diff --git a/internal/rpc/msg/send_msg.go b/internal/rpc/msg/send_msg.go index 4b492f022..2d7028834 100644 --- a/internal/rpc/msg/send_msg.go +++ b/internal/rpc/msg/send_msg.go @@ -270,9 +270,10 @@ func (m *msgServer) modifyMessageByUserMessageReceiveOpt(ctx context.Context, us } conversationID := utils.GetConversationIDBySessionType(sourceID, sessionType) singleOpt, err := m.Conversation.GetSingleConversationRecvMsgOpt(ctx, userID, conversationID) - if err != nil { - return false, err - } + //if err != nil { + // return false, err + //} + return true, nil switch singleOpt { case constant.ReceiveMessage: return true, nil diff --git a/internal/rpc/msg/send_pull.go b/internal/rpc/msg/send_pull.go index 5aedbe2ed..f1987bdf7 100644 --- a/internal/rpc/msg/send_pull.go +++ b/internal/rpc/msg/send_pull.go @@ -4,13 +4,11 @@ import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" promePkg "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" pbConversation "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/conversation" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" - "github.com/go-redis/redis/v8" "github.com/golang/protobuf/proto" "sync" ) @@ -233,82 +231,3 @@ func (m *msgServer) sendMsgGroupChat(ctx context.Context, req *msg.SendMsgReq) ( resp.ClientMsgID = msgToMQSingle.MsgData.ClientMsgID return resp, nil } - -func (m *msgServer) SendMsg(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, error error) { - resp = &msg.SendMsgResp{} - flag := isMessageHasReadEnabled(req.MsgData) - if !flag { - return nil, errs.ErrMessageHasReadDisable.Wrap() - } - m.encapsulateMsgData(req.MsgData) - if err := CallbackMsgModify(ctx, req); err != nil && err != errs.ErrCallbackContinue { - return nil, err - } - switch req.MsgData.SessionType { - case constant.SingleChatType: - return m.sendMsgSingleChat(ctx, req) - case constant.GroupChatType: - return m.sendMsgGroupChat(ctx, req) - case constant.NotificationChatType: - return m.sendMsgNotification(ctx, req) - case constant.SuperGroupChatType: - return m.sendMsgSuperGroupChat(ctx, req) - default: - return nil, errs.ErrArgs.Wrap("unknown sessionType") - } -} - -func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMinSeqReq) (*sdkws.GetMaxAndMinSeqResp, error) { - if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { - return nil, err - } - resp := new(sdkws.GetMaxAndMinSeqResp) - m2 := make(map[string]*sdkws.MaxAndMinSeq) - maxSeq, err := m.MsgDatabase.GetUserMaxSeq(ctx, req.UserID) - if err != nil && errs.Unwrap(err) != redis.Nil { - return nil, err - } - minSeq, err := m.MsgDatabase.GetUserMinSeq(ctx, req.UserID) - if err != nil && errs.Unwrap(err) != redis.Nil { - return nil, err - } - resp.MaxSeq = maxSeq - resp.MinSeq = minSeq - if len(req.GroupIDs) > 0 { - for _, groupID := range req.GroupIDs { - maxSeq, err := m.MsgDatabase.GetGroupMaxSeq(ctx, groupID) - if err != nil && errs.Unwrap(err) != redis.Nil { - return nil, err - } - minSeq, err := m.MsgDatabase.GetGroupMinSeq(ctx, groupID) - if err != nil && errs.Unwrap(err) != redis.Nil { - return nil, err - } - m2[groupID] = &sdkws.MaxAndMinSeq{ - MaxSeq: maxSeq, - MinSeq: minSeq, - } - } - } - resp.GroupMaxAndMinSeq = m2 - return resp, nil -} - -func (m *msgServer) PullMessageBySeqs(ctx context.Context, req *sdkws.PullMessageBySeqsReq) (*sdkws.PullMessageBySeqsResp, error) { - resp := &sdkws.PullMessageBySeqsResp{GroupMsgDataList: make(map[string]*sdkws.MsgDataList)} - msgs, err := m.MsgDatabase.GetMsgBySeqs(ctx, req.UserID, req.Seqs) - if err != nil { - return nil, err - } - resp.List = msgs - for groupID, list := range req.GroupSeqs { - msgs, err := m.MsgDatabase.GetSuperGroupMsgBySeqs(ctx, groupID, list.Seqs) - if err != nil { - return nil, err - } - resp.GroupMsgDataList[groupID] = &sdkws.MsgDataList{ - MsgDataList: msgs, - } - } - return resp, nil -} diff --git a/internal/rpc/msg/server.go b/internal/rpc/msg/server.go index 86b65a15d..16b2b901f 100644 --- a/internal/rpc/msg/server.go +++ b/internal/rpc/msg/server.go @@ -1,14 +1,20 @@ package msg import ( + "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/localcache" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/unrelation" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" + "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/check" + "github.com/go-redis/redis/v8" "google.golang.org/grpc" ) @@ -74,3 +80,81 @@ func (m *msgServer) initPrometheus() { prome.NewWorkSuperGroupChatMsgProcessSuccessCounter() prome.NewWorkSuperGroupChatMsgProcessFailedCounter() } +func (m *msgServer) SendMsg(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, error error) { + resp = &msg.SendMsgResp{} + flag := isMessageHasReadEnabled(req.MsgData) + if !flag { + return nil, errs.ErrMessageHasReadDisable.Wrap() + } + m.encapsulateMsgData(req.MsgData) + if err := CallbackMsgModify(ctx, req); err != nil && err != errs.ErrCallbackContinue { + return nil, err + } + switch req.MsgData.SessionType { + case constant.SingleChatType: + return m.sendMsgSingleChat(ctx, req) + case constant.GroupChatType: + return m.sendMsgGroupChat(ctx, req) + case constant.NotificationChatType: + return m.sendMsgNotification(ctx, req) + case constant.SuperGroupChatType: + return m.sendMsgSuperGroupChat(ctx, req) + default: + return nil, errs.ErrArgs.Wrap("unknown sessionType") + } +} + +func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMinSeqReq) (*sdkws.GetMaxAndMinSeqResp, error) { + if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { + return nil, err + } + resp := new(sdkws.GetMaxAndMinSeqResp) + m2 := make(map[string]*sdkws.MaxAndMinSeq) + maxSeq, err := m.MsgDatabase.GetUserMaxSeq(ctx, req.UserID) + if err != nil && errs.Unwrap(err) != redis.Nil { + return nil, err + } + minSeq, err := m.MsgDatabase.GetUserMinSeq(ctx, req.UserID) + if err != nil && errs.Unwrap(err) != redis.Nil { + return nil, err + } + resp.MaxSeq = maxSeq + resp.MinSeq = minSeq + if len(req.GroupIDs) > 0 { + for _, groupID := range req.GroupIDs { + maxSeq, err := m.MsgDatabase.GetGroupMaxSeq(ctx, groupID) + if err != nil && errs.Unwrap(err) != redis.Nil { + return nil, err + } + minSeq, err := m.MsgDatabase.GetGroupMinSeq(ctx, groupID) + if err != nil && errs.Unwrap(err) != redis.Nil { + return nil, err + } + m2[groupID] = &sdkws.MaxAndMinSeq{ + MaxSeq: maxSeq, + MinSeq: minSeq, + } + } + } + resp.GroupMaxAndMinSeq = m2 + return resp, nil +} + +func (m *msgServer) PullMessageBySeqs(ctx context.Context, req *sdkws.PullMessageBySeqsReq) (*sdkws.PullMessageBySeqsResp, error) { + resp := &sdkws.PullMessageBySeqsResp{GroupMsgDataList: make(map[string]*sdkws.MsgDataList)} + msgs, err := m.MsgDatabase.GetMsgBySeqs(ctx, req.UserID, req.Seqs) + if err != nil { + return nil, err + } + resp.List = msgs + for groupID, list := range req.GroupSeqs { + msgs, err := m.MsgDatabase.GetSuperGroupMsgBySeqs(ctx, groupID, list.Seqs) + if err != nil { + return nil, err + } + resp.GroupMsgDataList[groupID] = &sdkws.MsgDataList{ + MsgDataList: msgs, + } + } + return resp, nil +} From 7eb28e7d0ac9a6fa58b5a83e033cb39e42837149 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Mar 2023 11:45:48 +0800 Subject: [PATCH 18/54] msg update --- internal/api/msg.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/api/msg.go b/internal/api/msg.go index a9f09d932..794efcf5e 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -213,8 +213,8 @@ func (m *Message) SendMessage(c *gin.Context) { if err != nil { log.NewError(tracelog.GetOperationID(c), "SetSendMsgStatus failed") } - resp := apistruct.ManagementSendMsgResp{ResultList: sdkws.UserSendMsgResp{ServerMsgID: respPb.ServerMsgID, ClientMsgID: respPb.ClientMsgID, SendTime: respPb.SendTime}} - apiresp.GinSuccess(c, resp) + //resp := apistruct.ManagementSendMsgResp{ResultList: sdkws.UserSendMsgResp{ServerMsgID: respPb.ServerMsgID, ClientMsgID: respPb.ClientMsgID, SendTime: respPb.SendTime}} + apiresp.GinSuccess(c, respPb) } func (m *Message) ManagementBatchSendMsg(c *gin.Context) { From c036d27b3612bb49e179621ac5e5e995cb1ea7d6 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Mar 2023 12:28:21 +0800 Subject: [PATCH 19/54] msg update --- cmd/Open-IM-SDK-Core | 2 +- internal/api/msg.go | 6 +-- internal/msggateway/callback.go | 8 +-- internal/msgtransfer/modify_msg_handler.go | 6 +-- .../msgtransfer/online_history_msg_handler.go | 6 +-- .../online_msg_to_mongo_handler.go | 4 +- .../msgtransfer/persistent_msg_handler.go | 4 +- internal/push/callback.go | 8 +-- internal/push/offlinepush/getui/push.go | 6 +-- internal/push/push_handler.go | 4 +- internal/push/push_to_client.go | 8 +-- internal/rpc/auth/auth.go | 4 +- internal/rpc/friend/black.go | 4 +- internal/rpc/friend/callback.go | 4 +- internal/rpc/group/callback.go | 8 +-- internal/rpc/group/group.go | 54 +++++++++---------- internal/rpc/msg/callback.go | 4 +- internal/rpc/msg/extend_msg_callback.go | 14 ++--- internal/rpc/msg/msg_status.go | 6 +-- internal/rpc/user/user.go | 6 +-- internal/tools/msg.go | 28 +++++----- internal/tools/msg_test.go | 4 +- pkg/common/constant/constant.go | 2 +- pkg/common/db/cache/conversation.go | 10 ++-- pkg/common/db/cache/extend_msg_set.go | 2 +- pkg/common/db/cache/group.go | 8 +-- pkg/common/db/cache/redis.go | 4 +- pkg/common/db/controller/friend.go | 4 +- pkg/common/db/controller/msg.go | 10 ++-- pkg/common/kafka/consumer_group.go | 6 +-- pkg/common/kafka/producer.go | 29 +++++----- pkg/common/log/logrus.go | 4 +- pkg/common/log/zap.go | 16 +++--- pkg/common/{tracelog => mcontext}/ctx.go | 23 +++++++- pkg/common/mw/gin.go | 2 +- pkg/common/mw/rpc_client_interceptor.go | 4 ++ pkg/common/mw/rpc_server_interceptor.go | 19 +++---- pkg/common/tokenverify/jwt_token.go | 10 ++-- pkg/rpcclient/notification/extend_msg.go | 4 +- pkg/rpcclient/notification/group.go | 48 ++++++++--------- 40 files changed, 215 insertions(+), 188 deletions(-) rename pkg/common/{tracelog => mcontext}/ctx.go (65%) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 48fd66a6e..9fd1af471 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 48fd66a6eea7ff4c5ccacddd7929bf8d7b5b40fa +Subproject commit 9fd1af471356fa122fb87587fb9501e9292fb416 diff --git a/internal/api/msg.go b/internal/api/msg.go index 794efcf5e..b8c3036c6 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -8,7 +8,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" @@ -99,7 +99,7 @@ func (m Message) newUserSendMsgReq(c *gin.Context, params *apistruct.ManagementS tips.JsonDetail = utils.StructToJsonString(params.Content) pbData.MsgData.Content, err = proto.Marshal(&tips) if err != nil { - log.Error(tracelog.GetOperationID(c), "Marshal failed ", err.Error(), tips.String()) + log.Error(mcontext.GetOperationID(c), "Marshal failed ", err.Error(), tips.String()) } } return &pbData @@ -211,7 +211,7 @@ func (m *Message) SendMessage(c *gin.Context) { Status: int32(status), }) if err != nil { - log.NewError(tracelog.GetOperationID(c), "SetSendMsgStatus failed") + log.NewError(mcontext.GetOperationID(c), "SetSendMsgStatus failed") } //resp := apistruct.ManagementSendMsgResp{ResultList: sdkws.UserSendMsgResp{ServerMsgID: respPb.ServerMsgID, ClientMsgID: respPb.ClientMsgID, SendTime: respPb.SendTime}} apiresp.GinSuccess(c, respPb) diff --git a/internal/msggateway/callback.go b/internal/msggateway/callback.go index a9aad45f8..b099d5b31 100644 --- a/internal/msggateway/callback.go +++ b/internal/msggateway/callback.go @@ -6,7 +6,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/http" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "time" ) @@ -22,7 +22,7 @@ func CallbackUserOnline(ctx context.Context, userID string, platformID int, isAp UserStatusCallbackReq: cbapi.UserStatusCallbackReq{ UserStatusBaseCallback: cbapi.UserStatusBaseCallback{ CallbackCommand: constant.CallbackUserOnlineCommand, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), PlatformID: platformID, Platform: constant.PlatformIDToName(platformID), }, @@ -44,7 +44,7 @@ func CallbackUserOffline(ctx context.Context, userID string, platformID int, con UserStatusCallbackReq: cbapi.UserStatusCallbackReq{ UserStatusBaseCallback: cbapi.UserStatusBaseCallback{ CallbackCommand: constant.CallbackUserOfflineCommand, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), PlatformID: platformID, Platform: constant.PlatformIDToName(platformID), }, @@ -65,7 +65,7 @@ func CallbackUserKickOff(ctx context.Context, userID string, platformID int) err UserStatusCallbackReq: cbapi.UserStatusCallbackReq{ UserStatusBaseCallback: cbapi.UserStatusBaseCallback{ CallbackCommand: constant.CallbackUserKickOffCommand, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), PlatformID: platformID, Platform: constant.PlatformIDToName(platformID), }, diff --git a/internal/msgtransfer/modify_msg_handler.go b/internal/msgtransfer/modify_msg_handler.go index 23f3df608..2d3f92027 100644 --- a/internal/msgtransfer/modify_msg_handler.go +++ b/internal/msgtransfer/modify_msg_handler.go @@ -10,7 +10,7 @@ import ( unRelationTb "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/unrelation" kfk "github.com/OpenIMSDK/Open-IM-Server/pkg/common/kafka" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/Shopify/sarama" @@ -54,7 +54,7 @@ func (mmc *ModifyMsgConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSessi func (mmc *ModifyMsgConsumerHandler) ModifyMsg(ctx context.Context, cMsg *sarama.ConsumerMessage, msgKey string, _ sarama.ConsumerGroupSession) { log.NewInfo("msg come here ModifyMsg!!!", "", "msg", string(cMsg.Value), msgKey) msgFromMQ := pbMsg.MsgDataToModifyByMQ{} - operationID := tracelog.GetOperationID(ctx) + operationID := mcontext.GetOperationID(ctx) err := proto.Unmarshal(cMsg.Value, &msgFromMQ) if err != nil { log.NewError(msgFromMQ.TriggerID, "msg_transfer Unmarshal msg err", "msg", string(cMsg.Value), "err", err.Error()) @@ -66,7 +66,7 @@ func (mmc *ModifyMsgConsumerHandler) ModifyMsg(ctx context.Context, cMsg *sarama if !isReactionFromCache { continue } - tracelog.SetOperationID(ctx, operationID) + mcontext.SetOperationID(ctx, operationID) if msgDataToMQ.MsgData.ContentType == constant.ReactionMessageModifier { notification := &apistruct.ReactionMessageModifierNotification{} if err := json.Unmarshal(msgDataToMQ.MsgData.Content, notification); err != nil { diff --git a/internal/msgtransfer/online_history_msg_handler.go b/internal/msgtransfer/online_history_msg_handler.go index aae33698f..ddfd2259e 100644 --- a/internal/msgtransfer/online_history_msg_handler.go +++ b/internal/msgtransfer/online_history_msg_handler.go @@ -6,7 +6,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/kafka" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/Shopify/sarama" @@ -86,8 +86,8 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { notStoragePushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.aggregationID, len(msgList)) var modifyMsgList []*pbMsg.MsgDataToMQ - ctx := tracelog.NewCtx("redis consumer") - tracelog.SetOperationID(ctx, triggerID) + ctx := mcontext.NewCtx("redis consumer") + mcontext.SetOperationID(ctx, triggerID) for _, v := range msgList { log.Debug(triggerID, "msg come to storage center", v.String()) isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) diff --git a/internal/msgtransfer/online_msg_to_mongo_handler.go b/internal/msgtransfer/online_msg_to_mongo_handler.go index 39fb9d1f8..3dd8a6e64 100644 --- a/internal/msgtransfer/online_msg_to_mongo_handler.go +++ b/internal/msgtransfer/online_msg_to_mongo_handler.go @@ -7,7 +7,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" kfk "github.com/OpenIMSDK/Open-IM-Server/pkg/common/kafka" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" @@ -33,7 +33,7 @@ func NewOnlineHistoryMongoConsumerHandler(database controller.MsgDatabase) *Onli func (mc *OnlineHistoryMongoConsumerHandler) handleChatWs2Mongo(ctx context.Context, cMsg *sarama.ConsumerMessage, msgKey string, session sarama.ConsumerGroupSession) { msg := cMsg.Value msgFromMQ := pbMsg.MsgDataToMongoByMQ{} - operationID := tracelog.GetOperationID(ctx) + operationID := mcontext.GetOperationID(ctx) err := proto.Unmarshal(msg, &msgFromMQ) if err != nil { log.Error("msg_transfer Unmarshal msg err", "", "msg", string(msg), "err", err.Error()) diff --git a/internal/msgtransfer/persistent_msg_handler.go b/internal/msgtransfer/persistent_msg_handler.go index c4785de06..19ec67201 100644 --- a/internal/msgtransfer/persistent_msg_handler.go +++ b/internal/msgtransfer/persistent_msg_handler.go @@ -13,7 +13,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" kfk "github.com/OpenIMSDK/Open-IM-Server/pkg/common/kafka" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" @@ -37,7 +37,7 @@ func NewPersistentConsumerHandler(database controller.ChatLogDatabase) *Persiste func (pc *PersistentConsumerHandler) handleChatWs2Mysql(ctx context.Context, cMsg *sarama.ConsumerMessage, msgKey string, _ sarama.ConsumerGroupSession) { msg := cMsg.Value - operationID := tracelog.GetOperationID(ctx) + operationID := mcontext.GetOperationID(ctx) log.NewInfo("msg come here mysql!!!", "", "msg", string(msg), msgKey) var tag bool msgFromMQ := pbMsg.MsgDataToMQ{} diff --git a/internal/push/callback.go b/internal/push/callback.go index 1ad07b9c3..1b0ca21a7 100644 --- a/internal/push/callback.go +++ b/internal/push/callback.go @@ -6,7 +6,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/http" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" ) @@ -23,7 +23,7 @@ func callbackOfflinePush(ctx context.Context, userIDs []string, msg *sdkws.MsgDa UserStatusBatchCallbackReq: callbackstruct.UserStatusBatchCallbackReq{ UserStatusBaseCallback: callbackstruct.UserStatusBaseCallback{ CallbackCommand: constant.CallbackOfflinePushCommand, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), PlatformID: int(msg.SenderPlatformID), Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)), }, @@ -60,7 +60,7 @@ func callbackOnlinePush(ctx context.Context, userIDs []string, msg *sdkws.MsgDat UserStatusBatchCallbackReq: callbackstruct.UserStatusBatchCallbackReq{ UserStatusBaseCallback: callbackstruct.UserStatusBaseCallback{ CallbackCommand: constant.CallbackOnlinePushCommand, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), PlatformID: int(msg.SenderPlatformID), Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)), }, @@ -85,7 +85,7 @@ func callbackBeforeSuperGroupOnlinePush(ctx context.Context, groupID string, msg req := callbackstruct.CallbackBeforeSuperGroupOnlinePushReq{ UserStatusBaseCallback: callbackstruct.UserStatusBaseCallback{ CallbackCommand: constant.CallbackSuperGroupOnlinePushCommand, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), PlatformID: int(msg.SenderPlatformID), Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)), }, diff --git a/internal/push/offlinepush/getui/push.go b/internal/push/offlinepush/getui/push.go index 2f764b755..0192b54a8 100644 --- a/internal/push/offlinepush/getui/push.go +++ b/internal/push/offlinepush/getui/push.go @@ -6,7 +6,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache" http2 "github.com/OpenIMSDK/Open-IM-Server/pkg/common/http" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils/splitter" "github.com/go-redis/redis/v8" "sync" @@ -71,7 +71,7 @@ func (g *Client) Push(ctx context.Context, userIDs []string, title, content stri go func(index int, userIDs []string) { defer wg.Done() if err2 := g.batchPush(ctx, token, userIDs, pushReq); err2 != nil { - log.NewError(tracelog.GetOperationID(ctx), "batchPush failed", i, token, pushReq) + log.NewError(mcontext.GetOperationID(ctx), "batchPush failed", i, token, pushReq) err = err2 } }(i, v.Item) @@ -132,7 +132,7 @@ func (g *Client) batchPush(ctx context.Context, token string, userIDs []string, } func (g *Client) singlePush(ctx context.Context, token, userID string, pushReq PushReq) error { - operationID := tracelog.GetOperationID(ctx) + operationID := mcontext.GetOperationID(ctx) pushReq.RequestID = &operationID pushReq.Audience = &Audience{Alias: []string{userID}} return g.request(ctx, pushURL, pushReq, token, nil) diff --git a/internal/push/push_handler.go b/internal/push/push_handler.go index c32a878c5..6d3f5d61b 100644 --- a/internal/push/push_handler.go +++ b/internal/push/push_handler.go @@ -12,7 +12,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" kfk "github.com/OpenIMSDK/Open-IM-Server/pkg/common/kafka" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbChat "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" pbPush "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/push" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" @@ -50,7 +50,7 @@ func (c *ConsumerHandler) handleMs2PsChat(ctx context.Context, msg []byte) { if nowSec-sec > 10 { return } - tracelog.SetOperationID(ctx, "") + mcontext.SetOperationID(ctx, "") var err error switch msgFromMQ.MsgData.SessionType { case constant.SuperGroupChatType: diff --git a/internal/push/push_to_client.go b/internal/push/push_to_client.go index c82d51efe..f17e09e83 100644 --- a/internal/push/push_to_client.go +++ b/internal/push/push_to_client.go @@ -19,8 +19,8 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/localcache" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msggateway" @@ -64,7 +64,7 @@ func NewOfflinePusher(cache cache.Model) offlinepush.OfflinePusher { } func (p *Pusher) MsgToUser(ctx context.Context, userID string, msg *sdkws.MsgData) error { - operationID := tracelog.GetOperationID(ctx) + operationID := mcontext.GetOperationID(ctx) var userIDs = []string{userID} log.Debug(operationID, "Get msg from msg_transfer And push msg", msg.String(), userID) // callback @@ -107,7 +107,7 @@ func (p *Pusher) MsgToUser(ctx context.Context, userID string, msg *sdkws.MsgDat } func (p *Pusher) MsgToSuperGroupUser(ctx context.Context, groupID string, msg *sdkws.MsgData) (err error) { - operationID := tracelog.GetOperationID(ctx) + operationID := mcontext.GetOperationID(ctx) log.Debug(operationID, "Get super group msg from msg_transfer And push msg", msg.String(), groupID) var pushToUserIDs []string if err := callbackBeforeSuperGroupOnlinePush(ctx, groupID, msg, &pushToUserIDs); err != nil && err != errs.ErrCallbackContinue { @@ -191,7 +191,7 @@ func (p *Pusher) GetConnsAndOnlinePush(ctx context.Context, msg *sdkws.MsgData, msgClient := msggateway.NewMsgGatewayClient(v) reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(ctx, &msggateway.OnlineBatchPushOneMsgReq{MsgData: msg, PushToUserIDs: pushToUserIDs}) if err != nil { - log.NewError(tracelog.GetOperationID(ctx), msg, len(pushToUserIDs), "err", err) + log.NewError(mcontext.GetOperationID(ctx), msg, len(pushToUserIDs), "err", err) continue } if reply != nil && reply.SinglePushResult != nil { diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 3852d5ff7..85a92f2fe 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -6,8 +6,8 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" pbAuth "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/auth" @@ -92,7 +92,7 @@ func (s *authServer) ForceLogout(ctx context.Context, req *pbAuth.ForceLogoutReq if err := tokenverify.CheckAdmin(ctx); err != nil { return nil, err } - if err := s.forceKickOff(ctx, req.UserID, req.PlatformID, tracelog.GetOperationID(ctx)); err != nil { + if err := s.forceKickOff(ctx, req.UserID, req.PlatformID, mcontext.GetOperationID(ctx)); err != nil { return nil, err } return &resp, nil diff --git a/internal/rpc/friend/black.go b/internal/rpc/friend/black.go index 9d5ef2e72..2c8cb4dde 100644 --- a/internal/rpc/friend/black.go +++ b/internal/rpc/friend/black.go @@ -5,8 +5,8 @@ import ( "time" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" pbFriend "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/friend" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/convert" ) @@ -63,7 +63,7 @@ func (s *friendServer) AddBlack(ctx context.Context, req *pbFriend.AddBlackReq) if err != nil { return nil, err } - black := relation.BlackModel{OwnerUserID: req.OwnerUserID, BlockUserID: req.BlackUserID, OperatorUserID: tracelog.GetOpUserID(ctx), CreateTime: time.Now()} + black := relation.BlackModel{OwnerUserID: req.OwnerUserID, BlockUserID: req.BlackUserID, OperatorUserID: mcontext.GetOpUserID(ctx), CreateTime: time.Now()} if err := s.BlackDatabase.Create(ctx, []*relation.BlackModel{&black}); err != nil { return nil, err } diff --git a/internal/rpc/friend/callback.go b/internal/rpc/friend/callback.go index 137bf51a7..e41cec15a 100644 --- a/internal/rpc/friend/callback.go +++ b/internal/rpc/friend/callback.go @@ -6,7 +6,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/http" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbfriend "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/friend" ) @@ -19,7 +19,7 @@ func CallbackBeforeAddFriend(ctx context.Context, req *pbfriend.ApplyToAddFriend FromUserID: req.FromUserID, ToUserID: req.ToUserID, ReqMsg: req.ReqMsg, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), } resp := &cbapi.CallbackBeforeAddFriendResp{} return http.CallBackPostReturn(config.Config.Callback.CallbackUrl, cbReq, resp, config.Config.Callback.CallbackBeforeAddFriend) diff --git a/internal/rpc/group/callback.go b/internal/rpc/group/callback.go index f5a0f1da7..1a77d1e18 100644 --- a/internal/rpc/group/callback.go +++ b/internal/rpc/group/callback.go @@ -8,7 +8,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/http" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/group" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/wrapperspb" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" @@ -21,7 +21,7 @@ func CallbackBeforeCreateGroup(ctx context.Context, req *group.CreateGroupReq) ( } cbReq := &callbackstruct.CallbackBeforeCreateGroupReq{ CallbackCommand: constant.CallbackBeforeCreateGroupCommand, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), GroupInfo: *req.GroupInfo, } cbReq.InitMemberList = append(cbReq.InitMemberList, &apistruct.GroupAddMemberInfo{ @@ -66,7 +66,7 @@ func CallbackBeforeMemberJoinGroup(ctx context.Context, groupMember *relation.Gr } callbackReq := &callbackstruct.CallbackBeforeMemberJoinGroupReq{ CallbackCommand: constant.CallbackBeforeMemberJoinGroupCommand, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), GroupID: groupMember.GroupID, UserID: groupMember.UserID, Ex: groupMember.Ex, @@ -93,7 +93,7 @@ func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *group.SetGroupMe } callbackReq := callbackstruct.CallbackBeforeSetGroupMemberInfoReq{ CallbackCommand: constant.CallbackBeforeSetGroupMemberInfoCommand, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), GroupID: req.GroupID, UserID: req.UserID, } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index fc7e63e06..a5c2d77d2 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -16,8 +16,8 @@ import ( relationTb "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/unrelation" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" pbConversation "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/conversation" @@ -63,7 +63,7 @@ type groupServer struct { func (s *groupServer) CheckGroupAdmin(ctx context.Context, groupID string) error { if !tokenverify.IsAppManagerUid(ctx) { - groupMember, err := s.GroupDatabase.TakeGroupMember(ctx, groupID, tracelog.GetOpUserID(ctx)) + groupMember, err := s.GroupDatabase.TakeGroupMember(ctx, groupID, mcontext.GetOpUserID(ctx)) if err != nil { return err } @@ -103,7 +103,7 @@ func (s *groupServer) GenGroupID(ctx context.Context, groupID *string) error { } } for i := 0; i < 10; i++ { - id := utils.Md5(strings.Join([]string{tracelog.GetOperationID(ctx), strconv.FormatInt(time.Now().UnixNano(), 10), strconv.Itoa(rand.Int())}, ",;,")) + id := utils.Md5(strings.Join([]string{mcontext.GetOperationID(ctx), strconv.FormatInt(time.Now().UnixNano(), 10), strconv.Itoa(rand.Int())}, ",;,")) bi := big.NewInt(0) bi.SetString(id[0:8], 16) id = bi.String() @@ -148,9 +148,9 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR groupMember.Nickname = "" groupMember.GroupID = group.GroupID groupMember.RoleLevel = roleLevel - groupMember.OperatorUserID = tracelog.GetOpUserID(ctx) + groupMember.OperatorUserID = mcontext.GetOpUserID(ctx) groupMember.JoinSource = constant.JoinByInvitation - groupMember.InviterUserID = tracelog.GetOpUserID(ctx) + groupMember.InviterUserID = mcontext.GetOpUserID(ctx) groupMember.JoinTime = time.Now() if err := CallbackBeforeMemberJoinGroup(ctx, groupMember, group.Ex); err != nil && err != errs.ErrCallbackContinue { return err @@ -265,7 +265,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite } if group.NeedVerification == constant.AllNeedVerification { if !tokenverify.IsAppManagerUid(ctx) { - opUserID := tracelog.GetOpUserID(ctx) + opUserID := mcontext.GetOpUserID(ctx) member, ok := memberMap[opUserID] if !ok { return nil, errs.ErrNoPermission.Wrap("not in group") @@ -303,7 +303,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite s.Notification.SuperGroupNotification(ctx, userID, userID) } } else { - opUserID := tracelog.GetOpUserID(ctx) + opUserID := mcontext.GetOpUserID(ctx) var groupMembers []*relationTb.GroupMemberModel for _, userID := range req.InvitedUserIDs { member := PbToDbGroupMember(userMap[userID]) @@ -388,7 +388,7 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou if utils.IsDuplicateStringSlice(req.KickedUserIDs) { return nil, errs.ErrArgs.Wrap("KickedUserIDs duplicate") } - opUserID := tracelog.GetOpUserID(ctx) + opUserID := mcontext.GetOpUserID(ctx) if utils.IsContain(opUserID, req.KickedUserIDs) { return nil, errs.ErrArgs.Wrap("opUserID in KickedUserIDs") } @@ -593,7 +593,7 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup JoinTime: time.Now(), JoinSource: groupRequest.JoinSource, InviterUserID: groupRequest.InviterUserID, - OperatorUserID: tracelog.GetOpUserID(ctx), + OperatorUserID: mcontext.GetOpUserID(ctx), Ex: groupRequest.Ex, } if err = CallbackBeforeMemberJoinGroup(ctx, member, group.Ex); err != nil && err != errs.ErrCallbackContinue { @@ -616,7 +616,7 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) (*pbGroup.JoinGroupResp, error) { resp := &pbGroup.JoinGroupResp{} - if _, err := s.UserCheck.GetPublicUserInfo(ctx, tracelog.GetOpUserID(ctx)); err != nil { + if _, err := s.UserCheck.GetPublicUserInfo(ctx, mcontext.GetOpUserID(ctx)); err != nil { return nil, err } group, err := s.GroupDatabase.TakeGroup(ctx, req.GroupID) @@ -630,27 +630,27 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) if group.GroupType == constant.SuperGroup { return nil, errs.ErrGroupTypeNotSupport.Wrap() } - user, err := s.UserCheck.GetUserInfo(ctx, tracelog.GetOpUserID(ctx)) + user, err := s.UserCheck.GetUserInfo(ctx, mcontext.GetOpUserID(ctx)) if err != nil { return nil, err } groupMember := PbToDbGroupMember(user) groupMember.GroupID = group.GroupID groupMember.RoleLevel = constant.GroupOrdinaryUsers - groupMember.OperatorUserID = tracelog.GetOpUserID(ctx) + groupMember.OperatorUserID = mcontext.GetOpUserID(ctx) groupMember.JoinSource = constant.JoinByInvitation - groupMember.InviterUserID = tracelog.GetOpUserID(ctx) + groupMember.InviterUserID = mcontext.GetOpUserID(ctx) if err := CallbackBeforeMemberJoinGroup(ctx, groupMember, group.Ex); err != nil && err != errs.ErrCallbackContinue { return nil, err } if err := s.GroupDatabase.CreateGroup(ctx, nil, []*relationTb.GroupMemberModel{groupMember}); err != nil { return nil, err } - s.Notification.MemberEnterDirectlyNotification(ctx, req.GroupID, tracelog.GetOpUserID(ctx), tracelog.GetOperationID(ctx)) + s.Notification.MemberEnterDirectlyNotification(ctx, req.GroupID, mcontext.GetOpUserID(ctx), mcontext.GetOperationID(ctx)) return resp, nil } groupRequest := relationTb.GroupRequestModel{ - UserID: tracelog.GetOpUserID(ctx), + UserID: mcontext.GetOpUserID(ctx), ReqMsg: req.ReqMessage, GroupID: req.GroupID, JoinSource: req.JoinSource, @@ -670,12 +670,12 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) return nil, err } if group.GroupType == constant.SuperGroup { - if err := s.GroupDatabase.DeleteSuperGroupMember(ctx, req.GroupID, []string{tracelog.GetOpUserID(ctx)}); err != nil { + if err := s.GroupDatabase.DeleteSuperGroupMember(ctx, req.GroupID, []string{mcontext.GetOpUserID(ctx)}); err != nil { return nil, err } - s.Notification.SuperGroupNotification(ctx, tracelog.GetOpUserID(ctx), tracelog.GetOpUserID(ctx)) + s.Notification.SuperGroupNotification(ctx, mcontext.GetOpUserID(ctx), mcontext.GetOpUserID(ctx)) } else { - _, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, tracelog.GetOpUserID(ctx)) + _, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, mcontext.GetOpUserID(ctx)) if err != nil { return nil, err } @@ -687,7 +687,7 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq) func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInfoReq) (*pbGroup.SetGroupInfoResp, error) { resp := &pbGroup.SetGroupInfoResp{} if !tokenverify.IsAppManagerUid(ctx) { - groupMember, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupInfoForSet.GroupID, tracelog.GetOpUserID(ctx)) + groupMember, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupInfoForSet.GroupID, mcontext.GetOpUserID(ctx)) if err != nil { return nil, err } @@ -721,7 +721,7 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf if req.GroupInfoForSet.Notification != "" { args := pbConversation.ModifyConversationFieldReq{ Conversation: &pbConversation.Conversation{ - OwnerUserID: tracelog.GetOpUserID(ctx), + OwnerUserID: mcontext.GetOpUserID(ctx), ConversationID: utils.GetConversationIDBySessionType(group.GroupID, constant.GroupChatType), ConversationType: constant.GroupChatType, GroupID: group.GroupID, @@ -772,8 +772,8 @@ func (s *groupServer) TransferGroupOwner(ctx context.Context, req *pbGroup.Trans if oldOwner == nil { return nil, errs.ErrArgs.Wrap("OldOwnerUser not in group " + req.NewOwnerUserID) } - if oldOwner.GroupID != tracelog.GetOpUserID(ctx) { - return nil, errs.ErrNoPermission.Wrap(fmt.Sprintf("user %s no permission transfer group owner", tracelog.GetOpUserID(ctx))) + if oldOwner.GroupID != mcontext.GetOpUserID(ctx) { + return nil, errs.ErrNoPermission.Wrap(fmt.Sprintf("user %s no permission transfer group owner", mcontext.GetOpUserID(ctx))) } } if err := s.GroupDatabase.TransferGroupOwner(ctx, req.GroupID, req.OldOwnerUserID, req.NewOwnerUserID, newOwner.RoleLevel); err != nil { @@ -922,7 +922,7 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou if err != nil { return nil, err } - if !(tracelog.GetOpUserID(ctx) == req.UserID || tokenverify.IsAppManagerUid(ctx)) { + if !(mcontext.GetOpUserID(ctx) == req.UserID || tokenverify.IsAppManagerUid(ctx)) { opMember, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.UserID) if err != nil { return nil, err @@ -945,8 +945,8 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca if err != nil { return nil, err } - if !(tracelog.GetOpUserID(ctx) == req.UserID || tokenverify.IsAppManagerUid(ctx)) { - opMember, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, tracelog.GetOpUserID(ctx)) + if !(mcontext.GetOpUserID(ctx) == req.UserID || tokenverify.IsAppManagerUid(ctx)) { + opMember, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, mcontext.GetOpUserID(ctx)) if err != nil { return nil, err } @@ -1005,7 +1005,7 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr } groupIDs := utils.Keys(groupIDMap) userIDs := utils.Keys(userIDMap) - members, err := s.GroupDatabase.FindGroupMember(ctx, groupIDs, append(userIDs, tracelog.GetOpUserID(ctx)), nil) + members, err := s.GroupDatabase.FindGroupMember(ctx, groupIDs, append(userIDs, mcontext.GetOpUserID(ctx)), nil) if err != nil { return nil, err } @@ -1021,7 +1021,7 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr return [...]string{e.GroupID, e.UserID} }) if !tokenverify.IsAppManagerUid(ctx) { - opUserID := tracelog.GetOpUserID(ctx) + opUserID := mcontext.GetOpUserID(ctx) for _, member := range members { if member.UserID == opUserID { continue diff --git a/internal/rpc/msg/callback.go b/internal/rpc/msg/callback.go index 0cbb7d6e2..fa648248c 100644 --- a/internal/rpc/msg/callback.go +++ b/internal/rpc/msg/callback.go @@ -6,7 +6,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/http" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbChat "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" ) @@ -21,7 +21,7 @@ func toCommonCallback(ctx context.Context, msg *pbChat.SendMsgReq, command strin ServerMsgID: msg.MsgData.ServerMsgID, CallbackCommand: command, ClientMsgID: msg.MsgData.ClientMsgID, - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), SenderPlatformID: msg.MsgData.SenderPlatformID, SenderNickname: msg.MsgData.SenderNickname, SessionType: msg.MsgData.SessionType, diff --git a/internal/rpc/msg/extend_msg_callback.go b/internal/rpc/msg/extend_msg_callback.go index 8eaf5696b..63e7ee4d5 100644 --- a/internal/rpc/msg/extend_msg_callback.go +++ b/internal/rpc/msg/extend_msg_callback.go @@ -6,7 +6,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/http" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" ) @@ -15,10 +15,10 @@ func CallbackSetMessageReactionExtensions(ctx context.Context, setReq *msg.SetMe return nil } req := &cbapi.CallbackBeforeSetMessageReactionExtReq{ - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), CallbackCommand: constant.CallbackBeforeSetMessageReactionExtensionCommand, SourceID: setReq.SourceID, - OpUserID: tracelog.GetOpUserID(ctx), + OpUserID: mcontext.GetOpUserID(ctx), SessionType: setReq.SessionType, ReactionExtensionList: setReq.ReactionExtensions, ClientMsgID: setReq.ClientMsgID, @@ -58,10 +58,10 @@ func CallbackGetMessageListReactionExtensions(ctx context.Context, getReq *msg.G return nil } req := &cbapi.CallbackGetMessageListReactionExtReq{ - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), CallbackCommand: constant.CallbackGetMessageListReactionExtensionsCommand, SourceID: getReq.SourceID, - OpUserID: tracelog.GetOperationID(ctx), + OpUserID: mcontext.GetOperationID(ctx), SessionType: getReq.SessionType, TypeKeyList: getReq.TypeKeys, } @@ -71,10 +71,10 @@ func CallbackGetMessageListReactionExtensions(ctx context.Context, getReq *msg.G func CallbackAddMessageReactionExtensions(ctx context.Context, setReq *msg.ModifyMessageReactionExtensionsReq) error { req := &cbapi.CallbackAddMessageReactionExtReq{ - OperationID: tracelog.GetOperationID(ctx), + OperationID: mcontext.GetOperationID(ctx), CallbackCommand: constant.CallbackAddMessageListReactionExtensionsCommand, SourceID: setReq.SourceID, - OpUserID: tracelog.GetOperationID(ctx), + OpUserID: mcontext.GetOperationID(ctx), SessionType: setReq.SessionType, ReactionExtensionList: setReq.ReactionExtensions, ClientMsgID: setReq.ClientMsgID, diff --git a/internal/rpc/msg/msg_status.go b/internal/rpc/msg/msg_status.go index 4fd521b38..5639ecc01 100644 --- a/internal/rpc/msg/msg_status.go +++ b/internal/rpc/msg/msg_status.go @@ -3,13 +3,13 @@ package msg import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" ) func (m *msgServer) SetSendMsgStatus(ctx context.Context, req *pbMsg.SetSendMsgStatusReq) (*pbMsg.SetSendMsgStatusResp, error) { resp := &pbMsg.SetSendMsgStatusResp{} - if err := m.MsgDatabase.SetSendMsgStatus(ctx, tracelog.GetOperationID(ctx), req.Status); err != nil { + if err := m.MsgDatabase.SetSendMsgStatus(ctx, mcontext.GetOperationID(ctx), req.Status); err != nil { return nil, err } return resp, nil @@ -17,7 +17,7 @@ func (m *msgServer) SetSendMsgStatus(ctx context.Context, req *pbMsg.SetSendMsgS func (m *msgServer) GetSendMsgStatus(ctx context.Context, req *pbMsg.GetSendMsgStatusReq) (*pbMsg.GetSendMsgStatusResp, error) { resp := &pbMsg.GetSendMsgStatusResp{} - status, err := m.MsgDatabase.GetSendMsgStatus(ctx, tracelog.GetOperationID(ctx)) + status, err := m.MsgDatabase.GetSendMsgStatus(ctx, mcontext.GetOperationID(ctx)) if IsNotFound(err) { resp.Status = constant.MsgStatusNotExist return resp, nil diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index 51da13eba..9d716922a 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -8,8 +8,8 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/relation" tablerelation "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" registry "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" @@ -92,10 +92,10 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbuser.UpdateUserI } go func() { for _, v := range friends { - s.notification.FriendInfoUpdatedNotification(ctx, req.UserInfo.UserID, v, tracelog.GetOpUserID(ctx)) + s.notification.FriendInfoUpdatedNotification(ctx, req.UserInfo.UserID, v, mcontext.GetOpUserID(ctx)) } }() - s.notification.UserInfoUpdatedNotification(ctx, tracelog.GetOpUserID(ctx), req.UserInfo.UserID) + s.notification.UserInfoUpdatedNotification(ctx, mcontext.GetOpUserID(ctx), req.UserInfo.UserID) return resp, nil } diff --git a/internal/tools/msg.go b/internal/tools/msg.go index 8a1ff62ac..60d4815d7 100644 --- a/internal/tools/msg.go +++ b/internal/tools/msg.go @@ -11,7 +11,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/relation" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/unrelation" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/go-redis/redis/v8" "math" @@ -59,7 +59,7 @@ func (c *MsgTool) getCronTaskOperationID() string { func (c *MsgTool) AllUserClearMsgAndFixSeq() { operationID := "AllUserAndGroupClearMsgAndFixSeq" - ctx := tracelog.NewCtx(utils.GetSelfFuncName()) + ctx := mcontext.NewCtx(utils.GetSelfFuncName()) log.NewInfo(operationID, "============================ start del cron task ============================") var err error userIDList, err := c.userDatabase.GetAllUserID(ctx) @@ -81,7 +81,7 @@ func (c *MsgTool) AllUserClearMsgAndFixSeq() { func (c *MsgTool) ClearUsersMsg(ctx context.Context, userIDs []string) { for _, userID := range userIDs { if err := c.msgDatabase.DeleteUserMsgsAndSetMinSeq(ctx, userID, int64(config.Config.Mongo.DBRetainChatRecords*24*60*60)); err != nil { - log.NewError(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), userID) + log.NewError(mcontext.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), userID) } maxSeqCache, maxSeqMongo, err := c.GetAndFixUserSeqs(ctx, userID) if err != nil { @@ -95,14 +95,14 @@ func (c *MsgTool) ClearSuperGroupMsg(ctx context.Context, superGroupIDs []string for _, groupID := range superGroupIDs { userIDs, err := c.groupDatabase.FindGroupMemberUserID(ctx, groupID) if err != nil { - log.NewError(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), "FindGroupMemberUserID", err.Error(), groupID) + log.NewError(mcontext.GetOperationID(ctx), utils.GetSelfFuncName(), "FindGroupMemberUserID", err.Error(), groupID) continue } if err := c.msgDatabase.DeleteUserSuperGroupMsgsAndSetMinSeq(ctx, groupID, userIDs, int64(config.Config.Mongo.DBRetainChatRecords*24*60*60)); err != nil { - log.NewError(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), "DeleteUserSuperGroupMsgsAndSetMinSeq failed", groupID, userIDs, config.Config.Mongo.DBRetainChatRecords) + log.NewError(mcontext.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), "DeleteUserSuperGroupMsgsAndSetMinSeq failed", groupID, userIDs, config.Config.Mongo.DBRetainChatRecords) } if err := c.fixGroupSeq(ctx, groupID, userIDs); err != nil { - log.NewError(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), groupID, userIDs) + log.NewError(mcontext.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), groupID, userIDs) } } } @@ -129,7 +129,7 @@ func (c *MsgTool) fixGroupSeq(ctx context.Context, groupID string, userIDs []str } } if err := c.CheckMaxSeqWithMongo(ctx, groupID, maxSeqCache, maxSeqMongo, constant.WriteDiffusion); err != nil { - log.NewWarn(tracelog.GetOperationID(ctx), "cache max seq and mongo max seq is diff > 10", groupID, maxSeqCache, maxSeqMongo, constant.WriteDiffusion) + log.NewWarn(mcontext.GetOperationID(ctx), "cache max seq and mongo max seq is diff > 10", groupID, maxSeqCache, maxSeqMongo, constant.WriteDiffusion) } return nil } @@ -138,16 +138,16 @@ func (c *MsgTool) GetAndFixUserSeqs(ctx context.Context, userID string) (maxSeqC minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache, err := c.msgDatabase.GetUserMinMaxSeqInMongoAndCache(ctx, userID) if err != nil { if err != unrelation.ErrMsgNotFound { - log.NewError(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), "GetUserMinMaxSeqInMongoAndCache failed", userID) + log.NewError(mcontext.GetOperationID(ctx), utils.GetSelfFuncName(), err.Error(), "GetUserMinMaxSeqInMongoAndCache failed", userID) } return 0, 0, err } - log.NewDebug(tracelog.GetOperationID(ctx), userID, minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache) + log.NewDebug(mcontext.GetOperationID(ctx), userID, minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache) if minSeqCache > maxSeqCache { if err := c.msgDatabase.SetUserMinSeq(ctx, userID, maxSeqCache); err != nil { - log.NewError(tracelog.GetOperationID(ctx), "SetUserMinSeq failed", userID, minSeqCache, maxSeqCache) + log.NewError(mcontext.GetOperationID(ctx), "SetUserMinSeq failed", userID, minSeqCache, maxSeqCache) } else { - log.NewWarn(tracelog.GetOperationID(ctx), "SetUserMinSeq success", userID, minSeqCache, maxSeqCache) + log.NewWarn(mcontext.GetOperationID(ctx), "SetUserMinSeq success", userID, minSeqCache, maxSeqCache) } } return maxSeqCache, maxSeqMongo, nil @@ -156,14 +156,14 @@ func (c *MsgTool) GetAndFixUserSeqs(ctx context.Context, userID string) (maxSeqC func (c *MsgTool) GetAndFixGroupUserSeq(ctx context.Context, userID string, groupID string, maxSeqCache int64) (minSeqCache int64, err error) { minSeqCache, err = c.msgDatabase.GetGroupUserMinSeq(ctx, groupID, userID) if err != nil { - log.NewError(tracelog.GetOperationID(ctx), "GetGroupUserMinSeq failed", groupID, userID) + log.NewError(mcontext.GetOperationID(ctx), "GetGroupUserMinSeq failed", groupID, userID) return 0, err } if minSeqCache > maxSeqCache { if err := c.msgDatabase.SetGroupUserMinSeq(ctx, groupID, userID, maxSeqCache); err != nil { - log.NewError(tracelog.GetOperationID(ctx), "SetGroupUserMinSeq failed", userID, minSeqCache, maxSeqCache) + log.NewError(mcontext.GetOperationID(ctx), "SetGroupUserMinSeq failed", userID, minSeqCache, maxSeqCache) } else { - log.NewWarn(tracelog.GetOperationID(ctx), "SetGroupUserMinSeq success", userID, minSeqCache, maxSeqCache) + log.NewWarn(mcontext.GetOperationID(ctx), "SetGroupUserMinSeq success", userID, minSeqCache, maxSeqCache) } } return minSeqCache, nil diff --git a/internal/tools/msg_test.go b/internal/tools/msg_test.go index 1441a23eb..d3a62b5f5 100644 --- a/internal/tools/msg_test.go +++ b/internal/tools/msg_test.go @@ -4,7 +4,7 @@ import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/cache" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/golang/protobuf/proto" @@ -66,7 +66,7 @@ func TestDeleteMongoMsgAndResetRedisSeq(t *testing.T) { mongoClient := mgo.GetDatabase().Collection(unRelationTb.MsgDocModel{}.TableName()) ctx := context.Background() - tracelog.SetOperationID(ctx, operationID) + mcontext.SetOperationID(ctx, operationID) testUID1 := "test_del_id1" _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID1 + ":" + strconv.Itoa(0)}) if err != nil { diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index e553be29b..ef1390bf6 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -273,7 +273,7 @@ const ( const OperationID = "operationID" const OpUserID = "opUserID" const ConnID = "connID" -const OpUserIDPlatformID = "platformID" +const OpUserPlatform = "platform" const Token = "token" const ( diff --git a/pkg/common/db/cache/conversation.go b/pkg/common/db/cache/conversation.go index edd84ae24..8501ce7c2 100644 --- a/pkg/common/db/cache/conversation.go +++ b/pkg/common/db/cache/conversation.go @@ -133,7 +133,7 @@ func (c *ConversationRedis) getSuperGroupRecvNotNotifyUserIDsKey(groupID string) // // return string(bytes), nil // //} // //defer func() { -// // tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversationIDs", conversationIDs) +// // mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversationIDs", conversationIDs) // //}() // //conversationIDsStr, err := c.rcClient.Fetch(c.getConversationIDsKey(ownerUserID), time.Second*30*60, getConversationIDs) // //err = json.Unmarshal([]byte(conversationIDsStr), &conversationIDs) @@ -159,7 +159,7 @@ func (c *ConversationRedis) GetUserConversationIDs1(ctx context.Context, ownerUs // return string(bytes), nil //} //defer func() { - // tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversationIDs", conversationIDs) + // mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversationIDs", conversationIDs) //}() //conversationIDsStr, err := c.rcClient.Fetch(c.getConversationIDsKey(ownerUserID), time.Second*30*60, getConversationIDs) //err = json.Unmarshal([]byte(conversationIDsStr), &conversationIDs) @@ -213,7 +213,7 @@ func (c *ConversationRedis) DelConversation(ctx context.Context, ownerUserID, co //func (c *ConversationRedis) GetConversations(ctx context.Context, ownerUserID string, conversationIDs []string) (conversations []relationTb.ConversationModel, err error) { // defer func() { -// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversationIDs", conversationIDs, "conversations", conversations) +// mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversationIDs", conversationIDs, "conversations", conversations) // }() // for _, conversationID := range conversationIDs { // conversation, err := c.GetConversation(ctx, ownerUserID, conversationID) @@ -227,7 +227,7 @@ func (c *ConversationRedis) DelConversation(ctx context.Context, ownerUserID, co //func (c *ConversationRedis) GetUserAllConversations(ctx context.Context, ownerUserID string) (conversations []relationTb.ConversationModel, err error) { // defer func() { -// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversations", conversations) +// mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversations", conversations) // }() // IDs, err := c.GetUserConversationIDs(ctx, ownerUserID) // if err != nil { @@ -253,7 +253,7 @@ func (c *ConversationRedis) DelConversation(ctx context.Context, ownerUserID, co // // return strconv.Itoa(int(conversation.RecvMsgOpt)), nil // //} // //defer func() { -// // tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversationID", conversationID, "opt", opt) +// // mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "conversationID", conversationID, "opt", opt) // //}() // //optStr, err := c.rcClient.Fetch(c.getConversationKey(ownerUserID, conversationID), c.expireTime, getConversation) // //if err != nil { diff --git a/pkg/common/db/cache/extend_msg_set.go b/pkg/common/db/cache/extend_msg_set.go index 755965317..bbd04fa0c 100644 --- a/pkg/common/db/cache/extend_msg_set.go +++ b/pkg/common/db/cache/extend_msg_set.go @@ -35,7 +35,7 @@ func (e *ExtendMsgSetCache) GetExtendMsg(ctx context.Context, sourceID string, s // return string(bytes), nil //} //defer func() { - // tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "sourceID", sourceID, "sessionType", + // mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "sourceID", sourceID, "sessionType", // sessionType, "clientMsgID", clientMsgID, "firstModifyTime", firstModifyTime, "extendMsg", extendMsg) //}() //extendMsgStr, err := db.DB.Rc.Fetch(extendMsgCache+clientMsgID, time.Second*30*60, getExtendMsg) diff --git a/pkg/common/db/cache/group.go b/pkg/common/db/cache/group.go index c7aa47497..e9d47cb1c 100644 --- a/pkg/common/db/cache/group.go +++ b/pkg/common/db/cache/group.go @@ -187,7 +187,7 @@ func (g *GroupCacheRedis) DelGroupMemberIDs(ctx context.Context, groupID string) // return string(bytes), nil // } // defer func() { -// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "joinedGroupIDs", joinedGroupIDs) +// mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "joinedGroupIDs", joinedGroupIDs) // }() // joinedGroupIDListStr, err := g.rcClient.Fetch(g.getJoinedGroupsKey(userID), time.Second*30*60, getJoinedGroupIDList) // if err != nil { @@ -203,7 +203,7 @@ func (g *GroupCacheRedis) DelJoinedGroupID(ctx context.Context, userID string) ( //func (g *GroupCacheRedis) DelJoinedGroupIDs(ctx context.Context, userIDs []string) (err error) { // defer func() { -// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID) +// mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID) // }() // for _, userID := range userIDs { // if err := g.DelJoinedGroupID(ctx, userID); err != nil { @@ -226,7 +226,7 @@ func (g *GroupCacheRedis) GetGroupMemberInfo(ctx context.Context, groupID, userI //func (g *GroupCacheRedis) GetGroupMembersInfo(ctx context.Context, count, offset int32, groupID string) (groupMembers []*relation.GroupMember, err error) { // defer func() { -// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "count", count, "offset", offset, "groupID", groupID, "groupMember", groupMembers) +// mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "count", count, "offset", offset, "groupID", groupID, "groupMember", groupMembers) // }() // groupMemberIDList, err := g.GetGroupMemberIDs(ctx, groupID) // if err != nil { @@ -283,7 +283,7 @@ func (g *GroupCacheRedis) DelGroupMemberInfo(ctx context.Context, groupID, userI // return strconv.Itoa(int(num)), nil // } // defer func() { -// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "num", num) +// mcontext.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "num", num) // }() // groupMember, err := g.rcClient.Fetch(g.getGroupMemberNumKey(groupID), time.Second*30*60, getGroupMemberNum) // if err != nil { diff --git a/pkg/common/db/cache/redis.go b/pkg/common/db/cache/redis.go index 859b4c16d..90fedf869 100644 --- a/pkg/common/db/cache/redis.go +++ b/pkg/common/db/cache/redis.go @@ -7,7 +7,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbMsg "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" @@ -251,7 +251,7 @@ func (c *cache) SetMessageToCache(ctx context.Context, userID string, msgList [] } } if len(failedMsgs) != 0 { - return len(failedMsgs), errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedMsgs, tracelog.GetOperationID(ctx))) + return len(failedMsgs), errors.New(fmt.Sprintf("set msg to cache failed, failed lists: %q,%s", failedMsgs, mcontext.GetOperationID(ctx))) } _, err := pipe.Exec(ctx) return 0, err diff --git a/pkg/common/db/controller/friend.go b/pkg/common/db/controller/friend.go index 553e52d17..f36918132 100644 --- a/pkg/common/db/controller/friend.go +++ b/pkg/common/db/controller/friend.go @@ -7,7 +7,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/table/relation" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/tx" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "gorm.io/gorm" @@ -104,7 +104,7 @@ func (f *friendDatabase) BecomeFriends(ctx context.Context, ownerUserID string, if err != nil { return err } - opUserID := tracelog.GetOperationID(ctx) + opUserID := mcontext.GetOperationID(ctx) for _, v := range friendUserIDs { fs1 = append(fs1, &relation.FriendModel{OwnerUserID: ownerUserID, FriendUserID: v, AddSource: addSource, OperatorUserID: opUserID}) } diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go index 91233a139..ec06c1a43 100644 --- a/pkg/common/db/controller/msg.go +++ b/pkg/common/db/controller/msg.go @@ -9,8 +9,8 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/unrelation" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/kafka" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" "github.com/gogo/protobuf/sortkeys" "sync" "time" @@ -498,7 +498,7 @@ func (db *msgDatabase) GetMsgBySeqs(ctx context.Context, userID string, seqs []i if err != nil { if err != redis.Nil { prome.Add(prome.MsgPullFromRedisFailedCounter, len(failedSeqs)) - log.Error(tracelog.GetOperationID(ctx), "get message from redis exception", err.Error(), failedSeqs) + log.Error(mcontext.GetOperationID(ctx), "get message from redis exception", err.Error(), failedSeqs) } } prome.Add(prome.MsgPullFromRedisSuccessCounter, len(successMsgs)) @@ -519,7 +519,7 @@ func (db *msgDatabase) GetSuperGroupMsgBySeqs(ctx context.Context, groupID strin if err != nil { if err != redis.Nil { prome.Add(prome.MsgPullFromRedisFailedCounter, len(failedSeqs)) - log.Error(tracelog.GetOperationID(ctx), "get message from redis exception", err.Error(), failedSeqs) + log.Error(mcontext.GetOperationID(ctx), "get message from redis exception", err.Error(), failedSeqs) } } prome.Add(prome.MsgPullFromRedisSuccessCounter, len(successMsgs)) @@ -604,7 +604,7 @@ func (db *msgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string, if err != nil || msgs.DocID == "" { if err != nil { if err == unrelation.ErrMsgListNotExist { - log.NewDebug(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), "ID:", sourceID, "index:", index, err.Error()) + log.NewDebug(mcontext.GetOperationID(ctx), utils.GetSelfFuncName(), "ID:", sourceID, "index:", index, err.Error()) } else { //log.NewError(operationID, utils.GetSelfFuncName(), "GetUserMsgListByIndex failed", err.Error(), index, ID) } @@ -618,7 +618,7 @@ func (db *msgDatabase) deleteMsgRecursion(ctx context.Context, sourceID string, } //log.NewDebug(operationID, "ID:", sourceID, "index:", index, "uid:", msgs.UID, "len:", len(msgs.Msg)) if int64(len(msgs.Msg)) > db.msg.GetSingleGocMsgNum() { - log.NewWarn(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), "msgs too large:", len(msgs.Msg), "docID:", msgs.DocID) + log.NewWarn(mcontext.GetOperationID(ctx), utils.GetSelfFuncName(), "msgs too large:", len(msgs.Msg), "docID:", msgs.DocID) } if msgs.Msg[len(msgs.Msg)-1].SendTime+(remainTime*1000) < utils.GetCurrentTimestampByMill() && msgs.IsFull() { delStruct.delDocIDs = append(delStruct.delDocIDs, msgs.DocID) diff --git a/pkg/common/kafka/consumer_group.go b/pkg/common/kafka/consumer_group.go index 21e96cd0d..7bc29fda2 100644 --- a/pkg/common/kafka/consumer_group.go +++ b/pkg/common/kafka/consumer_group.go @@ -9,7 +9,7 @@ package kafka import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/Shopify/sarama" ) @@ -43,14 +43,14 @@ func NewMConsumerGroup(consumerConfig *MConsumerGroupConfig, topics, addrs []str } func (mc *MConsumerGroup) GetContextFromMsg(cMsg *sarama.ConsumerMessage, rootFuncName string) context.Context { - ctx := tracelog.NewCtx(rootFuncName) + ctx := mcontext.NewCtx(rootFuncName) var operationID string for _, v := range cMsg.Headers { if string(v.Key) == constant.OperationID { operationID = string(v.Value) } } - tracelog.SetOperationID(ctx, operationID) + mcontext.SetOperationID(ctx, operationID) return ctx } diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index e8a350fc9..910078525 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -6,7 +6,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" log "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/Shopify/sarama" @@ -15,6 +15,8 @@ import ( prome "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" ) +var emptyMsg = errors.New("binary msg is empty") + type Producer struct { topic string addr []string @@ -47,30 +49,33 @@ func NewKafkaProducer(addr []string, topic string) *Producer { } func (p *Producer) SendMessage(ctx context.Context, key string, m proto.Message) (int32, int64, error) { - operationID := tracelog.GetOperationID(ctx) - log.Info(operationID, "SendMessage", "key ", key, m.String(), p.producer) + log.ZDebug(ctx, "SendMessage", "key ", key, "msg", m.String()) kMsg := &sarama.ProducerMessage{} kMsg.Topic = p.topic kMsg.Key = sarama.StringEncoder(key) bMsg, err := proto.Marshal(m) if err != nil { - log.Error(operationID, "", "proto marshal err = %s", err.Error()) - return -1, -1, err + return 0, 0, utils.Wrap(err, "kafka proto Marshal err") } if len(bMsg) == 0 { - log.Error(operationID, "len(bMsg) == 0 ") - return 0, 0, errors.New("len(bMsg) == 0 ") + return 0, 0, utils.Wrap(emptyMsg, "") } kMsg.Value = sarama.ByteEncoder(bMsg) - log.Info(operationID, "ByteEncoder SendMessage begin", "key ", kMsg, p.producer, "len: ", kMsg.Key.Length(), kMsg.Value.Length()) if kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 { - log.Error(operationID, "kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 ", kMsg) - return -1, -1, errors.New("key or value == 0") + return 0, 0, utils.Wrap(emptyMsg, "") } kMsg.Metadata = ctx - kMsg.Headers = []sarama.RecordHeader{{Key: []byte(constant.OperationID), Value: []byte(operationID)}} + operationID, opUserID, platform, connID, err := mcontext.GetMustCtxInfo(ctx) + if err != nil { + return 0, 0, utils.Wrap(err, "") + } + kMsg.Headers = []sarama.RecordHeader{ + {Key: []byte(constant.OperationID), Value: []byte(operationID)}, + {Key: []byte(constant.OpUserID), Value: []byte(opUserID)}, + {Key: []byte(constant.OpUserPlatform), Value: []byte(platform)}, + {Key: []byte(constant.ConnID), Value: []byte(connID)}} partition, offset, err := p.producer.SendMessage(kMsg) - log.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg.Key.Length(), kMsg.Value.Length(), p.producer) + log.ZDebug(ctx, "ByteEncoder SendMessage end", "key ", kMsg.Key.Length(), "key length", kMsg.Value.Length()) if err == nil { prome.Inc(prome.SendMsgCounter) } diff --git a/pkg/common/log/logrus.go b/pkg/common/log/logrus.go index cd4d40921..9aa432fcb 100644 --- a/pkg/common/log/logrus.go +++ b/pkg/common/log/logrus.go @@ -4,7 +4,7 @@ import ( "bufio" "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" //"bufio" "fmt" @@ -99,7 +99,7 @@ func loggerInit(moduleName string) *LogrusLogger { } func InfoKv(ctx context.Context, msg string, keysAndValues ...interface{}) { - operationID := tracelog.GetOperationID(ctx) + operationID := mcontext.GetOperationID(ctx) logger.WithFields(logrus.Fields{ "OperationID": operationID, "PID": logger.Pid, diff --git a/pkg/common/log/zap.go b/pkg/common/log/zap.go index 4a5c2efa2..a405fd2e4 100644 --- a/pkg/common/log/zap.go +++ b/pkg/common/log/zap.go @@ -4,7 +4,7 @@ import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" rotatelogs "github.com/lestrrat-go/file-rotatelogs" "os" "path/filepath" @@ -139,22 +139,22 @@ func (l *ZapLogger) Error(ctx context.Context, msg string, err error, keysAndVal if err != nil { keysAndValues = append(keysAndValues, "error", err.Error()) } - keysAndValues = append([]interface{}{constant.OperationID, tracelog.GetOperationID(ctx)}, keysAndValues...) + keysAndValues = append([]interface{}{constant.OperationID, mcontext.GetOperationID(ctx)}, keysAndValues...) l.zap.Errorw(msg, keysAndValues...) } func (l *ZapLogger) kvAppend(ctx context.Context, keysAndValues []interface{}) []interface{} { - operationID := tracelog.GetOperationID(ctx) - opUserID := tracelog.GetOpUserID(ctx) - connID := tracelog.GetConnID(ctx) + operationID := mcontext.GetOperationID(ctx) + opUserID := mcontext.GetOpUserID(ctx) + connID := mcontext.GetConnID(ctx) if opUserID != "" { - keysAndValues = append([]interface{}{constant.OpUserID, tracelog.GetOpUserID(ctx)}, keysAndValues...) + keysAndValues = append([]interface{}{constant.OpUserID, mcontext.GetOpUserID(ctx)}, keysAndValues...) } if operationID != "" { - keysAndValues = append([]interface{}{constant.OperationID, tracelog.GetOperationID(ctx)}, keysAndValues...) + keysAndValues = append([]interface{}{constant.OperationID, mcontext.GetOperationID(ctx)}, keysAndValues...) } if connID != "" { - keysAndValues = append([]interface{}{constant.ConnID, tracelog.GetConnID(ctx)}, keysAndValues...) + keysAndValues = append([]interface{}{constant.ConnID, mcontext.GetConnID(ctx)}, keysAndValues...) } return keysAndValues } diff --git a/pkg/common/tracelog/ctx.go b/pkg/common/mcontext/ctx.go similarity index 65% rename from pkg/common/tracelog/ctx.go rename to pkg/common/mcontext/ctx.go index 409b5614f..bbb26f41c 100644 --- a/pkg/common/tracelog/ctx.go +++ b/pkg/common/mcontext/ctx.go @@ -1,8 +1,9 @@ -package tracelog +package mcontext import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" + "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" ) func NewCtx(operationID string) context.Context { @@ -33,6 +34,26 @@ func GetOperationID(ctx context.Context) string { } return "" } +func GetMustCtxInfo(ctx context.Context) (operationID, opUserID, platform, connID string, err error) { + operationID, ok := ctx.Value(constant.OperationID).(string) + if !ok { + err = errs.ErrArgs.Wrap("ctx missing operationID") + return + } + opUserID, ok1 := ctx.Value(constant.OpUserID).(string) + if !ok1 { + err = errs.ErrArgs.Wrap("ctx missing opUserID") + return + } + platform, ok2 := ctx.Value(constant.OpUserPlatform).(string) + if !ok2 { + err = errs.ErrArgs.Wrap("ctx missing platform") + return + } + connID, _ = ctx.Value(constant.ConnID).(string) + return + +} func GetOpUserID(ctx context.Context) string { if ctx.Value(constant.OpUserID) != "" { diff --git a/pkg/common/mw/gin.go b/pkg/common/mw/gin.go index 23606c041..3ac61fef1 100644 --- a/pkg/common/mw/gin.go +++ b/pkg/common/mw/gin.go @@ -153,7 +153,7 @@ func GinParseToken(rdb redis.UniversalClient) gin.HandlerFunc { return } } - c.Set(constant.OpUserIDPlatformID, constant.PlatformNameToID(claims.Platform)) + c.Set(constant.OpUserPlatform, claims.Platform) c.Set(constant.OpUserID, claims.UID) c.Next() } diff --git a/pkg/common/mw/rpc_client_interceptor.go b/pkg/common/mw/rpc_client_interceptor.go index 5d649d79b..3ee56ddbd 100644 --- a/pkg/common/mw/rpc_client_interceptor.go +++ b/pkg/common/mw/rpc_client_interceptor.go @@ -32,6 +32,10 @@ func rpcClientInterceptor(ctx context.Context, method string, req, resp interfac if ok { md.Append(constant.OpUserID, opUserID) } + opUserIDPlatformID, ok := ctx.Value(constant.OpUserPlatform).(string) + if ok { + md.Append(constant.OpUserPlatform, opUserIDPlatformID) + } err = invoker(metadata.NewOutgoingContext(ctx, md), method, req, resp, cc, opts...) if err == nil { log.ZInfo(ctx, "rpc client resp", "funcName", method, "resp", rpcString(resp)) diff --git a/pkg/common/mw/rpc_server_interceptor.go b/pkg/common/mw/rpc_server_interceptor.go index 26362c786..e6383b57c 100644 --- a/pkg/common/mw/rpc_server_interceptor.go +++ b/pkg/common/mw/rpc_server_interceptor.go @@ -3,6 +3,7 @@ package mw import ( "context" "fmt" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "math" "runtime" "runtime/debug" @@ -20,9 +21,6 @@ import ( "google.golang.org/grpc/status" ) -const OperationID = "operationID" -const OpUserID = "opUserID" - func rpcString(v interface{}) string { if s, ok := v.(interface{ String() string }); ok { return s.String() @@ -31,7 +29,6 @@ func rpcString(v interface{}) string { } func rpcServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { - var operationID string defer func() { if r := recover(); r != nil { log.ZError(ctx, "rpc panic", nil, "FullMethod", info.FullMethod, "type:", fmt.Sprintf("%T", r), "panic:", r) @@ -59,17 +56,17 @@ func rpcServerInterceptor(ctx context.Context, req interface{}, info *grpc.Unary if !ok { return nil, status.New(codes.InvalidArgument, "missing metadata").Err() } - if opts := md.Get(OperationID); len(opts) != 1 || opts[0] == "" { + if opts := md.Get(constant.OperationID); len(opts) != 1 || opts[0] == "" { return nil, status.New(codes.InvalidArgument, "operationID error").Err() } else { - operationID = opts[0] + ctx = context.WithValue(ctx, constant.OperationID, opts[0]) } - var opUserID string - if opts := md.Get(OpUserID); len(opts) == 1 { - opUserID = opts[0] + if opts := md.Get(constant.OpUserID); len(opts) == 1 { + ctx = context.WithValue(ctx, constant.OpUserID, opts[0]) + } + if opts := md.Get(constant.OpUserPlatform); len(opts) == 1 { + ctx = context.WithValue(ctx, constant.OpUserPlatform, opts[0]) } - ctx = context.WithValue(ctx, OperationID, operationID) - ctx = context.WithValue(ctx, OpUserID, opUserID) log.ZInfo(ctx, "rpc server req", "funcName", funcName, "req", rpcString(req)) resp, err = handler(ctx, req) if err == nil { diff --git a/pkg/common/tokenverify/jwt_token.go b/pkg/common/tokenverify/jwt_token.go index 1fc82641f..378c99540 100644 --- a/pkg/common/tokenverify/jwt_token.go +++ b/pkg/common/tokenverify/jwt_token.go @@ -4,7 +4,7 @@ import ( "context" "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/golang-jwt/jwt/v4" @@ -61,7 +61,7 @@ func GetClaimFromToken(tokensString string) (*Claims, error) { } func CheckAccessV3(ctx context.Context, ownerUserID string) (err error) { - opUserID := tracelog.GetOpUserID(ctx) + opUserID := mcontext.GetOpUserID(ctx) if utils.IsContain(opUserID, config.Config.Manager.AppManagerUid) { return nil } @@ -72,14 +72,14 @@ func CheckAccessV3(ctx context.Context, ownerUserID string) (err error) { } func IsAppManagerUid(ctx context.Context) bool { - return utils.IsContain(tracelog.GetOpUserID(ctx), config.Config.Manager.AppManagerUid) + return utils.IsContain(mcontext.GetOpUserID(ctx), config.Config.Manager.AppManagerUid) } func CheckAdmin(ctx context.Context) error { - if utils.IsContain(tracelog.GetOpUserID(ctx), config.Config.Manager.AppManagerUid) { + if utils.IsContain(mcontext.GetOpUserID(ctx), config.Config.Manager.AppManagerUid) { return nil } - return errs.ErrIdentity.Wrap(fmt.Sprintf("user %s is not admin userID", tracelog.GetOpUserID(ctx))) + return errs.ErrIdentity.Wrap(fmt.Sprintf("user %s is not admin userID", mcontext.GetOpUserID(ctx))) } func ParseRedisInterfaceToken(redisToken interface{}) (*Claims, error) { diff --git a/pkg/rpcclient/notification/extend_msg.go b/pkg/rpcclient/notification/extend_msg.go index f98b51ed3..6b62e4bdd 100644 --- a/pkg/rpcclient/notification/extend_msg.go +++ b/pkg/rpcclient/notification/extend_msg.go @@ -4,7 +4,7 @@ import ( "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/apistruct" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" sdkws "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" @@ -14,7 +14,7 @@ func (c *Check) ExtendMessageUpdatedNotification(ctx context.Context, sendID str req *msg.SetMessageReactionExtensionsReq, resp *msg.SetMessageReactionExtensionsResp, isHistory bool, isReactionFromCache bool) { var m apistruct.ReactionMessageModifierNotification m.SourceID = req.SourceID - m.OpUserID = tracelog.GetOpUserID(ctx) + m.OpUserID = mcontext.GetOpUserID(ctx) m.SessionType = req.SessionType keyMap := make(map[string]*sdkws.KeyValue) for _, valueResp := range resp.Result { diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index e67ad3ac5..0d2ee583f 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -5,8 +5,8 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tracelog" pbGroup "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/group" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/wrapperspb" @@ -16,7 +16,7 @@ import ( ) func (c *Check) setOpUserInfo(ctx context.Context, groupID string, groupMemberInfo *sdkws.GroupMemberFullInfo) error { - opUserID := tracelog.GetOpUserID(ctx) + opUserID := mcontext.GetOpUserID(ctx) if tokenverify.IsManagerUserID(opUserID) { user, err := c.user.GetUsersInfos(ctx, []string{opUserID}, true) if err != nil { @@ -221,7 +221,7 @@ func (c *Check) GroupCreatedNotification(ctx context.Context, groupID string, in } } - c.groupNotification(ctx, constant.GroupCreatedNotification, &GroupCreatedTips, tracelog.GetOpUserID(ctx), groupID, "") + c.groupNotification(ctx, constant.GroupCreatedNotification, &GroupCreatedTips, mcontext.GetOpUserID(ctx), groupID, "") } // 群信息改变后掉用 @@ -246,7 +246,7 @@ func (c *Check) GroupInfoSetNotification(ctx context.Context, groupID string, gr if err := c.setOpUserInfo(ctx, groupID, GroupInfoChangedTips.OpUser); err != nil { return } - c.groupNotification(ctx, constant.GroupInfoSetNotification, &GroupInfoChangedTips, tracelog.GetOpUserID(ctx), groupID, "") + c.groupNotification(ctx, constant.GroupInfoSetNotification, &GroupInfoChangedTips, mcontext.GetOpUserID(ctx), groupID, "") } func (c *Check) GroupMutedNotification(ctx context.Context, groupID string) { @@ -258,7 +258,7 @@ func (c *Check) GroupMutedNotification(ctx context.Context, groupID string) { if err := c.setOpUserInfo(ctx, groupID, tips.OpUser); err != nil { return } - c.groupNotification(ctx, constant.GroupMutedNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "") + c.groupNotification(ctx, constant.GroupMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } func (c *Check) GroupCancelMutedNotification(ctx context.Context, groupID string) { @@ -270,7 +270,7 @@ func (c *Check) GroupCancelMutedNotification(ctx context.Context, groupID string if err := c.setOpUserInfo(ctx, groupID, tips.OpUser); err != nil { return } - c.groupNotification(ctx, constant.GroupCancelMutedNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "") + c.groupNotification(ctx, constant.GroupCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } func (c *Check) GroupMemberMutedNotification(ctx context.Context, groupID, groupMemberUserID string, mutedSeconds uint32) { @@ -286,7 +286,7 @@ func (c *Check) GroupMemberMutedNotification(ctx context.Context, groupID, group if err := c.setGroupMemberInfo(ctx, groupID, groupMemberUserID, tips.MutedUser); err != nil { return } - c.groupNotification(ctx, constant.GroupMemberMutedNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "") + c.groupNotification(ctx, constant.GroupMemberMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } func (c *Check) GroupMemberInfoSetNotification(ctx context.Context, groupID, groupMemberUserID string) { @@ -301,7 +301,7 @@ func (c *Check) GroupMemberInfoSetNotification(ctx context.Context, groupID, gro if err := c.setGroupMemberInfo(ctx, groupID, groupMemberUserID, tips.ChangedUser); err != nil { return } - c.groupNotification(ctx, constant.GroupMemberInfoSetNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "") + c.groupNotification(ctx, constant.GroupMemberInfoSetNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } func (c *Check) GroupMemberRoleLevelChangeNotification(ctx context.Context, operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) { @@ -323,7 +323,7 @@ func (c *Check) GroupMemberRoleLevelChangeNotification(ctx context.Context, oper log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, groupMemberUserID) return } - c.groupNotification(ctx, notificationType, &tips, tracelog.GetOpUserID(ctx), groupID, "") + c.groupNotification(ctx, notificationType, &tips, mcontext.GetOpUserID(ctx), groupID, "") } func (c *Check) GroupMemberCancelMutedNotification(ctx context.Context, groupID, groupMemberUserID string) { @@ -338,7 +338,7 @@ func (c *Check) GroupMemberCancelMutedNotification(ctx context.Context, groupID, if err := c.setGroupMemberInfo(ctx, groupID, groupMemberUserID, tips.MutedUser); err != nil { return } - c.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "") + c.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, mcontext.GetOpUserID(ctx), groupID, "") } // message ReceiveJoinApplicationTips{ @@ -359,7 +359,7 @@ func (c *Check) JoinGroupApplicationNotification(ctx context.Context, req *pbGro return } - if err = c.setPublicUserInfo(ctx, tracelog.GetOpUserID(ctx), JoinGroupApplicationTips.Applicant); err != nil { + if err = c.setPublicUserInfo(ctx, mcontext.GetOpUserID(ctx), JoinGroupApplicationTips.Applicant); err != nil { return } @@ -369,7 +369,7 @@ func (c *Check) JoinGroupApplicationNotification(ctx context.Context, req *pbGro return } for _, v := range managerList { - c.groupNotification(ctx, constant.JoinGroupApplicationNotification, &JoinGroupApplicationTips, tracelog.GetOpUserID(ctx), "", v.UserID) + c.groupNotification(ctx, constant.JoinGroupApplicationNotification, &JoinGroupApplicationTips, mcontext.GetOpUserID(ctx), "", v.UserID) } } @@ -382,7 +382,7 @@ func (c *Check) MemberQuitNotification(ctx context.Context, req *pbGroup.QuitGro return } - c.groupNotification(ctx, constant.MemberQuitNotification, &MemberQuitTips, tracelog.GetOpUserID(ctx), req.GroupID, "") + c.groupNotification(ctx, constant.MemberQuitNotification, &MemberQuitTips, mcontext.GetOpUserID(ctx), req.GroupID, "") } // message ApplicationProcessedTips{ @@ -402,17 +402,17 @@ func (c *Check) GroupApplicationAcceptedNotification(ctx context.Context, req *p return } - c.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, &GroupApplicationAcceptedTips, tracelog.GetOpUserID(ctx), "", req.FromUserID) + c.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, &GroupApplicationAcceptedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID) adminList, err := c.group.GetOwnerAndAdminInfos(ctx, req.GroupID) if err != nil { return } for _, v := range adminList { - if v.UserID == tracelog.GetOpUserID(ctx) { + if v.UserID == mcontext.GetOpUserID(ctx) { continue } GroupApplicationAcceptedTips.ReceiverAs = 1 - c.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, &GroupApplicationAcceptedTips, tracelog.GetOpUserID(ctx), "", v.UserID) + c.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, &GroupApplicationAcceptedTips, mcontext.GetOpUserID(ctx), "", v.UserID) } } @@ -424,17 +424,17 @@ func (c *Check) GroupApplicationRejectedNotification(ctx context.Context, req *p if err := c.setOpUserInfo(ctx, req.GroupID, GroupApplicationRejectedTips.OpUser); err != nil { return } - c.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &GroupApplicationRejectedTips, tracelog.GetOpUserID(ctx), "", req.FromUserID) + c.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &GroupApplicationRejectedTips, mcontext.GetOpUserID(ctx), "", req.FromUserID) adminList, err := c.group.GetOwnerAndAdminInfos(ctx, req.GroupID) if err != nil { return } for _, v := range adminList { - if v.UserID == tracelog.GetOpUserID(ctx) { + if v.UserID == mcontext.GetOpUserID(ctx) { continue } GroupApplicationRejectedTips.ReceiverAs = 1 - c.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &GroupApplicationRejectedTips, tracelog.GetOpUserID(ctx), "", v.UserID) + c.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &GroupApplicationRejectedTips, mcontext.GetOpUserID(ctx), "", v.UserID) } } @@ -449,7 +449,7 @@ func (c *Check) GroupOwnerTransferredNotification(ctx context.Context, req *pbGr if err := c.setGroupMemberInfo(ctx, req.GroupID, req.NewOwnerUserID, GroupOwnerTransferredTips.NewGroupOwner); err != nil { return } - c.groupNotification(ctx, constant.GroupOwnerTransferredNotification, &GroupOwnerTransferredTips, tracelog.GetOpUserID(ctx), req.GroupID, "") + c.groupNotification(ctx, constant.GroupOwnerTransferredNotification, &GroupOwnerTransferredTips, mcontext.GetOpUserID(ctx), req.GroupID, "") } func (c *Check) GroupDismissedNotification(ctx context.Context, req *pbGroup.DismissGroupReq) { @@ -462,7 +462,7 @@ func (c *Check) GroupDismissedNotification(ctx context.Context, req *pbGroup.Dis return } - c.groupNotification(ctx, constant.GroupDismissedNotification, &tips, tracelog.GetOpUserID(ctx), req.GroupID, "") + c.groupNotification(ctx, constant.GroupDismissedNotification, &tips, mcontext.GetOpUserID(ctx), req.GroupID, "") } // message MemberKickedTips{ @@ -488,7 +488,7 @@ func (c *Check) MemberKickedNotification(ctx context.Context, req *pbGroup.KickG } MemberKickedTips.KickedUserList = append(MemberKickedTips.KickedUserList, &groupMemberInfo) } - c.groupNotification(ctx, constant.MemberKickedNotification, &MemberKickedTips, tracelog.GetOpUserID(ctx), req.GroupID, "") + c.groupNotification(ctx, constant.MemberKickedNotification, &MemberKickedTips, mcontext.GetOpUserID(ctx), req.GroupID, "") // //for _, v := range kickedUserIDList { // groupNotification(constant.MemberKickedNotification, &MemberKickedTips, req.OpUserID, "", v, req.OperationID) @@ -519,7 +519,7 @@ func (c *Check) MemberInvitedNotification(ctx context.Context, groupID, reason s } MemberInvitedTips.InvitedUserList = append(MemberInvitedTips.InvitedUserList, &groupMemberInfo) } - c.groupNotification(ctx, constant.MemberInvitedNotification, &MemberInvitedTips, tracelog.GetOpUserID(ctx), groupID, "") + c.groupNotification(ctx, constant.MemberInvitedNotification, &MemberInvitedTips, mcontext.GetOpUserID(ctx), groupID, "") } // 群成员主动申请进群,管理员同意后调用, @@ -531,7 +531,7 @@ func (c *Check) MemberEnterNotification(ctx context.Context, req *pbGroup.GroupA if err := c.setGroupMemberInfo(ctx, req.GroupID, req.FromUserID, MemberEnterTips.EntrantUser); err != nil { return } - c.groupNotification(ctx, constant.MemberEnterNotification, &MemberEnterTips, tracelog.GetOpUserID(ctx), req.GroupID, "") + c.groupNotification(ctx, constant.MemberEnterNotification, &MemberEnterTips, mcontext.GetOpUserID(ctx), req.GroupID, "") } func (c *Check) MemberEnterDirectlyNotification(ctx context.Context, groupID string, entrantUserID string, operationID string) { From 119f8bf820a4d71e42da13f2dd6f6cb2a1ed2521 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Tue, 21 Mar 2023 15:33:33 +0800 Subject: [PATCH 20/54] OpenIMCommonConfigKey --- cmd/api/main.go | 9 +++++++++ pkg/common/constant/constant.go | 2 ++ 2 files changed, 11 insertions(+) diff --git a/cmd/api/main.go b/cmd/api/main.go index 9b328c836..f154b3bd7 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -1,8 +1,10 @@ package main import ( + "bytes" "context" "fmt" + "gopkg.in/yaml.v3" "net" "strconv" @@ -37,6 +39,13 @@ func run(port int) error { if err != nil { return err } + buf := bytes.NewBuffer(nil) + if err := yaml.NewEncoder(buf).Encode(config.Config); err != nil { + return err + } + if err := zk.RegisterConf2Registry(constant.OpenIMCommonConfigKey, buf.Bytes()); err != nil { + return err + } log.NewPrivateLog(constant.LogFileName) router := api.NewGinRouter(zk, rdb) var address string diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index ef1390bf6..2893f4ea7 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -325,3 +325,5 @@ const ( FlagPrometheusPort = "prometheus_port" FlagConf = "config_folder_path" ) + +const OpenIMCommonConfigKey = "OpenIMServerConfig" From b05e89cd67dbe99724cee5675c58fa0fa2c9bb6e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Mar 2023 19:05:02 +0800 Subject: [PATCH 21/54] msg update --- internal/api/custom_validator.go | 23 ++++++++++ internal/api/route.go | 18 -------- internal/push/consumer_init.go | 6 --- internal/push/push_handler.go | 6 --- internal/push/push_to_client.go | 6 --- internal/rpc/msg/MessageInterceptor.go | 61 ++++++++++++++++++++++++++ internal/rpc/msg/send_pull.go | 12 ----- internal/rpc/msg/server.go | 17 ++++++- pkg/utils/utils_v2.go | 2 +- 9 files changed, 101 insertions(+), 50 deletions(-) create mode 100644 internal/api/custom_validator.go create mode 100644 internal/rpc/msg/MessageInterceptor.go diff --git a/internal/api/custom_validator.go b/internal/api/custom_validator.go new file mode 100644 index 000000000..541702677 --- /dev/null +++ b/internal/api/custom_validator.go @@ -0,0 +1,23 @@ +package api + +import ( + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" + "github.com/go-playground/validator/v10" +) + +func RequiredIf(fl validator.FieldLevel) bool { + sessionType := fl.Parent().FieldByName("SessionType").Int() + switch sessionType { + case constant.SingleChatType, constant.NotificationChatType: + if fl.FieldName() == "RecvID" { + return fl.Field().String() != "" + } + case constant.GroupChatType, constant.SuperGroupChatType: + if fl.FieldName() == "GroupID" { + return fl.Field().String() != "" + } + default: + return true + } + return true +} diff --git a/internal/api/route.go b/internal/api/route.go index cc9f51788..823778bca 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -2,7 +2,6 @@ package api import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mw" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/prome" @@ -162,20 +161,3 @@ func NewGinRouter(zk discoveryregistry.SvcDiscoveryRegistry, rdb redis.Universal } return r } - -func RequiredIf(fl validator.FieldLevel) bool { - sessionType := fl.Parent().FieldByName("SessionType").Int() - switch sessionType { - case constant.SingleChatType, constant.NotificationChatType: - if fl.FieldName() == "RecvID" { - return fl.Field().String() != "" - } - case constant.GroupChatType, constant.SuperGroupChatType: - if fl.FieldName() == "GroupID" { - return fl.Field().String() != "" - } - default: - return true - } - return true -} diff --git a/internal/push/consumer_init.go b/internal/push/consumer_init.go index 6eba5306e..283cf1d1b 100644 --- a/internal/push/consumer_init.go +++ b/internal/push/consumer_init.go @@ -1,9 +1,3 @@ -/* -** description(""). -** copyright('open-im,www.open-im.io'). -** author("fg,Gordon@open-im.io"). -** time(2021/3/22 15:33). - */ package push import ( diff --git a/internal/push/push_handler.go b/internal/push/push_handler.go index 6d3f5d61b..c6a1ac660 100644 --- a/internal/push/push_handler.go +++ b/internal/push/push_handler.go @@ -1,9 +1,3 @@ -/* -** description(""). -** copyright('OpenIM,www.OpenIM.io'). -** author("fg,Gordon@tuoyun.net"). -** time(2021/5/13 10:33). - */ package push import ( diff --git a/internal/push/push_to_client.go b/internal/push/push_to_client.go index f17e09e83..eac8010ae 100644 --- a/internal/push/push_to_client.go +++ b/internal/push/push_to_client.go @@ -1,9 +1,3 @@ -/* -** description(""). -** copyright('open-im,www.open-im.io'). -** author("fg,Gordon@open-im.io"). -** time(2021/3/5 14:31). - */ package push import ( diff --git a/internal/rpc/msg/MessageInterceptor.go b/internal/rpc/msg/MessageInterceptor.go new file mode 100644 index 000000000..e07db2ec8 --- /dev/null +++ b/internal/rpc/msg/MessageInterceptor.go @@ -0,0 +1,61 @@ +package msg + +import ( + "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" + "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" +) + +type MessageInterceptorFunc func(ctx context.Context, req *msg.SendMsgReq) (*sdkws.MsgData, error) + +func MessageHasReadEnabled(_ context.Context, req *msg.SendMsgReq) (*sdkws.MsgData, error) { + switch req.MsgData.ContentType { + case constant.HasReadReceipt: + if config.Config.SingleMessageHasReadReceiptEnable { + return req.MsgData, nil + } else { + return nil, errs.ErrMessageHasReadDisable.Wrap() + } + case constant.GroupHasReadReceipt: + if config.Config.GroupMessageHasReadReceiptEnable { + return req.MsgData, nil + } else { + return nil, errs.ErrMessageHasReadDisable.Wrap() + } + } + return req.MsgData, nil +} +func MessageModifyCallback(ctx context.Context, req *msg.SendMsgReq) (*sdkws.MsgData, error) { + if err := CallbackMsgModify(ctx, req); err != nil && err != errs.ErrCallbackContinue { + log.ZWarn(ctx, "CallbackMsgModify failed", err, "req", req.String()) + return nil, err + } + return req.MsgData, nil +} +func MessageBeforeSendCallback(ctx context.Context, req *msg.SendMsgReq) (*sdkws.MsgData, error) { + switch req.MsgData.SessionType { + case constant.SingleChatType: + if err := CallbackBeforeSendSingleMsg(ctx, req); err != nil && err != errs.ErrCallbackContinue { + log.ZWarn(ctx, "CallbackBeforeSendSingleMsg failed", err, "req", req.String()) + return nil, err + } + case constant.GroupChatType: + if err := CallbackBeforeSendGroupMsg(ctx, req); err != nil && err != errs.ErrCallbackContinue { + log.ZWarn(ctx, "CallbackBeforeSendGroupMsg failed", err, "req", req.String()) + return nil, err + } + case constant.NotificationChatType: + case constant.SuperGroupChatType: + if err := CallbackBeforeSendGroupMsg(ctx, req); err != nil && err != errs.ErrCallbackContinue { + log.ZWarn(ctx, "CallbackBeforeSendGroupMsg failed", err, "req", req.String()) + return nil, err + } + default: + return nil, errs.ErrArgs.Wrap("unknown sessionType") + } + return req.MsgData, nil +} diff --git a/internal/rpc/msg/send_pull.go b/internal/rpc/msg/send_pull.go index f1987bdf7..40d08f30f 100644 --- a/internal/rpc/msg/send_pull.go +++ b/internal/rpc/msg/send_pull.go @@ -16,11 +16,6 @@ import ( func (m *msgServer) sendMsgSuperGroupChat(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, err error) { resp = &msg.SendMsgResp{} promePkg.Inc(promePkg.WorkSuperGroupChatMsgRecvSuccessCounter) - // callback - if err = CallbackBeforeSendGroupMsg(ctx, req); err != nil && err != errs.ErrCallbackContinue { - return nil, err - } - if _, err = m.messageVerification(ctx, req); err != nil { promePkg.Inc(promePkg.WorkSuperGroupChatMsgProcessFailedCounter) return nil, err @@ -63,9 +58,6 @@ func (m *msgServer) sendMsgNotification(ctx context.Context, req *msg.SendMsgReq func (m *msgServer) sendMsgSingleChat(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, err error) { promePkg.Inc(promePkg.SingleChatMsgRecvSuccessCounter) - if err = CallbackBeforeSendSingleMsg(ctx, req); err != nil && err != errs.ErrCallbackContinue { - return nil, err - } _, err = m.messageVerification(ctx, req) if err != nil { return nil, err @@ -103,10 +95,6 @@ func (m *msgServer) sendMsgSingleChat(ctx context.Context, req *msg.SendMsgReq) func (m *msgServer) sendMsgGroupChat(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, err error) { // callback promePkg.Inc(promePkg.GroupChatMsgRecvSuccessCounter) - err = CallbackBeforeSendGroupMsg(ctx, req) - if err != nil && err != errs.ErrCallbackContinue { - return nil, err - } var memberUserIDList []string if memberUserIDList, err = m.messageVerification(ctx, req); err != nil { diff --git a/internal/rpc/msg/server.go b/internal/rpc/msg/server.go index 16b2b901f..29731656f 100644 --- a/internal/rpc/msg/server.go +++ b/internal/rpc/msg/server.go @@ -18,6 +18,7 @@ import ( "google.golang.org/grpc" ) +type MessageInterceptorChain []MessageInterceptorFunc type msgServer struct { RegisterCenter discoveryregistry.SvcDiscoveryRegistry MsgDatabase controller.MsgDatabase @@ -29,8 +30,22 @@ type msgServer struct { *localcache.GroupLocalCache black *check.BlackChecker MessageLocker MessageLocker + Handlers MessageInterceptorChain } +func (m *msgServer) addInterceptorHandler(interceptorFunc ...MessageInterceptorFunc) { + m.Handlers = append(m.Handlers, interceptorFunc...) +} +func (m *msgServer) execInterceptorHandler(ctx context.Context, req *msg.SendMsgReq) error { + for _, handler := range m.Handlers { + msgData, err := handler(ctx, req) + if err != nil { + return err + } + req.MsgData = msgData + } + return nil +} func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { rdb, err := cache.NewRedis() if err != nil { @@ -40,7 +55,6 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e if err != nil { return err } - cacheModel := cache.NewCacheModel(rdb) msgDocModel := unrelation.NewMsgMongoDriver(mongo.GetDatabase()) extendMsgModel := unrelation.NewExtendMsgSetMongoDriver(mongo.GetDatabase()) @@ -60,6 +74,7 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e friend: check.NewFriendChecker(client), MessageLocker: NewLockerMessage(cacheModel), } + s.addInterceptorHandler(MessageHasReadEnabled, MessageModifyCallback) s.initPrometheus() msg.RegisterMsgServer(server, s) return nil diff --git a/pkg/utils/utils_v2.go b/pkg/utils/utils_v2.go index 13d52cf15..15433cd8b 100644 --- a/pkg/utils/utils_v2.go +++ b/pkg/utils/utils_v2.go @@ -472,7 +472,7 @@ func Unwrap(err error) error { // NotNilReplace 当new_不为空时, 将old设置为new_ func NotNilReplace[T any](old, new_ *T) { - if old == nil || new_ == nil { + if new_ == nil { return } *old = *new_ From 97608e47cd0533037a0ccb9ed6076ec0e03c2a00 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Tue, 21 Mar 2023 19:20:54 +0800 Subject: [PATCH 22/54] verify req key --- pkg/common/constant/constant.go | 2 + pkg/common/mw/check.go | 65 +++++++++++++++++++++++++ pkg/common/mw/check_test.go | 28 +++++++++++ pkg/common/mw/rpc_client_interceptor.go | 21 ++++++-- pkg/common/mw/rpc_server_interceptor.go | 10 ++++ 5 files changed, 123 insertions(+), 3 deletions(-) create mode 100644 pkg/common/mw/check.go create mode 100644 pkg/common/mw/check_test.go diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 2893f4ea7..d2188cbd9 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -275,6 +275,8 @@ const OpUserID = "opUserID" const ConnID = "connID" const OpUserPlatform = "platform" const Token = "token" +const RpcMwCustom = "hCustom" +const CheckKey = "CheckKey" const ( UnreliableNotification = 1 diff --git a/pkg/common/mw/check.go b/pkg/common/mw/check.go new file mode 100644 index 000000000..65c332da2 --- /dev/null +++ b/pkg/common/mw/check.go @@ -0,0 +1,65 @@ +package mw + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/md5" + "encoding/base64" + "errors" + "fmt" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" + "math/rand" + "strings" + "sync" + "time" +) + +var ( + block cipher.Block + once sync.Once +) + +func init() { + rand.Seed(time.Now().UnixNano()) +} + +func initAesKey() { + once.Do(func() { + key := md5.Sum([]byte("openim:" + config.Config.Secret)) + var err error + block, err = aes.NewCipher(key[:]) + if err != nil { + panic(err) + } + }) +} + +func genReqKey(args []string) string { + initAesKey() + plaintext := md5.Sum([]byte(strings.Join(args, ":"))) + var iv = make([]byte, aes.BlockSize, aes.BlockSize+md5.Size) + if _, err := rand.Read(iv); err != nil { + panic(err) + } + ciphertext := make([]byte, md5.Size) + cipher.NewCBCEncrypter(block, iv).CryptBlocks(ciphertext, plaintext[:]) + return base64.StdEncoding.EncodeToString(append(iv, ciphertext...)) +} + +func verifyReqKey(args []string, key string) error { + initAesKey() + k, err := base64.StdEncoding.DecodeString(key) + if err != nil { + return fmt.Errorf("invalid key %v", err) + } + if len(k) != aes.BlockSize+md5.Size { + return errors.New("invalid key") + } + plaintext := make([]byte, md5.Size) + cipher.NewCBCDecrypter(block, k[:aes.BlockSize]).CryptBlocks(plaintext, k[aes.BlockSize:]) + sum := md5.Sum([]byte(strings.Join(args, ":"))) + if string(plaintext) != string(sum[:]) { + return errors.New("mismatch key") + } + return nil +} diff --git a/pkg/common/mw/check_test.go b/pkg/common/mw/check_test.go new file mode 100644 index 000000000..a70903810 --- /dev/null +++ b/pkg/common/mw/check_test.go @@ -0,0 +1,28 @@ +package mw + +import ( + "fmt" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" + "testing" +) + +func TestCheck(t *testing.T) { + config.Config.Secret = "123456" + + args := []string{"1", "2", "3"} + + key := genReqKey(args) + fmt.Println("key:", key) + err := verifyReqKey(args, key) + + fmt.Println(err) + + args = []string{"4", "5", "6"} + + key = genReqKey(args) + fmt.Println("key:", key) + err = verifyReqKey(args, key) + + fmt.Println(err) + +} diff --git a/pkg/common/mw/rpc_client_interceptor.go b/pkg/common/mw/rpc_client_interceptor.go index 3ee56ddbd..d558965e0 100644 --- a/pkg/common/mw/rpc_client_interceptor.go +++ b/pkg/common/mw/rpc_client_interceptor.go @@ -3,6 +3,7 @@ package mw import ( "context" "errors" + "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" @@ -22,20 +23,34 @@ func rpcClientInterceptor(ctx context.Context, method string, req, resp interfac return errs.ErrInternalServer.Wrap("call rpc request context is nil") } log.ZInfo(ctx, "rpc client req", "funcName", method, "req", rpcString(req)) + md := metadata.Pairs() + if keys, _ := ctx.Value(constant.RpcMwCustom).([]string); len(keys) > 0 { + for _, key := range keys { + val, ok := ctx.Value(key).([]string) + if !ok { + return errs.ErrInternalServer.Wrap(fmt.Sprintf("ctx missing key %s", key)) + } + md.Set(key, val...) + } + } operationID, ok := ctx.Value(constant.OperationID).(string) if !ok { log.ZWarn(ctx, "ctx missing operationID", errors.New("ctx missing operationID"), "funcName", method) return errs.ErrArgs.Wrap("ctx missing operationID") } - md := metadata.Pairs(constant.OperationID, operationID) + md.Set(constant.OperationID, operationID) + args := make([]string, 0, 4) + args = append(args, constant.OperationID, operationID) opUserID, ok := ctx.Value(constant.OpUserID).(string) if ok { - md.Append(constant.OpUserID, opUserID) + md.Set(constant.OpUserID, opUserID) + args = append(args, constant.OpUserID, opUserID) } opUserIDPlatformID, ok := ctx.Value(constant.OpUserPlatform).(string) if ok { - md.Append(constant.OpUserPlatform, opUserIDPlatformID) + md.Set(constant.OpUserPlatform, opUserIDPlatformID) } + md.Set(constant.CheckKey, genReqKey(args)) err = invoker(metadata.NewOutgoingContext(ctx, md), method, req, resp, cc, opts...) if err == nil { log.ZInfo(ctx, "rpc client resp", "funcName", method, "resp", rpcString(resp)) diff --git a/pkg/common/mw/rpc_server_interceptor.go b/pkg/common/mw/rpc_server_interceptor.go index e6383b57c..f76fa5324 100644 --- a/pkg/common/mw/rpc_server_interceptor.go +++ b/pkg/common/mw/rpc_server_interceptor.go @@ -56,17 +56,27 @@ func rpcServerInterceptor(ctx context.Context, req interface{}, info *grpc.Unary if !ok { return nil, status.New(codes.InvalidArgument, "missing metadata").Err() } + args := make([]string, 0, 4) if opts := md.Get(constant.OperationID); len(opts) != 1 || opts[0] == "" { return nil, status.New(codes.InvalidArgument, "operationID error").Err() } else { + args = append(args, constant.OperationID, opts[0]) ctx = context.WithValue(ctx, constant.OperationID, opts[0]) } if opts := md.Get(constant.OpUserID); len(opts) == 1 { + args = append(args, constant.OpUserID, opts[0]) ctx = context.WithValue(ctx, constant.OpUserID, opts[0]) } if opts := md.Get(constant.OpUserPlatform); len(opts) == 1 { ctx = context.WithValue(ctx, constant.OpUserPlatform, opts[0]) } + if opts := md.Get(constant.CheckKey); len(opts) != 1 || opts[0] == "" { + return nil, status.New(codes.InvalidArgument, "check key empty").Err() + } else { + if err := verifyReqKey(args, opts[0]); err != nil { + return nil, status.New(codes.InvalidArgument, err.Error()).Err() + } + } log.ZInfo(ctx, "rpc server req", "funcName", funcName, "req", rpcString(req)) resp, err = handler(ctx, req) if err == nil { From c0d72d91fbdc9c7c16861e9bbafef20dbc663701 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Tue, 21 Mar 2023 20:09:50 +0800 Subject: [PATCH 23/54] msg update --- .../rpc/msg/{MessageInterceptor.go => message_interceptor.go} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename internal/rpc/msg/{MessageInterceptor.go => message_interceptor.go} (100%) diff --git a/internal/rpc/msg/MessageInterceptor.go b/internal/rpc/msg/message_interceptor.go similarity index 100% rename from internal/rpc/msg/MessageInterceptor.go rename to internal/rpc/msg/message_interceptor.go From 900858e4ea8ece03d43570e93eb6629887b8ff36 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Wed, 22 Mar 2023 10:11:18 +0800 Subject: [PATCH 24/54] rpc custom header --- pkg/common/constant/constant.go | 2 +- pkg/common/mw/check.go | 4 ++-- pkg/common/mw/rpc_client_interceptor.go | 6 +++++- pkg/common/mw/rpc_server_interceptor.go | 9 +++++++++ 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index d2188cbd9..cbb350eb0 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -275,7 +275,7 @@ const OpUserID = "opUserID" const ConnID = "connID" const OpUserPlatform = "platform" const Token = "token" -const RpcMwCustom = "hCustom" +const RpcCustomHeader = "customHeader" // rpc中间件自定义ctx参数 const CheckKey = "CheckKey" const ( diff --git a/pkg/common/mw/check.go b/pkg/common/mw/check.go index 65c332da2..e62ef3fa5 100644 --- a/pkg/common/mw/check.go +++ b/pkg/common/mw/check.go @@ -15,8 +15,8 @@ import ( ) var ( - block cipher.Block once sync.Once + block cipher.Block ) func init() { @@ -37,7 +37,7 @@ func initAesKey() { func genReqKey(args []string) string { initAesKey() plaintext := md5.Sum([]byte(strings.Join(args, ":"))) - var iv = make([]byte, aes.BlockSize, aes.BlockSize+md5.Size) + iv := make([]byte, aes.BlockSize, aes.BlockSize+md5.Size) if _, err := rand.Read(iv); err != nil { panic(err) } diff --git a/pkg/common/mw/rpc_client_interceptor.go b/pkg/common/mw/rpc_client_interceptor.go index d558965e0..eda323836 100644 --- a/pkg/common/mw/rpc_client_interceptor.go +++ b/pkg/common/mw/rpc_client_interceptor.go @@ -24,14 +24,18 @@ func rpcClientInterceptor(ctx context.Context, method string, req, resp interfac } log.ZInfo(ctx, "rpc client req", "funcName", method, "req", rpcString(req)) md := metadata.Pairs() - if keys, _ := ctx.Value(constant.RpcMwCustom).([]string); len(keys) > 0 { + if keys, _ := ctx.Value(constant.RpcCustomHeader).([]string); len(keys) > 0 { for _, key := range keys { val, ok := ctx.Value(key).([]string) if !ok { return errs.ErrInternalServer.Wrap(fmt.Sprintf("ctx missing key %s", key)) } + if len(val) == 0 { + return errs.ErrInternalServer.Wrap(fmt.Sprintf("ctx key %s value is empty", key)) + } md.Set(key, val...) } + md.Set(constant.RpcCustomHeader, keys...) } operationID, ok := ctx.Value(constant.OperationID).(string) if !ok { diff --git a/pkg/common/mw/rpc_server_interceptor.go b/pkg/common/mw/rpc_server_interceptor.go index f76fa5324..f47a4321b 100644 --- a/pkg/common/mw/rpc_server_interceptor.go +++ b/pkg/common/mw/rpc_server_interceptor.go @@ -56,6 +56,15 @@ func rpcServerInterceptor(ctx context.Context, req interface{}, info *grpc.Unary if !ok { return nil, status.New(codes.InvalidArgument, "missing metadata").Err() } + if keys := md.Get(constant.RpcCustomHeader); len(keys) > 0 { + for _, key := range keys { + values := md.Get(key) + if len(values) == 0 { + return nil, status.New(codes.InvalidArgument, fmt.Sprintf("missing metadata key %s", key)).Err() + } + ctx = context.WithValue(ctx, key, values) + } + } args := make([]string, 0, 4) if opts := md.Get(constant.OperationID); len(opts) != 1 || opts[0] == "" { return nil, status.New(codes.InvalidArgument, "operationID error").Err() From c21523f8633e13f12860af6e35387b9f35ebc4bd Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 10:54:39 +0800 Subject: [PATCH 25/54] msg update --- pkg/common/kafka/producer.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index 910078525..bfeb84295 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -75,7 +75,7 @@ func (p *Producer) SendMessage(ctx context.Context, key string, m proto.Message) {Key: []byte(constant.OpUserPlatform), Value: []byte(platform)}, {Key: []byte(constant.ConnID), Value: []byte(connID)}} partition, offset, err := p.producer.SendMessage(kMsg) - log.ZDebug(ctx, "ByteEncoder SendMessage end", "key ", kMsg.Key.Length(), "key length", kMsg.Value.Length()) + log.ZDebug(ctx, "ByteEncoder SendMessage end", "key ", kMsg.Key, "key length", kMsg.Value.Length()) if err == nil { prome.Inc(prome.SendMsgCounter) } From b07bb1765ef3d65a616f024f2af2149dbb53f730 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 15:28:25 +0800 Subject: [PATCH 26/54] msg update --- internal/push/push_to_client.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/push/push_to_client.go b/internal/push/push_to_client.go index eac8010ae..62d5d4728 100644 --- a/internal/push/push_to_client.go +++ b/internal/push/push_to_client.go @@ -58,9 +58,8 @@ func NewOfflinePusher(cache cache.Model) offlinepush.OfflinePusher { } func (p *Pusher) MsgToUser(ctx context.Context, userID string, msg *sdkws.MsgData) error { - operationID := mcontext.GetOperationID(ctx) var userIDs = []string{userID} - log.Debug(operationID, "Get msg from msg_transfer And push msg", msg.String(), userID) + log.ZDebug(ctx, "Get msg from msg_transfer And push msg", "userID", userID, "msg", msg.String()) // callback if err := callbackOnlinePush(ctx, userIDs, msg); err != nil && err != errs.ErrCallbackContinue { return err @@ -71,7 +70,8 @@ func (p *Pusher) MsgToUser(ctx context.Context, userID string, msg *sdkws.MsgDat return err } isOfflinePush := utils.GetSwitchFromOptions(msg.Options, constant.IsOfflinePush) - log.NewInfo(operationID, "push_result", wsResults, "sendData", msg, "isOfflinePush", isOfflinePush) + //log.NewInfo(operationID, "push_result", wsResults, "sendData", msg, "isOfflinePush", isOfflinePush) + log.ZDebug(ctx, "push_result", "ws push result", wsResults, "sendData", msg, "isOfflinePush", isOfflinePush) p.successCount++ if isOfflinePush && userID != msg.SendID { // save invitation info for offline push From ea7d61d281e4daea9d6b3d060d01b1264862113d Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Wed, 22 Mar 2023 17:25:30 +0800 Subject: [PATCH 27/54] rpc custom header --- pkg/common/mw/gin.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkg/common/mw/gin.go b/pkg/common/mw/gin.go index 3ac61fef1..05c3bf6b1 100644 --- a/pkg/common/mw/gin.go +++ b/pkg/common/mw/gin.go @@ -3,6 +3,7 @@ package mw import ( "bytes" "encoding/json" + "errors" "github.com/OpenIMSDK/Open-IM-Server/pkg/apiresp" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" @@ -90,8 +91,9 @@ func GinParseOperationID() gin.HandlerFunc { return } if req.OperationID == "" { - log.ZWarn(c, "header must have operationID", errs.ErrArgs.Wrap(err.Error())) - apiresp.GinError(c, errs.ErrArgs.Wrap("header must have operationID"+err.Error())) + err := errors.New("header must have operationID") + log.ZWarn(c, "header must have operationID", err) + apiresp.GinError(c, errs.ErrArgs.Wrap(err.Error())) c.Abort() return } From 11ebe4e23440830759393b2665f8c95d92a73510 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 18:35:21 +0800 Subject: [PATCH 28/54] msg update --- .../msgtransfer/online_history_msg_handler.go | 102 ++++++++++-------- internal/push/push_handler.go | 8 +- pkg/common/constant/constant.go | 1 + pkg/common/db/controller/msg.go | 7 +- pkg/common/kafka/producer.go | 27 +++-- pkg/common/log/zap.go | 10 +- pkg/common/mcontext/ctx.go | 60 ++++++++--- 7 files changed, 134 insertions(+), 81 deletions(-) diff --git a/internal/msgtransfer/online_history_msg_handler.go b/internal/msgtransfer/online_history_msg_handler.go index ddfd2259e..dd3c07a3f 100644 --- a/internal/msgtransfer/online_history_msg_handler.go +++ b/internal/msgtransfer/online_history_msg_handler.go @@ -1,6 +1,7 @@ package msgtransfer import ( + "context" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/db/controller" @@ -22,20 +23,24 @@ const ChannelNum = 100 type MsgChannelValue struct { aggregationID string //maybe userID or super groupID - triggerID string - msgList []*pbMsg.MsgDataToMQ + ctx context.Context + ctxMsgList []*ContextMsg lastSeq uint64 } type TriggerChannelValue struct { - triggerID string - cMsgList []*sarama.ConsumerMessage + ctx context.Context + cMsgList []*sarama.ConsumerMessage } type Cmd2Value struct { Cmd int Value interface{} } +type ContextMsg struct { + message *pbMsg.MsgDataToMQ + ctx context.Context +} type OnlineHistoryRedisConsumerHandler struct { historyConsumerGroup *kafka.MConsumerGroup @@ -80,38 +85,39 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { switch cmd.Cmd { case AggregationMessages: msgChannelValue := cmd.Value.(MsgChannelValue) - msgList := msgChannelValue.msgList - triggerID := msgChannelValue.triggerID + ctxMsgList := msgChannelValue.ctxMsgList + ctx := msgChannelValue.ctx storageMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - notStoragePushMsgList := make([]*pbMsg.MsgDataToMQ, 0, 80) - log.Debug(triggerID, "msg arrived channel", "channel id", channelID, msgList, msgChannelValue.aggregationID, len(msgList)) + storagePushMsgList := make([]*ContextMsg, 0, 80) + notStoragePushMsgList := make([]*ContextMsg, 0, 80) + log.ZDebug(ctx, "msg arrived channel", "channel id", channelID, "msgList length", len(ctxMsgList), "aggregationID", msgChannelValue.aggregationID) var modifyMsgList []*pbMsg.MsgDataToMQ - ctx := mcontext.NewCtx("redis consumer") - mcontext.SetOperationID(ctx, triggerID) - for _, v := range msgList { - log.Debug(triggerID, "msg come to storage center", v.String()) - isHistory := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsHistory) - isSenderSync := utils.GetSwitchFromOptions(v.MsgData.Options, constant.IsSenderSync) + //ctx := mcontext.NewCtx("redis consumer") + //mcontext.SetOperationID(ctx, triggerID) + for _, v := range ctxMsgList { + log.ZDebug(ctx, "msg come to storage center", v.message.String()) + isHistory := utils.GetSwitchFromOptions(v.message.MsgData.Options, constant.IsHistory) + isSenderSync := utils.GetSwitchFromOptions(v.message.MsgData.Options, constant.IsSenderSync) if isHistory { - storageMsgList = append(storageMsgList, v) - //log.NewWarn(triggerID, "storageMsgList to mongodb client msgID: ", v.MsgData.ClientMsgID) + storageMsgList = append(storageMsgList, v.message) + storagePushMsgList = append(storagePushMsgList, v) } else { - if !(!isSenderSync && msgChannelValue.aggregationID == v.MsgData.SendID) { + if !(!isSenderSync && msgChannelValue.aggregationID == v.message.MsgData.SendID) { notStoragePushMsgList = append(notStoragePushMsgList, v) } } - if v.MsgData.ContentType == constant.ReactionMessageModifier || v.MsgData.ContentType == constant.ReactionMessageDeleter { - modifyMsgList = append(modifyMsgList, v) + if v.message.MsgData.ContentType == constant.ReactionMessageModifier || v.message.MsgData.ContentType == constant.ReactionMessageDeleter { + modifyMsgList = append(modifyMsgList, v.message) } } if len(modifyMsgList) > 0 { - och.msgDatabase.MsgToModifyMQ(ctx, msgChannelValue.aggregationID, triggerID, modifyMsgList) + och.msgDatabase.MsgToModifyMQ(ctx, msgChannelValue.aggregationID, "", modifyMsgList) } - log.Debug(triggerID, "msg storage length", len(storageMsgList), "push length", len(notStoragePushMsgList)) + log.ZDebug(ctx, "msg storage length", len(storageMsgList), "push length", len(notStoragePushMsgList)) if len(storageMsgList) > 0 { lastSeq, err := och.msgDatabase.BatchInsertChat2Cache(ctx, msgChannelValue.aggregationID, storageMsgList) if err != nil { - log.NewError(triggerID, "single data insert to redis err", err.Error(), storageMsgList) + log.ZError(ctx, "batch data insert to redis err", err, "storageMsgList", storageMsgList) och.singleMsgFailedCountMutex.Lock() och.singleMsgFailedCount += uint64(len(storageMsgList)) och.singleMsgFailedCountMutex.Unlock() @@ -119,18 +125,20 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { och.singleMsgSuccessCountMutex.Lock() och.singleMsgSuccessCount += uint64(len(storageMsgList)) och.singleMsgSuccessCountMutex.Unlock() - och.msgDatabase.MsgToMongoMQ(ctx, msgChannelValue.aggregationID, triggerID, storageMsgList, lastSeq) - for _, v := range storageMsgList { - och.msgDatabase.MsgToPushMQ(ctx, msgChannelValue.aggregationID, v) + och.msgDatabase.MsgToMongoMQ(ctx, msgChannelValue.aggregationID, "", storageMsgList, lastSeq) + for _, v := range storagePushMsgList { + och.msgDatabase.MsgToPushMQ(v.ctx, msgChannelValue.aggregationID, v.message) } for _, v := range notStoragePushMsgList { - och.msgDatabase.MsgToPushMQ(ctx, msgChannelValue.aggregationID, v) + och.msgDatabase.MsgToPushMQ(v.ctx, msgChannelValue.aggregationID, v.message) } } } else { for _, v := range notStoragePushMsgList { - och.msgDatabase.MsgToPushMQ(ctx, msgChannelValue.aggregationID, v) - + p, o, err := och.msgDatabase.MsgToPushMQ(v.ctx, msgChannelValue.aggregationID, v.message) + if err != nil { + log.ZError(v.ctx, "kafka send failed", err, "msg", v.message.String(), "pid", p, "offset", o) + } } } } @@ -140,40 +148,43 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { func (och *OnlineHistoryRedisConsumerHandler) MessagesDistributionHandle() { for { - aggregationMsgs := make(map[string][]*pbMsg.MsgDataToMQ, ChannelNum) + aggregationMsgs := make(map[string][]*ContextMsg, ChannelNum) select { case cmd := <-och.msgDistributionCh: switch cmd.Cmd { case ConsumerMsgs: triggerChannelValue := cmd.Value.(TriggerChannelValue) - triggerID := triggerChannelValue.triggerID + ctx := triggerChannelValue.ctx consumerMessages := triggerChannelValue.cMsgList //Aggregation map[userid]message list - log.Debug(triggerID, "batch messages come to distribution center", len(consumerMessages)) + log.ZDebug(ctx, "batch messages come to distribution center", len(consumerMessages)) for i := 0; i < len(consumerMessages); i++ { + ctxMsg := &ContextMsg{} msgFromMQ := pbMsg.MsgDataToMQ{} err := proto.Unmarshal(consumerMessages[i].Value, &msgFromMQ) if err != nil { - log.Error(triggerID, "msg_transfer Unmarshal msg err", "msg", string(consumerMessages[i].Value), "err", err.Error()) + log.ZError(ctx, "msg_transfer Unmarshal msg err", err, string(consumerMessages[i].Value)) return } - log.Debug(triggerID, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) + ctxMsg.ctx = kafka.GetContextWithMQHeader(consumerMessages[i].Headers) + ctxMsg.message = &msgFromMQ + log.ZDebug(ctx, "single msg come to distribution center", msgFromMQ.String(), string(consumerMessages[i].Key)) if oldM, ok := aggregationMsgs[string(consumerMessages[i].Key)]; ok { - oldM = append(oldM, &msgFromMQ) + oldM = append(oldM, ctxMsg) aggregationMsgs[string(consumerMessages[i].Key)] = oldM } else { - m := make([]*pbMsg.MsgDataToMQ, 0, 100) - m = append(m, &msgFromMQ) + m := make([]*ContextMsg, 0, 100) + m = append(m, ctxMsg) aggregationMsgs[string(consumerMessages[i].Key)] = m } } - log.Debug(triggerID, "generate map list users len", len(aggregationMsgs)) + log.ZDebug(ctx, "generate map list users len", len(aggregationMsgs)) for aggregationID, v := range aggregationMsgs { if len(v) >= 0 { hashCode := utils.GetHashCode(aggregationID) channelID := hashCode % ChannelNum - log.Debug(triggerID, "generate channelID", hashCode, channelID, aggregationID) - och.chArrays[channelID] <- Cmd2Value{Cmd: AggregationMessages, Value: MsgChannelValue{aggregationID: aggregationID, msgList: v, triggerID: triggerID}} + log.ZDebug(ctx, "generate channelID", "hashCode", hashCode, "channelID", channelID, "aggregationID", aggregationID) + och.chArrays[channelID] <- Cmd2Value{Cmd: AggregationMessages, Value: MsgChannelValue{aggregationID: aggregationID, ctxMsgList: v, ctx: ctx}} } } } @@ -194,10 +205,9 @@ func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerG } } rwLock := new(sync.RWMutex) - log.NewDebug("", "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) + log.ZDebug(context.Background(), "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) cMsg := make([]*sarama.ConsumerMessage, 0, 1000) t := time.NewTicker(time.Duration(100) * time.Millisecond) - var triggerID string go func() { for { select { @@ -211,18 +221,18 @@ func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerG cMsg = make([]*sarama.ConsumerMessage, 0, 1000) rwLock.Unlock() split := 1000 - triggerID = utils.OperationIDGenerator() - log.Debug(triggerID, "timer trigger msg consumer start", len(ccMsg)) + ctx := mcontext.WithTriggerIDContext(context.Background(), utils.OperationIDGenerator()) + log.ZDebug(ctx, "timer trigger msg consumer start", len(ccMsg)) for i := 0; i < len(ccMsg)/split; i++ { //log.Debug() och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cMsgList: ccMsg[i*split : (i+1)*split]}} + ctx: ctx, cMsgList: ccMsg[i*split : (i+1)*split]}} } if (len(ccMsg) % split) > 0 { och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ - triggerID: triggerID, cMsgList: ccMsg[split*(len(ccMsg)/split):]}} + ctx: ctx, cMsgList: ccMsg[split*(len(ccMsg)/split):]}} } - log.Debug(triggerID, "timer trigger msg consumer end", len(cMsg)) + log.ZDebug(ctx, "timer trigger msg consumer end", len(ccMsg)) } } } diff --git a/internal/push/push_handler.go b/internal/push/push_handler.go index c6a1ac660..b9edcb732 100644 --- a/internal/push/push_handler.go +++ b/internal/push/push_handler.go @@ -6,7 +6,6 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" kfk "github.com/OpenIMSDK/Open-IM-Server/pkg/common/kafka" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" pbChat "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" pbPush "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/push" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" @@ -29,10 +28,10 @@ func NewConsumerHandler(pusher *Pusher) *ConsumerHandler { } func (c *ConsumerHandler) handleMs2PsChat(ctx context.Context, msg []byte) { - log.NewDebug("", "msg come from kafka And push!!!", "msg", string(msg)) + log.ZDebug(ctx, "msg come from kafka And push!!!", "msg", string(msg)) msgFromMQ := pbChat.PushMsgDataToMQ{} if err := proto.Unmarshal(msg, &msgFromMQ); err != nil { - log.Error("", "push Unmarshal msg err", "msg", string(msg), "err", err.Error()) + log.ZError(ctx, "push Unmarshal msg err", err, "msg", string(msg)) return } pbData := &pbPush.PushMsgReq{ @@ -44,7 +43,6 @@ func (c *ConsumerHandler) handleMs2PsChat(ctx context.Context, msg []byte) { if nowSec-sec > 10 { return } - mcontext.SetOperationID(ctx, "") var err error switch msgFromMQ.MsgData.SessionType { case constant.SuperGroupChatType: @@ -53,7 +51,7 @@ func (c *ConsumerHandler) handleMs2PsChat(ctx context.Context, msg []byte) { err = c.pusher.MsgToUser(ctx, pbData.SourceID, pbData.MsgData) } if err != nil { - log.NewError("", "push failed", *pbData) + log.ZError(ctx, "push failed", err, "msg", pbData.String()) } } func (ConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index cbb350eb0..563e9b670 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -277,6 +277,7 @@ const OpUserPlatform = "platform" const Token = "token" const RpcCustomHeader = "customHeader" // rpc中间件自定义ctx参数 const CheckKey = "CheckKey" +const TriggerID = "triggerID" const ( UnreliableNotification = 1 diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go index ec06c1a43..33fef2314 100644 --- a/pkg/common/db/controller/msg.go +++ b/pkg/common/db/controller/msg.go @@ -77,7 +77,7 @@ type MsgDatabase interface { MsgToMQ(ctx context.Context, key string, msg2mq *pbMsg.MsgDataToMQ) error MsgToModifyMQ(ctx context.Context, aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ) error - MsgToPushMQ(ctx context.Context, sourceID string, msg2mq *pbMsg.MsgDataToMQ) error + MsgToPushMQ(ctx context.Context, sourceID string, msg2mq *pbMsg.MsgDataToMQ) (int32, int64, error) MsgToMongoMQ(ctx context.Context, aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq int64) error } @@ -193,10 +193,9 @@ func (db *msgDatabase) MsgToModifyMQ(ctx context.Context, aggregationID string, return nil } -func (db *msgDatabase) MsgToPushMQ(ctx context.Context, key string, msg2mq *pbMsg.MsgDataToMQ) error { +func (db *msgDatabase) MsgToPushMQ(ctx context.Context, key string, msg2mq *pbMsg.MsgDataToMQ) (int32, int64, error) { mqPushMsg := pbMsg.PushMsgDataToMQ{MsgData: msg2mq.MsgData, SourceID: key} - _, _, err := db.producerToPush.SendMessage(ctx, key, &mqPushMsg) - return err + return db.producerToPush.SendMessage(ctx, key, &mqPushMsg) } func (db *msgDatabase) MsgToMongoMQ(ctx context.Context, aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq int64) error { diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index bfeb84295..0a2a4625d 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -47,7 +47,24 @@ func NewKafkaProducer(addr []string, topic string) *Producer { p.producer = producer return &p } - +func GetMQHeaderWithContext(ctx context.Context) ([]sarama.RecordHeader, error) { + operationID, opUserID, platform, connID, err := mcontext.GetMustCtxInfo(ctx) + if err != nil { + return nil, err + } + return []sarama.RecordHeader{ + {Key: []byte(constant.OperationID), Value: []byte(operationID)}, + {Key: []byte(constant.OpUserID), Value: []byte(opUserID)}, + {Key: []byte(constant.OpUserPlatform), Value: []byte(platform)}, + {Key: []byte(constant.ConnID), Value: []byte(connID)}}, err +} +func GetContextWithMQHeader(header []*sarama.RecordHeader) context.Context { + var values []string + for _, recordHeader := range header { + values = append(values, string(recordHeader.Value)) + } + return mcontext.WithMustInfoCtx(values) +} func (p *Producer) SendMessage(ctx context.Context, key string, m proto.Message) (int32, int64, error) { log.ZDebug(ctx, "SendMessage", "key ", key, "msg", m.String()) kMsg := &sarama.ProducerMessage{} @@ -65,15 +82,11 @@ func (p *Producer) SendMessage(ctx context.Context, key string, m proto.Message) return 0, 0, utils.Wrap(emptyMsg, "") } kMsg.Metadata = ctx - operationID, opUserID, platform, connID, err := mcontext.GetMustCtxInfo(ctx) + header, err := GetMQHeaderWithContext(ctx) if err != nil { return 0, 0, utils.Wrap(err, "") } - kMsg.Headers = []sarama.RecordHeader{ - {Key: []byte(constant.OperationID), Value: []byte(operationID)}, - {Key: []byte(constant.OpUserID), Value: []byte(opUserID)}, - {Key: []byte(constant.OpUserPlatform), Value: []byte(platform)}, - {Key: []byte(constant.ConnID), Value: []byte(connID)}} + kMsg.Headers = header partition, offset, err := p.producer.SendMessage(kMsg) log.ZDebug(ctx, "ByteEncoder SendMessage end", "key ", kMsg.Key, "key length", kMsg.Value.Length()) if err == nil { diff --git a/pkg/common/log/zap.go b/pkg/common/log/zap.go index a405fd2e4..8fd8c5c21 100644 --- a/pkg/common/log/zap.go +++ b/pkg/common/log/zap.go @@ -147,14 +147,18 @@ func (l *ZapLogger) kvAppend(ctx context.Context, keysAndValues []interface{}) [ operationID := mcontext.GetOperationID(ctx) opUserID := mcontext.GetOpUserID(ctx) connID := mcontext.GetConnID(ctx) + triggerID := mcontext.GetTriggerID(ctx) if opUserID != "" { - keysAndValues = append([]interface{}{constant.OpUserID, mcontext.GetOpUserID(ctx)}, keysAndValues...) + keysAndValues = append([]interface{}{constant.OpUserID, opUserID}, keysAndValues...) } if operationID != "" { - keysAndValues = append([]interface{}{constant.OperationID, mcontext.GetOperationID(ctx)}, keysAndValues...) + keysAndValues = append([]interface{}{constant.OperationID, operationID}, keysAndValues...) } if connID != "" { - keysAndValues = append([]interface{}{constant.ConnID, mcontext.GetConnID(ctx)}, keysAndValues...) + keysAndValues = append([]interface{}{constant.ConnID, connID}, keysAndValues...) + } + if triggerID != "" { + keysAndValues = append([]interface{}{constant.TriggerID, triggerID}, keysAndValues...) } return keysAndValues } diff --git a/pkg/common/mcontext/ctx.go b/pkg/common/mcontext/ctx.go index bbb26f41c..898aacc53 100644 --- a/pkg/common/mcontext/ctx.go +++ b/pkg/common/mcontext/ctx.go @@ -6,6 +6,17 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" ) +var mapper = []string{constant.OperationID, constant.OpUserID, constant.OpUserPlatform, constant.ConnID} + +func WithOpUserIDContext(ctx context.Context, opUserID string) context.Context { + return context.WithValue(ctx, constant.OpUserID, opUserID) +} +func WithOpUserPlatformContext(ctx context.Context, platform string) context.Context { + return context.WithValue(ctx, constant.OpUserPlatform, platform) +} +func WithTriggerIDContext(ctx context.Context, triggerID string) context.Context { + return context.WithValue(ctx, constant.TriggerID, triggerID) +} func NewCtx(operationID string) context.Context { c := context.Background() ctx := context.WithValue(c, constant.OperationID, operationID) @@ -34,6 +45,34 @@ func GetOperationID(ctx context.Context) string { } return "" } +func GetOpUserID(ctx context.Context) string { + if ctx.Value(constant.OpUserID) != "" { + s, ok := ctx.Value(constant.OpUserID).(string) + if ok { + return s + } + } + return "" +} +func GetConnID(ctx context.Context) string { + if ctx.Value(constant.ConnID) != "" { + s, ok := ctx.Value(constant.ConnID).(string) + if ok { + return s + } + } + return "" +} + +func GetTriggerID(ctx context.Context) string { + if ctx.Value(constant.TriggerID) != "" { + s, ok := ctx.Value(constant.TriggerID).(string) + if ok { + return s + } + } + return "" +} func GetMustCtxInfo(ctx context.Context) (operationID, opUserID, platform, connID string, err error) { operationID, ok := ctx.Value(constant.OperationID).(string) if !ok { @@ -54,23 +93,12 @@ func GetMustCtxInfo(ctx context.Context) (operationID, opUserID, platform, connI return } +func WithMustInfoCtx(values []string) context.Context { + ctx := context.Background() + for i, v := range values { + ctx = context.WithValue(ctx, mapper[i], v) -func GetOpUserID(ctx context.Context) string { - if ctx.Value(constant.OpUserID) != "" { - s, ok := ctx.Value(constant.OpUserID).(string) - if ok { - return s - } } - return "" -} + return ctx -func GetConnID(ctx context.Context) string { - if ctx.Value(constant.ConnID) != "" { - s, ok := ctx.Value(constant.ConnID).(string) - if ok { - return s - } - } - return "" } From 254313d11faee9e24e9c2e8ccb1852ef8a75731e Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 18:47:29 +0800 Subject: [PATCH 29/54] msg update --- internal/msgtransfer/online_history_msg_handler.go | 3 ++- internal/push/push_handler.go | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/internal/msgtransfer/online_history_msg_handler.go b/internal/msgtransfer/online_history_msg_handler.go index dd3c07a3f..43349b19a 100644 --- a/internal/msgtransfer/online_history_msg_handler.go +++ b/internal/msgtransfer/online_history_msg_handler.go @@ -205,7 +205,8 @@ func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerG } } rwLock := new(sync.RWMutex) - log.ZDebug(context.Background(), "online new session msg come", claim.HighWaterMarkOffset(), claim.Topic(), claim.Partition()) + log.ZDebug(context.Background(), "online new session msg come", "highWaterMarkOffset", + claim.HighWaterMarkOffset(), "topic", claim.Topic(), "partition", claim.Partition()) cMsg := make([]*sarama.ConsumerMessage, 0, 1000) t := time.NewTicker(time.Duration(100) * time.Millisecond) go func() { diff --git a/internal/push/push_handler.go b/internal/push/push_handler.go index b9edcb732..8748563d3 100644 --- a/internal/push/push_handler.go +++ b/internal/push/push_handler.go @@ -28,7 +28,6 @@ func NewConsumerHandler(pusher *Pusher) *ConsumerHandler { } func (c *ConsumerHandler) handleMs2PsChat(ctx context.Context, msg []byte) { - log.ZDebug(ctx, "msg come from kafka And push!!!", "msg", string(msg)) msgFromMQ := pbChat.PushMsgDataToMQ{} if err := proto.Unmarshal(msg, &msgFromMQ); err != nil { log.ZError(ctx, "push Unmarshal msg err", err, "msg", string(msg)) @@ -59,7 +58,6 @@ func (ConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil func (c *ConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { for msg := range claim.Messages() { - log.NewDebug("", "kafka get info to mysql", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value)) ctx := c.pushConsumerGroup.GetContextFromMsg(msg, "push consumer") c.handleMs2PsChat(ctx, msg.Value) sess.MarkMessage(msg, "") From 2b0e0eb9e57b7cee05bb1569332ad5119f4b4b73 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 19:11:44 +0800 Subject: [PATCH 30/54] msg update --- internal/push/push_rpc_server.go | 3 ++- internal/push/push_to_client.go | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/push/push_rpc_server.go b/internal/push/push_rpc_server.go index 9da1eaaf5..08ab12563 100644 --- a/internal/push/push_rpc_server.go +++ b/internal/push/push_rpc_server.go @@ -9,6 +9,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" pbPush "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/push" "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" "sync" ) @@ -22,7 +23,7 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e return err } cacheModel := cache.NewCacheModel(rdb) - + client.AddOption(grpc.WithTransportCredentials(insecure.NewCredentials())) offlinePusher := NewOfflinePusher(cacheModel) database := controller.NewPushDatabase(cacheModel) pusher := NewPusher(client, offlinePusher, database, localcache.NewGroupLocalCache(client), localcache.NewConversationLocalCache(client)) diff --git a/internal/push/push_to_client.go b/internal/push/push_to_client.go index 62d5d4728..72eb6547a 100644 --- a/internal/push/push_to_client.go +++ b/internal/push/push_to_client.go @@ -185,7 +185,7 @@ func (p *Pusher) GetConnsAndOnlinePush(ctx context.Context, msg *sdkws.MsgData, msgClient := msggateway.NewMsgGatewayClient(v) reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(ctx, &msggateway.OnlineBatchPushOneMsgReq{MsgData: msg, PushToUserIDs: pushToUserIDs}) if err != nil { - log.NewError(mcontext.GetOperationID(ctx), msg, len(pushToUserIDs), "err", err) + continue } if reply != nil && reply.SinglePushResult != nil { From 19b8bd0ff60d6cc67cea9923b0b2ccbb1fee12ef Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 19:24:38 +0800 Subject: [PATCH 31/54] msg update --- internal/msgtransfer/modify_msg_handler.go | 2 +- .../msgtransfer/online_msg_to_mongo_handler.go | 2 +- internal/msgtransfer/persistent_msg_handler.go | 2 +- internal/push/push_handler.go | 2 +- pkg/common/kafka/consumer_group.go | 15 +++------------ 5 files changed, 7 insertions(+), 16 deletions(-) diff --git a/internal/msgtransfer/modify_msg_handler.go b/internal/msgtransfer/modify_msg_handler.go index 2d3f92027..f9c0228c3 100644 --- a/internal/msgtransfer/modify_msg_handler.go +++ b/internal/msgtransfer/modify_msg_handler.go @@ -41,7 +41,7 @@ func (mmc *ModifyMsgConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSessi for msg := range claim.Messages() { log.NewDebug("", "kafka get info to mysql", "ModifyMsgConsumerHandler", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key)) if len(msg.Value) != 0 { - ctx := mmc.modifyMsgConsumerGroup.GetContextFromMsg(msg, "modify consumer") + ctx := mmc.modifyMsgConsumerGroup.GetContextFromMsg(msg) mmc.ModifyMsg(ctx, msg, string(msg.Key), sess) } else { log.Error("", "msg get from kafka but is nil", msg.Key) diff --git a/internal/msgtransfer/online_msg_to_mongo_handler.go b/internal/msgtransfer/online_msg_to_mongo_handler.go index 3dd8a6e64..d0f4ff001 100644 --- a/internal/msgtransfer/online_msg_to_mongo_handler.go +++ b/internal/msgtransfer/online_msg_to_mongo_handler.go @@ -78,7 +78,7 @@ func (mc *OnlineHistoryMongoConsumerHandler) ConsumeClaim(sess sarama.ConsumerGr for msg := range claim.Messages() { log.NewDebug("", "kafka get info to mongo", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key)) if len(msg.Value) != 0 { - ctx := mc.historyConsumerGroup.GetContextFromMsg(msg, "mongoDB consumer") + ctx := mc.historyConsumerGroup.GetContextFromMsg(msg) mc.handleChatWs2Mongo(ctx, msg, string(msg.Key), sess) } else { log.Error("", "mongo msg get from kafka but is nil", msg.Key) diff --git a/internal/msgtransfer/persistent_msg_handler.go b/internal/msgtransfer/persistent_msg_handler.go index 19ec67201..ddc264a2b 100644 --- a/internal/msgtransfer/persistent_msg_handler.go +++ b/internal/msgtransfer/persistent_msg_handler.go @@ -78,7 +78,7 @@ func (pc *PersistentConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSessi for msg := range claim.Messages() { log.NewDebug("", "kafka get info to mysql", "msgTopic", msg.Topic, "msgPartition", msg.Partition, "msg", string(msg.Value), "key", string(msg.Key)) if len(msg.Value) != 0 { - ctx := pc.persistentConsumerGroup.GetContextFromMsg(msg, "mysql consumer") + ctx := pc.persistentConsumerGroup.GetContextFromMsg(msg) pc.handleChatWs2Mysql(ctx, msg, string(msg.Key), sess) } else { log.Error("", "msg get from kafka but is nil", msg.Key) diff --git a/internal/push/push_handler.go b/internal/push/push_handler.go index 8748563d3..3beafe75d 100644 --- a/internal/push/push_handler.go +++ b/internal/push/push_handler.go @@ -58,7 +58,7 @@ func (ConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil func (c *ConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { for msg := range claim.Messages() { - ctx := c.pushConsumerGroup.GetContextFromMsg(msg, "push consumer") + ctx := c.pushConsumerGroup.GetContextFromMsg(msg) c.handleMs2PsChat(ctx, msg.Value) sess.MarkMessage(msg, "") } diff --git a/pkg/common/kafka/consumer_group.go b/pkg/common/kafka/consumer_group.go index 7bc29fda2..c0c3823de 100644 --- a/pkg/common/kafka/consumer_group.go +++ b/pkg/common/kafka/consumer_group.go @@ -8,8 +8,6 @@ package kafka import ( "context" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/Shopify/sarama" ) @@ -42,16 +40,9 @@ func NewMConsumerGroup(consumerConfig *MConsumerGroupConfig, topics, addrs []str } } -func (mc *MConsumerGroup) GetContextFromMsg(cMsg *sarama.ConsumerMessage, rootFuncName string) context.Context { - ctx := mcontext.NewCtx(rootFuncName) - var operationID string - for _, v := range cMsg.Headers { - if string(v.Key) == constant.OperationID { - operationID = string(v.Value) - } - } - mcontext.SetOperationID(ctx, operationID) - return ctx +func (mc *MConsumerGroup) GetContextFromMsg(cMsg *sarama.ConsumerMessage) context.Context { + return GetContextWithMQHeader(cMsg.Headers) + } func (mc *MConsumerGroup) RegisterHandleAndConsumer(handler sarama.ConsumerGroupHandler) { From d2d3ee49794e06878c5937e62374e3a2293afc26 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 19:31:43 +0800 Subject: [PATCH 32/54] log --- internal/msgtransfer/online_history_msg_handler.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/msgtransfer/online_history_msg_handler.go b/internal/msgtransfer/online_history_msg_handler.go index 43349b19a..0cce342f6 100644 --- a/internal/msgtransfer/online_history_msg_handler.go +++ b/internal/msgtransfer/online_history_msg_handler.go @@ -95,7 +95,7 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { //ctx := mcontext.NewCtx("redis consumer") //mcontext.SetOperationID(ctx, triggerID) for _, v := range ctxMsgList { - log.ZDebug(ctx, "msg come to storage center", v.message.String()) + log.ZDebug(ctx, "msg come to storage center", "message", v.message.String()) isHistory := utils.GetSwitchFromOptions(v.message.MsgData.Options, constant.IsHistory) isSenderSync := utils.GetSwitchFromOptions(v.message.MsgData.Options, constant.IsSenderSync) if isHistory { @@ -113,7 +113,7 @@ func (och *OnlineHistoryRedisConsumerHandler) Run(channelID int) { if len(modifyMsgList) > 0 { och.msgDatabase.MsgToModifyMQ(ctx, msgChannelValue.aggregationID, "", modifyMsgList) } - log.ZDebug(ctx, "msg storage length", len(storageMsgList), "push length", len(notStoragePushMsgList)) + log.ZDebug(ctx, "msg storage length", "storageMsgList", len(storageMsgList), "push length", len(notStoragePushMsgList)) if len(storageMsgList) > 0 { lastSeq, err := och.msgDatabase.BatchInsertChat2Cache(ctx, msgChannelValue.aggregationID, storageMsgList) if err != nil { From 1f80758ebb93caef7d1ccdd9c2491825fc2487b2 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 19:38:35 +0800 Subject: [PATCH 33/54] log --- internal/msgtransfer/online_history_msg_handler.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/msgtransfer/online_history_msg_handler.go b/internal/msgtransfer/online_history_msg_handler.go index 0cce342f6..81f0497d8 100644 --- a/internal/msgtransfer/online_history_msg_handler.go +++ b/internal/msgtransfer/online_history_msg_handler.go @@ -157,7 +157,7 @@ func (och *OnlineHistoryRedisConsumerHandler) MessagesDistributionHandle() { ctx := triggerChannelValue.ctx consumerMessages := triggerChannelValue.cMsgList //Aggregation map[userid]message list - log.ZDebug(ctx, "batch messages come to distribution center", len(consumerMessages)) + log.ZDebug(ctx, "batch messages come to distribution center", "length", len(consumerMessages)) for i := 0; i < len(consumerMessages); i++ { ctxMsg := &ContextMsg{} msgFromMQ := pbMsg.MsgDataToMQ{} @@ -178,7 +178,7 @@ func (och *OnlineHistoryRedisConsumerHandler) MessagesDistributionHandle() { aggregationMsgs[string(consumerMessages[i].Key)] = m } } - log.ZDebug(ctx, "generate map list users len", len(aggregationMsgs)) + log.ZDebug(ctx, "generate map list users len", "length", len(aggregationMsgs)) for aggregationID, v := range aggregationMsgs { if len(v) >= 0 { hashCode := utils.GetHashCode(aggregationID) @@ -223,7 +223,7 @@ func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerG rwLock.Unlock() split := 1000 ctx := mcontext.WithTriggerIDContext(context.Background(), utils.OperationIDGenerator()) - log.ZDebug(ctx, "timer trigger msg consumer start", len(ccMsg)) + log.ZDebug(ctx, "timer trigger msg consumer start", "length", len(ccMsg)) for i := 0; i < len(ccMsg)/split; i++ { //log.Debug() och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ @@ -233,7 +233,7 @@ func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerG och.msgDistributionCh <- Cmd2Value{Cmd: ConsumerMsgs, Value: TriggerChannelValue{ ctx: ctx, cMsgList: ccMsg[split*(len(ccMsg)/split):]}} } - log.ZDebug(ctx, "timer trigger msg consumer end", len(ccMsg)) + log.ZDebug(ctx, "timer trigger msg consumer end", "length", len(ccMsg)) } } } From 77a9fad1022ee619693739115cae4a8d0bae60e5 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 19:39:20 +0800 Subject: [PATCH 34/54] log --- internal/msgtransfer/online_history_msg_handler.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/msgtransfer/online_history_msg_handler.go b/internal/msgtransfer/online_history_msg_handler.go index 81f0497d8..fa70ca435 100644 --- a/internal/msgtransfer/online_history_msg_handler.go +++ b/internal/msgtransfer/online_history_msg_handler.go @@ -192,8 +192,10 @@ func (och *OnlineHistoryRedisConsumerHandler) MessagesDistributionHandle() { } } -func (OnlineHistoryRedisConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } -func (OnlineHistoryRedisConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { return nil } +func (och *OnlineHistoryRedisConsumerHandler) Setup(_ sarama.ConsumerGroupSession) error { return nil } +func (och *OnlineHistoryRedisConsumerHandler) Cleanup(_ sarama.ConsumerGroupSession) error { + return nil +} func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { // a instance in the consumer group for { From 56cd2b0a4620bfb6dbce390676d9e81b542ce912 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 20:24:13 +0800 Subject: [PATCH 35/54] log --- internal/msggateway/client.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/msggateway/client.go b/internal/msggateway/client.go index 05f5182da..97955d77b 100644 --- a/internal/msggateway/client.go +++ b/internal/msggateway/client.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "runtime/debug" @@ -127,6 +128,8 @@ func (c *Client) handleMessage(message []byte) error { switch binaryReq.ReqIdentifier { case WSGetNewestSeq: resp, messageErr = c.longConnServer.GetSeq(ctx, binaryReq) + log.ZError(ctx, "WSGetNewestSeq", messageErr, "resp", resp) + case WSSendMsg: resp, messageErr = c.longConnServer.SendMessage(ctx, binaryReq) case WSSendSignalMsg: From 646cf767f9061482ef7e1d6ee468dd6a0bbcb582 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 22 Mar 2023 20:33:37 +0800 Subject: [PATCH 36/54] log --- internal/msggateway/client.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/msggateway/client.go b/internal/msggateway/client.go index 97955d77b..3299be1ca 100644 --- a/internal/msggateway/client.go +++ b/internal/msggateway/client.go @@ -92,6 +92,7 @@ func (c *Client) readMessage() { } returnErr = c.handleMessage(message) if returnErr != nil { + log.ZError(context.Background(), "WSGetNewestSeq", returnErr) break } From 1e683fcf95dc74fece4af5c8f48c1c05e14ba658 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 23 Mar 2023 09:48:11 +0800 Subject: [PATCH 37/54] api error --- pkg/apiresp/resp.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/apiresp/resp.go b/pkg/apiresp/resp.go index 688fc5b6a..06001a541 100644 --- a/pkg/apiresp/resp.go +++ b/pkg/apiresp/resp.go @@ -42,7 +42,11 @@ func apiSuccess(data any) *apiResponse { func apiError(err error) *apiResponse { unwrap := errs.Unwrap(err) if codeErr, ok := unwrap.(errs.CodeError); ok { - return &apiResponse{ErrCode: codeErr.Code(), ErrMsg: codeErr.Msg(), ErrDlt: codeErr.Detail()} + resp := apiResponse{ErrCode: codeErr.Code(), ErrMsg: codeErr.Msg(), ErrDlt: codeErr.Detail()} + if resp.ErrDlt == "" { + resp.ErrDlt = err.Error() + } + return &resp } return &apiResponse{ErrCode: errs.ServerInternalError, ErrMsg: err.Error()} } From 0a90986d14a0d8ee9789faef2ebe02a25e1b6b0a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 10:34:53 +0800 Subject: [PATCH 38/54] ws update --- go.mod | 2 +- internal/msggateway/hub_server.go | 4 +- pkg/rpcclient/check/gateway.go | 63 +++++++++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 pkg/rpcclient/check/gateway.go diff --git a/go.mod b/go.mod index 0ddea16ea..2aa573a54 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( firebase.google.com/go v3.13.0+incompatible - github.com/OpenIMSDK/openKeeper v0.0.4 + github.com/OpenIMSDK/openKeeper v0.0.5 github.com/OpenIMSDK/open_utils v1.0.8 github.com/Shopify/sarama v1.32.0 github.com/antonfisher/nested-logrus-formatter v1.3.1 diff --git a/internal/msggateway/hub_server.go b/internal/msggateway/hub_server.go index 96e56b398..95bac5725 100644 --- a/internal/msggateway/hub_server.go +++ b/internal/msggateway/hub_server.go @@ -14,13 +14,13 @@ import ( "google.golang.org/grpc" ) -func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { +func (s *Server) InitServer(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { msggateway.RegisterMsgGatewayServer(server, &Server{}) return nil } func (s *Server) Start() error { - return startrpc.Start(s.rpcPort, config.Config.RpcRegisterName.OpenImMessageGatewayName, s.prometheusPort, Start) + return startrpc.Start(s.rpcPort, config.Config.RpcRegisterName.OpenImMessageGatewayName, s.prometheusPort, s.InitServer) } type Server struct { diff --git a/pkg/rpcclient/check/gateway.go b/pkg/rpcclient/check/gateway.go new file mode 100644 index 000000000..76ca8e571 --- /dev/null +++ b/pkg/rpcclient/check/gateway.go @@ -0,0 +1,63 @@ +package check + +import ( + "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" + discoveryRegistry "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/friend" + "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" + "google.golang.org/grpc" +) + +type MessageGateWayRpcClient struct { + zk discoveryRegistry.SvcDiscoveryRegistry +} + +func NewMessageGateWayRpcClient(zk discoveryRegistry.SvcDiscoveryRegistry) *MessageGateWayRpcClient { + return &MessageGateWayRpcClient{ + zk: zk, + } +} + +func (m *MessageGateWayRpcClient) GetFriendsInfo(ctx context.Context, ownerUserID, friendUserID string) (resp *sdkws.FriendInfo, err error) { + cc, err := m.getConn() + if err != nil { + return nil, err + } + r, err := friend.NewFriendClient(cc).GetDesignatedFriends(ctx, &friend.GetDesignatedFriendsReq{OwnerUserID: ownerUserID, FriendUserIDs: []string{friendUserID}}) + if err != nil { + return nil, err + } + resp = r.FriendsInfo[0] + return +} +func (m *MessageGateWayRpcClient) getConn() (*grpc.ClientConn, error) { + return m.zk.GetConn(config.Config.RpcRegisterName.OpenImMessageGatewayName) +} + +// possibleFriendUserID是否在userID的好友中 +func (m *MessageGateWayRpcClient) IsFriend(ctx context.Context, possibleFriendUserID, userID string) (bool, error) { + cc, err := m.getConn() + if err != nil { + return false, err + } + resp, err := friend.NewFriendClient(cc).IsFriend(ctx, &friend.IsFriendReq{UserID1: userID, UserID2: possibleFriendUserID}) + if err != nil { + return false, err + } + return resp.InUser1Friends, nil + +} + +func (m *MessageGateWayRpcClient) GetFriendIDs(ctx context.Context, ownerUserID string) (friendIDs []string, err error) { + cc, err := m.getConn() + if err != nil { + return nil, err + } + req := friend.GetFriendIDsReq{UserID: ownerUserID} + resp, err := friend.NewFriendClient(cc).GetFriendIDs(ctx, &req) + if err != nil { + return nil, err + } + return resp.FriendIDs, err +} From 2564c2f06e3ab455e84f8efd047297fb804c505d Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 23 Mar 2023 10:39:03 +0800 Subject: [PATCH 39/54] ctx --- internal/msgtransfer/modify_msg_handler.go | 2 +- internal/tools/msg_test.go | 2 +- pkg/common/mcontext/ctx.go | 15 +++++++-------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/internal/msgtransfer/modify_msg_handler.go b/internal/msgtransfer/modify_msg_handler.go index f9c0228c3..c50e83220 100644 --- a/internal/msgtransfer/modify_msg_handler.go +++ b/internal/msgtransfer/modify_msg_handler.go @@ -66,7 +66,7 @@ func (mmc *ModifyMsgConsumerHandler) ModifyMsg(ctx context.Context, cMsg *sarama if !isReactionFromCache { continue } - mcontext.SetOperationID(ctx, operationID) + ctx = mcontext.SetOperationID(ctx, operationID) if msgDataToMQ.MsgData.ContentType == constant.ReactionMessageModifier { notification := &apistruct.ReactionMessageModifierNotification{} if err := json.Unmarshal(msgDataToMQ.MsgData.Content, notification); err != nil { diff --git a/internal/tools/msg_test.go b/internal/tools/msg_test.go index d3a62b5f5..2a83937df 100644 --- a/internal/tools/msg_test.go +++ b/internal/tools/msg_test.go @@ -66,7 +66,7 @@ func TestDeleteMongoMsgAndResetRedisSeq(t *testing.T) { mongoClient := mgo.GetDatabase().Collection(unRelationTb.MsgDocModel{}.TableName()) ctx := context.Background() - mcontext.SetOperationID(ctx, operationID) + ctx = mcontext.SetOperationID(ctx, operationID) testUID1 := "test_del_id1" _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID1 + ":" + strconv.Itoa(0)}) if err != nil { diff --git a/pkg/common/mcontext/ctx.go b/pkg/common/mcontext/ctx.go index 898aacc53..c1191bdaa 100644 --- a/pkg/common/mcontext/ctx.go +++ b/pkg/common/mcontext/ctx.go @@ -20,20 +20,19 @@ func WithTriggerIDContext(ctx context.Context, triggerID string) context.Context func NewCtx(operationID string) context.Context { c := context.Background() ctx := context.WithValue(c, constant.OperationID, operationID) - SetOperationID(ctx, operationID) - return ctx + return SetOperationID(ctx, operationID) } -func SetOperationID(ctx context.Context, operationID string) { - ctx = context.WithValue(ctx, constant.OperationID, operationID) +func SetOperationID(ctx context.Context, operationID string) context.Context { + return context.WithValue(ctx, constant.OperationID, operationID) } -func SetOpUserID(ctx context.Context, opUserID string) { - ctx = context.WithValue(ctx, constant.OpUserID, opUserID) +func SetOpUserID(ctx context.Context, opUserID string) context.Context { + return context.WithValue(ctx, constant.OpUserID, opUserID) } -func SetConnID(ctx context.Context, connID string) { - ctx = context.WithValue(ctx, constant.ConnID, connID) +func SetConnID(ctx context.Context, connID string) context.Context { + return context.WithValue(ctx, constant.ConnID, connID) } func GetOperationID(ctx context.Context) string { From d88c45c4157692b15d780f9e3f6c39d6bf19a8bd Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 12:05:25 +0800 Subject: [PATCH 40/54] ws update --- go.mod | 2 +- internal/msggateway/hub_server.go | 9 ++++++++- internal/msggateway/init.go | 1 + internal/msggateway/n_ws_server.go | 7 ++++++- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 2aa573a54..0ddea16ea 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( firebase.google.com/go v3.13.0+incompatible - github.com/OpenIMSDK/openKeeper v0.0.5 + github.com/OpenIMSDK/openKeeper v0.0.4 github.com/OpenIMSDK/open_utils v1.0.8 github.com/Shopify/sarama v1.32.0 github.com/antonfisher/nested-logrus-formatter v1.3.1 diff --git a/internal/msggateway/hub_server.go b/internal/msggateway/hub_server.go index 95bac5725..c745373c5 100644 --- a/internal/msggateway/hub_server.go +++ b/internal/msggateway/hub_server.go @@ -9,13 +9,15 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msggateway" + "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/notification" "github.com/OpenIMSDK/Open-IM-Server/pkg/startrpc" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "google.golang.org/grpc" ) func (s *Server) InitServer(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { - msggateway.RegisterMsgGatewayServer(server, &Server{}) + s.notification = notification.NewCheck(client) + msggateway.RegisterMsgGatewayServer(server, s) return nil } @@ -24,6 +26,7 @@ func (s *Server) Start() error { } type Server struct { + notification *notification.Check rpcPort int prometheusPort int LongConnServer LongConnServer @@ -31,6 +34,10 @@ type Server struct { //rpcServer *RpcServer } +func (s *Server) Notification() *notification.Check { + return s.notification +} + func NewServer(rpcPort int, longConnServer LongConnServer) *Server { return &Server{rpcPort: rpcPort, LongConnServer: longConnServer, pushTerminal: []int{constant.IOSPlatformID, constant.AndroidPlatformID}} } diff --git a/internal/msggateway/init.go b/internal/msggateway/init.go index 5aba286f4..af17cff17 100644 --- a/internal/msggateway/init.go +++ b/internal/msggateway/init.go @@ -23,6 +23,7 @@ func RunWsAndServer(rpcPort, wsPort, prometheusPort int) error { return err } hubServer := NewServer(rpcPort, longServer) + longServer.SetMessageHandler(hubServer.Notification()) go hubServer.Start() go hubServer.LongConnServer.Run() wg.Wait() diff --git a/internal/msggateway/n_ws_server.go b/internal/msggateway/n_ws_server.go index 561b4ab3c..d0964b3fd 100644 --- a/internal/msggateway/n_ws_server.go +++ b/internal/msggateway/n_ws_server.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" + "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/notification" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "github.com/go-playground/validator/v10" "net/http" @@ -42,12 +43,17 @@ type WsServer struct { onlineUserConnNum int64 handshakeTimeout time.Duration readBufferSize, WriteBufferSize int + hubServer *Server validate *validator.Validate Compressor Encoder MessageHandler } +func (ws *WsServer) SetMessageHandler(rpcClient *notification.Check) { + ws.MessageHandler = NewGrpcHandler(ws.validate, rpcClient) +} + func (ws *WsServer) UnRegister(c *Client) { ws.unregisterChan <- c } @@ -90,7 +96,6 @@ func NewWsServer(opts ...Option) (*WsServer, error) { clients: newUserMap(), Compressor: NewGzipCompressor(), Encoder: NewGobEncoder(), - MessageHandler: NewGrpcHandler(v, nil), //handler: NewGrpcHandler(validate), }, nil } From 87ae907df1c87a5071231179c5c70914164be743 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 12:33:25 +0800 Subject: [PATCH 41/54] ws update --- internal/msggateway/init.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/msggateway/init.go b/internal/msggateway/init.go index af17cff17..1e7f5d216 100644 --- a/internal/msggateway/init.go +++ b/internal/msggateway/init.go @@ -23,8 +23,8 @@ func RunWsAndServer(rpcPort, wsPort, prometheusPort int) error { return err } hubServer := NewServer(rpcPort, longServer) - longServer.SetMessageHandler(hubServer.Notification()) go hubServer.Start() + longServer.SetMessageHandler(hubServer.Notification()) go hubServer.LongConnServer.Run() wg.Wait() return nil From e794769eeaec612204d6233d185a917586dc97f3 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 12:49:18 +0800 Subject: [PATCH 42/54] ws update --- internal/msggateway/hub_server.go | 8 ++++++-- internal/msggateway/init.go | 3 ++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/internal/msggateway/hub_server.go b/internal/msggateway/hub_server.go index c745373c5..ff22567da 100644 --- a/internal/msggateway/hub_server.go +++ b/internal/msggateway/hub_server.go @@ -34,12 +34,16 @@ type Server struct { //rpcServer *RpcServer } +func (s *Server) SetLongConnServer(LongConnServer LongConnServer) { + s.LongConnServer = LongConnServer +} + func (s *Server) Notification() *notification.Check { return s.notification } -func NewServer(rpcPort int, longConnServer LongConnServer) *Server { - return &Server{rpcPort: rpcPort, LongConnServer: longConnServer, pushTerminal: []int{constant.IOSPlatformID, constant.AndroidPlatformID}} +func NewServer(rpcPort int) *Server { + return &Server{rpcPort: rpcPort, pushTerminal: []int{constant.IOSPlatformID, constant.AndroidPlatformID}} } func (s *Server) OnlinePushMsg(context context.Context, req *msggateway.OnlinePushMsgReq) (*msggateway.OnlinePushMsgResp, error) { diff --git a/internal/msggateway/init.go b/internal/msggateway/init.go index 1e7f5d216..24af9d433 100644 --- a/internal/msggateway/init.go +++ b/internal/msggateway/init.go @@ -22,9 +22,10 @@ func RunWsAndServer(rpcPort, wsPort, prometheusPort int) error { if err != nil { return err } - hubServer := NewServer(rpcPort, longServer) + hubServer := NewServer(rpcPort) go hubServer.Start() longServer.SetMessageHandler(hubServer.Notification()) + hubServer.SetLongConnServer(longServer) go hubServer.LongConnServer.Run() wg.Wait() return nil From c96d6b48d12368e7e044fce7db8a957f5da6d9ac Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 13:04:35 +0800 Subject: [PATCH 43/54] ws update --- internal/msggateway/message_handler.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/msggateway/message_handler.go b/internal/msggateway/message_handler.go index f8beb86e6..0e8b5fbe2 100644 --- a/internal/msggateway/message_handler.go +++ b/internal/msggateway/message_handler.go @@ -2,6 +2,7 @@ package msggateway import ( "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/msg" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/notification" @@ -53,6 +54,7 @@ func (g GrpcHandler) GetSeq(context context.Context, data Req) ([]byte, error) { if err := g.validate.Struct(req); err != nil { return nil, err } + log.ZDebug(context, "msggateway GetSeq", "notification", g.notification, "msg", g.notification.Msg) resp, err := g.notification.Msg.GetMaxAndMinSeq(context, &req) if err != nil { return nil, err From ac8a53b1b3e9beb42ae9600273dcff97d97bc9f7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 13:17:06 +0800 Subject: [PATCH 44/54] ws update --- internal/msggateway/init.go | 3 +++ internal/msggateway/n_ws_server.go | 2 ++ 2 files changed, 5 insertions(+) diff --git a/internal/msggateway/init.go b/internal/msggateway/init.go index 24af9d433..808abf817 100644 --- a/internal/msggateway/init.go +++ b/internal/msggateway/init.go @@ -24,6 +24,9 @@ func RunWsAndServer(rpcPort, wsPort, prometheusPort int) error { } hubServer := NewServer(rpcPort) go hubServer.Start() + if hubServer.Notification() == nil { + panic("notification is nil") + } longServer.SetMessageHandler(hubServer.Notification()) hubServer.SetLongConnServer(longServer) go hubServer.LongConnServer.Run() diff --git a/internal/msggateway/n_ws_server.go b/internal/msggateway/n_ws_server.go index d0964b3fd..24bfa213b 100644 --- a/internal/msggateway/n_ws_server.go +++ b/internal/msggateway/n_ws_server.go @@ -3,6 +3,7 @@ package msggateway import ( "errors" "fmt" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/notification" @@ -51,6 +52,7 @@ type WsServer struct { } func (ws *WsServer) SetMessageHandler(rpcClient *notification.Check) { + log.ZDebug(nil, "msggateway SetMessageHandler", "rpcClient", rpcClient) ws.MessageHandler = NewGrpcHandler(ws.validate, rpcClient) } From be3c866dc061d8e8d0c2fa29feeea7b85dd1ff9d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 14:05:49 +0800 Subject: [PATCH 45/54] ws update --- go.mod | 2 +- go.sum | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 0ddea16ea..2aa573a54 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( firebase.google.com/go v3.13.0+incompatible - github.com/OpenIMSDK/openKeeper v0.0.4 + github.com/OpenIMSDK/openKeeper v0.0.5 github.com/OpenIMSDK/open_utils v1.0.8 github.com/Shopify/sarama v1.32.0 github.com/antonfisher/nested-logrus-formatter v1.3.1 diff --git a/go.sum b/go.sum index df0114113..2c32e80e7 100644 --- a/go.sum +++ b/go.sum @@ -375,8 +375,8 @@ firebase.google.com/go v3.13.0+incompatible/go.mod h1:xlah6XbEyW6tbfSklcfe5FHJIw github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenIMSDK/openKeeper v0.0.4 h1:WwieeVzNCMYvd6HWRFh0cqrem3OoXDSJePA7taZ1ahQ= -github.com/OpenIMSDK/openKeeper v0.0.4/go.mod h1:RvyRXEcvWbonkmHLtT8KxGSCNlXY7OfDohhu53E6INU= +github.com/OpenIMSDK/openKeeper v0.0.5 h1:QGICLurmvmgCmd4sl3JglSsHTuJj2d95RPMp73cV1SI= +github.com/OpenIMSDK/openKeeper v0.0.5/go.mod h1:HwHgo+p3E+aAeiLOSyDwVB2zFJtu+QvnFNlfNjFG9vA= github.com/OpenIMSDK/open_utils v1.0.8 h1:IopxWgJwEF5ZAPsRuiZZOfcxNOQOCt/p8VDENcHN9r4= github.com/OpenIMSDK/open_utils v1.0.8/go.mod h1:FLoaQblWUVKQgqt2LrNzfSZLT6D3DICBn1kcOMDLUOI= github.com/Shopify/sarama v1.29.0 h1:ARid8o8oieau9XrHI55f/L3EoRAhm9px6sonbD7yuUE= @@ -751,7 +751,6 @@ github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6po github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= From 889e6b0d84f75eafd9b53d600047f3d951cc2c89 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 14:18:33 +0800 Subject: [PATCH 46/54] ws update --- internal/msggateway/hub_server.go | 6 +++--- internal/msggateway/init.go | 13 ++----------- internal/msggateway/n_ws_server.go | 1 + 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/internal/msggateway/hub_server.go b/internal/msggateway/hub_server.go index ff22567da..f9f7bfe8d 100644 --- a/internal/msggateway/hub_server.go +++ b/internal/msggateway/hub_server.go @@ -16,7 +16,7 @@ import ( ) func (s *Server) InitServer(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { - s.notification = notification.NewCheck(client) + s.LongConnServer.SetMessageHandler(notification.NewCheck(client)) msggateway.RegisterMsgGatewayServer(server, s) return nil } @@ -42,8 +42,8 @@ func (s *Server) Notification() *notification.Check { return s.notification } -func NewServer(rpcPort int) *Server { - return &Server{rpcPort: rpcPort, pushTerminal: []int{constant.IOSPlatformID, constant.AndroidPlatformID}} +func NewServer(rpcPort int, longConnServer LongConnServer) *Server { + return &Server{rpcPort: rpcPort, LongConnServer: longConnServer, pushTerminal: []int{constant.IOSPlatformID, constant.AndroidPlatformID}} } func (s *Server) OnlinePushMsg(context context.Context, req *msggateway.OnlinePushMsgReq) (*msggateway.OnlinePushMsgResp, error) { diff --git a/internal/msggateway/init.go b/internal/msggateway/init.go index 808abf817..9d0eee451 100644 --- a/internal/msggateway/init.go +++ b/internal/msggateway/init.go @@ -5,13 +5,10 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" - "sync" "time" ) func RunWsAndServer(rpcPort, wsPort, prometheusPort int) error { - var wg sync.WaitGroup - wg.Add(1) log.NewPrivateLog(constant.LogFileName) fmt.Println("start rpc/msg_gateway server, port: ", rpcPort, wsPort, prometheusPort, ", OpenIM version: ", config.Version) longServer, err := NewWsServer( @@ -22,14 +19,8 @@ func RunWsAndServer(rpcPort, wsPort, prometheusPort int) error { if err != nil { return err } - hubServer := NewServer(rpcPort) + hubServer := NewServer(rpcPort, longServer) go hubServer.Start() - if hubServer.Notification() == nil { - panic("notification is nil") - } - longServer.SetMessageHandler(hubServer.Notification()) - hubServer.SetLongConnServer(longServer) - go hubServer.LongConnServer.Run() - wg.Wait() + hubServer.LongConnServer.Run() return nil } diff --git a/internal/msggateway/n_ws_server.go b/internal/msggateway/n_ws_server.go index 24bfa213b..412818bd1 100644 --- a/internal/msggateway/n_ws_server.go +++ b/internal/msggateway/n_ws_server.go @@ -21,6 +21,7 @@ type LongConnServer interface { GetUserAllCons(userID string) ([]*Client, bool) GetUserPlatformCons(userID string, platform int) ([]*Client, bool, bool) Validate(s interface{}) error + SetMessageHandler(rpcClient *notification.Check) UnRegister(c *Client) Compressor Encoder From 63825283606371189314ff5ba8c808faf8ac086a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 14:22:02 +0800 Subject: [PATCH 47/54] ws update --- internal/msggateway/n_ws_server.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/msggateway/n_ws_server.go b/internal/msggateway/n_ws_server.go index 412818bd1..655ba0c89 100644 --- a/internal/msggateway/n_ws_server.go +++ b/internal/msggateway/n_ws_server.go @@ -3,7 +3,6 @@ package msggateway import ( "errors" "fmt" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/notification" @@ -53,7 +52,6 @@ type WsServer struct { } func (ws *WsServer) SetMessageHandler(rpcClient *notification.Check) { - log.ZDebug(nil, "msggateway SetMessageHandler", "rpcClient", rpcClient) ws.MessageHandler = NewGrpcHandler(ws.validate, rpcClient) } From 53ed7728f5310a2f49ae0a362412378d18cc2c62 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Thu, 23 Mar 2023 14:54:40 +0800 Subject: [PATCH 48/54] ctx --- pkg/common/db/ormutil/utils.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/common/db/ormutil/utils.go b/pkg/common/db/ormutil/utils.go index c64938f6c..4ef2a37ea 100644 --- a/pkg/common/db/ormutil/utils.go +++ b/pkg/common/db/ormutil/utils.go @@ -1,18 +1,19 @@ package ormutil import ( - "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" + "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "gorm.io/gorm" ) func GormPage[E any](db *gorm.DB, pageNumber, showNumber int32) (uint32, []*E, error) { var count int64 - if err := db.Count(&count).Error; err != nil { - return 0, nil, utils.Wrap(err, "") + var model E + if err := db.Model(&model).Count(&count).Error; err != nil { + return 0, nil, errs.Wrap(err) } var es []*E if err := db.Limit(int(showNumber)).Offset(int(pageNumber * showNumber)).Find(&es).Error; err != nil { - return 0, nil, utils.Wrap(err, "") + return 0, nil, errs.Wrap(err) } return uint32(count), es, nil } @@ -46,7 +47,7 @@ func MapCount(db *gorm.DB, field string) (map[string]uint32, error) { Count uint32 `gorm:"column:count"` } if err := db.Select(field + " as id, count(1) as count").Group(field).Find(&items).Error; err != nil { - return nil, err + return nil, errs.Wrap(err) } m := make(map[string]uint32) for _, item := range items { From e08a127213030bc7f37257a4cbc8164c939ff79a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 15:14:50 +0800 Subject: [PATCH 49/54] ws update --- internal/msggateway/client.go | 8 +++---- internal/msggateway/context.go | 37 +++++++++++++++++++++++++++++- internal/msggateway/hub_server.go | 2 +- internal/msggateway/n_ws_server.go | 13 ++++------- pkg/common/mcontext/ctx.go | 10 ++++++++ 5 files changed, 55 insertions(+), 15 deletions(-) diff --git a/internal/msggateway/client.go b/internal/msggateway/client.go index 3299be1ca..6e84ac25b 100644 --- a/internal/msggateway/client.go +++ b/internal/msggateway/client.go @@ -37,7 +37,7 @@ type Client struct { isCompress bool userID string isBackground bool - connID string + ctx *UserConnContext onlineAt int64 // 上线时间戳(毫秒) longConnServer LongConnServer closed bool @@ -50,7 +50,7 @@ func newClient(ctx *UserConnContext, conn LongConn, isCompress bool) *Client { platformID: utils.StringToInt(ctx.GetPlatformID()), isCompress: isCompress, userID: ctx.GetUserID(), - connID: ctx.GetConnID(), + ctx: ctx, onlineAt: utils.GetCurrentTimestampByMill(), } } @@ -60,7 +60,7 @@ func (c *Client) ResetClient(ctx *UserConnContext, conn LongConn, isCompress boo c.platformID = utils.StringToInt(ctx.GetPlatformID()) c.isCompress = isCompress c.userID = ctx.GetUserID() - c.connID = ctx.GetConnID() + c.ctx = ctx c.onlineAt = utils.GetCurrentTimestampByMill() c.longConnServer = longConnServer } @@ -120,7 +120,7 @@ func (c *Client) handleMessage(message []byte) error { return errors.New("exception conn userID not same to req userID") } ctx := context.Background() - ctx = context.WithValue(ctx, ConnID, c.connID) + ctx = context.WithValue(ctx, ConnID, c.ctx.GetConnID()) ctx = context.WithValue(ctx, OperationID, binaryReq.OperationID) ctx = context.WithValue(ctx, CommonUserID, binaryReq.SendID) ctx = context.WithValue(ctx, PlatformID, c.platformID) diff --git a/internal/msggateway/context.go b/internal/msggateway/context.go index 164b697e0..781a321ef 100644 --- a/internal/msggateway/context.go +++ b/internal/msggateway/context.go @@ -1,9 +1,11 @@ package msggateway import ( + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "net/http" "strconv" + "time" ) type UserConnContext struct { @@ -12,6 +14,35 @@ type UserConnContext struct { Path string Method string RemoteAddr string + ConnID string +} + +func (c *UserConnContext) Deadline() (deadline time.Time, ok bool) { + return +} + +func (c *UserConnContext) Done() <-chan struct{} { + return nil +} + +func (c *UserConnContext) Err() error { + return nil +} + +func (c *UserConnContext) Value(key any) any { + switch key { + case constant.OpUserID: + c.GetUserID() + case constant.OperationID: + c.GetOperationID() + case constant.ConnID: + c.GetConnID() + case constant.OpUserPlatform: + constant.PlatformIDToName(utils.StringToInt(c.GetPlatformID())) + default: + return "" + } + return "" } func newContext(respWriter http.ResponseWriter, req *http.Request) *UserConnContext { @@ -21,6 +52,7 @@ func newContext(respWriter http.ResponseWriter, req *http.Request) *UserConnCont Path: req.URL.Path, Method: req.Method, RemoteAddr: req.RemoteAddr, + ConnID: utils.Md5(req.RemoteAddr + "_" + strconv.Itoa(int(utils.GetCurrentTimestampByMill()))), } } func (c *UserConnContext) Query(key string) (string, bool) { @@ -44,7 +76,7 @@ func (c *UserConnContext) ErrReturn(error string, code int) { http.Error(c.RespWriter, error, code) } func (c *UserConnContext) GetConnID() string { - return utils.Md5(c.RemoteAddr + "_" + strconv.Itoa(int(utils.GetCurrentTimestampByMill()))) + return c.ConnID } func (c *UserConnContext) GetUserID() string { return c.Req.URL.Query().Get(WsUserID) @@ -52,3 +84,6 @@ func (c *UserConnContext) GetUserID() string { func (c *UserConnContext) GetPlatformID() string { return c.Req.URL.Query().Get(PlatformID) } +func (c *UserConnContext) GetOperationID() string { + return c.Req.URL.Query().Get(OperationID) +} diff --git a/internal/msggateway/hub_server.go b/internal/msggateway/hub_server.go index f9f7bfe8d..9f20143ef 100644 --- a/internal/msggateway/hub_server.go +++ b/internal/msggateway/hub_server.go @@ -67,7 +67,7 @@ func (s *Server) GetUsersOnlineStatus(ctx context.Context, req *msggateway.GetUs ps := new(msggateway.GetUsersOnlineStatusResp_SuccessDetail) ps.Platform = constant.PlatformIDToName(client.platformID) ps.Status = constant.OnlineStatus - ps.ConnID = client.connID + ps.ConnID = client.ctx.GetConnID() ps.IsBackground = client.isBackground temp.Status = constant.OnlineStatus temp.DetailPlatformStatus = append(temp.DetailPlatformStatus, ps) diff --git a/internal/msggateway/n_ws_server.go b/internal/msggateway/n_ws_server.go index 655ba0c89..26d3ea4fa 100644 --- a/internal/msggateway/n_ws_server.go +++ b/internal/msggateway/n_ws_server.go @@ -2,7 +2,7 @@ package msggateway import ( "errors" - "fmt" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/tokenverify" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" "github.com/OpenIMSDK/Open-IM-Server/pkg/rpcclient/notification" @@ -97,7 +97,6 @@ func NewWsServer(opts ...Option) (*WsServer, error) { clients: newUserMap(), Compressor: NewGzipCompressor(), Encoder: NewGobEncoder(), - //handler: NewGrpcHandler(validate), }, nil } func (ws *WsServer) Run() error { @@ -127,8 +126,7 @@ func (ws *WsServer) registerClient(client *Client) { ws.clients.Set(client.userID, client) atomic.AddInt64(&ws.onlineUserNum, 1) atomic.AddInt64(&ws.onlineUserConnNum, 1) - fmt.Println("R在线用户数量:", ws.onlineUserNum) - fmt.Println("R在线用户连接数量:", ws.onlineUserConnNum) + } else { if clientOK { //已经有同平台的连接存在 ws.clients.Set(client.userID, client) @@ -136,11 +134,9 @@ func (ws *WsServer) registerClient(client *Client) { } else { ws.clients.Set(client.userID, client) atomic.AddInt64(&ws.onlineUserConnNum, 1) - fmt.Println("R在线用户数量:", ws.onlineUserNum) - fmt.Println("R在线用户连接数量:", ws.onlineUserConnNum) } } - + log.ZInfo(client.ctx, "user online", "online user Num", ws.onlineUserNum, "online user conn Num", ws.onlineUserConnNum) } func (ws *WsServer) multiTerminalLoginChecker(client []*Client) { @@ -153,8 +149,7 @@ func (ws *WsServer) unregisterClient(client *Client) { atomic.AddInt64(&ws.onlineUserNum, -1) } atomic.AddInt64(&ws.onlineUserConnNum, -1) - fmt.Println("R在线用户数量:", ws.onlineUserNum) - fmt.Println("R在线用户连接数量:", ws.onlineUserConnNum) + log.ZInfo(client.ctx, "user offline", "online user Num", ws.onlineUserNum, "online user conn Num", ws.onlineUserConnNum) } func (ws *WsServer) wsHandler(w http.ResponseWriter, r *http.Request) { diff --git a/pkg/common/mcontext/ctx.go b/pkg/common/mcontext/ctx.go index c1191bdaa..fe4344616 100644 --- a/pkg/common/mcontext/ctx.go +++ b/pkg/common/mcontext/ctx.go @@ -72,6 +72,16 @@ func GetTriggerID(ctx context.Context) string { } return "" } +func GetOpUserPlatform(ctx context.Context) string { + if ctx.Value(constant.OpUserPlatform) != "" { + s, ok := ctx.Value(constant.OpUserPlatform).(string) + if ok { + return s + } + } + return "" +} + func GetMustCtxInfo(ctx context.Context) (operationID, opUserID, platform, connID string, err error) { operationID, ok := ctx.Value(constant.OperationID).(string) if !ok { From a5380a971b2ba56440e1c3cd40da386252e75953 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 15:42:31 +0800 Subject: [PATCH 50/54] ws update --- cmd/Open-IM-SDK-Core | 2 +- internal/msggateway/client.go | 8 +-- pkg/common/mw/rpc_client_interceptor.go | 76 ++++++++++++++----------- pkg/common/mw/rpc_server_interceptor.go | 3 + 4 files changed, 51 insertions(+), 38 deletions(-) diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 9fd1af471..94da8cc10 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 9fd1af471356fa122fb87587fb9501e9292fb416 +Subproject commit 94da8cc1074e9b6d14a94a41bf37885b27253a2d diff --git a/internal/msggateway/client.go b/internal/msggateway/client.go index 6e84ac25b..fa0729eb1 100644 --- a/internal/msggateway/client.go +++ b/internal/msggateway/client.go @@ -4,7 +4,9 @@ import ( "context" "errors" "fmt" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/mcontext" "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" "runtime/debug" @@ -119,11 +121,7 @@ func (c *Client) handleMessage(message []byte) error { if binaryReq.SendID != c.userID { return errors.New("exception conn userID not same to req userID") } - ctx := context.Background() - ctx = context.WithValue(ctx, ConnID, c.ctx.GetConnID()) - ctx = context.WithValue(ctx, OperationID, binaryReq.OperationID) - ctx = context.WithValue(ctx, CommonUserID, binaryReq.SendID) - ctx = context.WithValue(ctx, PlatformID, c.platformID) + ctx := mcontext.WithMustInfoCtx([]string{binaryReq.OperationID, binaryReq.SendID, constant.PlatformIDToName(c.platformID), c.ctx.GetConnID()}) var messageErr error var resp []byte switch binaryReq.ReqIdentifier { diff --git a/pkg/common/mw/rpc_client_interceptor.go b/pkg/common/mw/rpc_client_interceptor.go index eda323836..9c8757e6c 100644 --- a/pkg/common/mw/rpc_client_interceptor.go +++ b/pkg/common/mw/rpc_client_interceptor.go @@ -23,39 +23,11 @@ func rpcClientInterceptor(ctx context.Context, method string, req, resp interfac return errs.ErrInternalServer.Wrap("call rpc request context is nil") } log.ZInfo(ctx, "rpc client req", "funcName", method, "req", rpcString(req)) - md := metadata.Pairs() - if keys, _ := ctx.Value(constant.RpcCustomHeader).([]string); len(keys) > 0 { - for _, key := range keys { - val, ok := ctx.Value(key).([]string) - if !ok { - return errs.ErrInternalServer.Wrap(fmt.Sprintf("ctx missing key %s", key)) - } - if len(val) == 0 { - return errs.ErrInternalServer.Wrap(fmt.Sprintf("ctx key %s value is empty", key)) - } - md.Set(key, val...) - } - md.Set(constant.RpcCustomHeader, keys...) + ctx, err = getRpcContext(ctx, method) + if err != nil { + return err } - operationID, ok := ctx.Value(constant.OperationID).(string) - if !ok { - log.ZWarn(ctx, "ctx missing operationID", errors.New("ctx missing operationID"), "funcName", method) - return errs.ErrArgs.Wrap("ctx missing operationID") - } - md.Set(constant.OperationID, operationID) - args := make([]string, 0, 4) - args = append(args, constant.OperationID, operationID) - opUserID, ok := ctx.Value(constant.OpUserID).(string) - if ok { - md.Set(constant.OpUserID, opUserID) - args = append(args, constant.OpUserID, opUserID) - } - opUserIDPlatformID, ok := ctx.Value(constant.OpUserPlatform).(string) - if ok { - md.Set(constant.OpUserPlatform, opUserIDPlatformID) - } - md.Set(constant.CheckKey, genReqKey(args)) - err = invoker(metadata.NewOutgoingContext(ctx, md), method, req, resp, cc, opts...) + err = invoker(ctx, method, req, resp, cc, opts...) if err == nil { log.ZInfo(ctx, "rpc client resp", "funcName", method, "resp", rpcString(resp)) return nil @@ -78,3 +50,43 @@ func rpcClientInterceptor(ctx context.Context, method string, req, resp interfac } return errs.NewCodeError(int(sta.Code()), sta.Message()).Wrap() } + +func getRpcContext(ctx context.Context, method string) (context.Context, error) { + md := metadata.Pairs() + if keys, _ := ctx.Value(constant.RpcCustomHeader).([]string); len(keys) > 0 { + for _, key := range keys { + val, ok := ctx.Value(key).([]string) + if !ok { + return nil, errs.ErrInternalServer.Wrap(fmt.Sprintf("ctx missing key %s", key)) + } + if len(val) == 0 { + return nil, errs.ErrInternalServer.Wrap(fmt.Sprintf("ctx key %s value is empty", key)) + } + md.Set(key, val...) + } + md.Set(constant.RpcCustomHeader, keys...) + } + operationID, ok := ctx.Value(constant.OperationID).(string) + if !ok { + log.ZWarn(ctx, "ctx missing operationID", errors.New("ctx missing operationID"), "funcName", method) + return nil, errs.ErrArgs.Wrap("ctx missing operationID") + } + md.Set(constant.OperationID, operationID) + var checkArgs []string + checkArgs = append(checkArgs, constant.OperationID, operationID) + opUserID, ok := ctx.Value(constant.OpUserID).(string) + if ok { + md.Set(constant.OpUserID, opUserID) + checkArgs = append(checkArgs, constant.OpUserID, opUserID) + } + opUserIDPlatformID, ok := ctx.Value(constant.OpUserPlatform).(string) + if ok { + md.Set(constant.OpUserPlatform, opUserIDPlatformID) + } + connID, ok := ctx.Value(constant.ConnID).(string) + if ok { + md.Set(constant.ConnID, connID) + } + md.Set(constant.CheckKey, genReqKey(checkArgs)) + return metadata.NewOutgoingContext(ctx, md), nil +} diff --git a/pkg/common/mw/rpc_server_interceptor.go b/pkg/common/mw/rpc_server_interceptor.go index f47a4321b..e923f1319 100644 --- a/pkg/common/mw/rpc_server_interceptor.go +++ b/pkg/common/mw/rpc_server_interceptor.go @@ -79,6 +79,9 @@ func rpcServerInterceptor(ctx context.Context, req interface{}, info *grpc.Unary if opts := md.Get(constant.OpUserPlatform); len(opts) == 1 { ctx = context.WithValue(ctx, constant.OpUserPlatform, opts[0]) } + if opts := md.Get(constant.ConnID); len(opts) == 1 { + ctx = context.WithValue(ctx, constant.ConnID, opts[0]) + } if opts := md.Get(constant.CheckKey); len(opts) != 1 || opts[0] == "" { return nil, status.New(codes.InvalidArgument, "check key empty").Err() } else { From 393dfa590284e56f7da17177c5ff2e0e601dc661 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 15:56:47 +0800 Subject: [PATCH 51/54] ws update --- internal/msggateway/context.go | 11 ++++++----- pkg/common/constant/constant.go | 1 + pkg/common/log/zap.go | 8 ++++++++ pkg/common/mcontext/ctx.go | 9 +++++++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/internal/msggateway/context.go b/internal/msggateway/context.go index 781a321ef..5006a01fd 100644 --- a/internal/msggateway/context.go +++ b/internal/msggateway/context.go @@ -32,17 +32,18 @@ func (c *UserConnContext) Err() error { func (c *UserConnContext) Value(key any) any { switch key { case constant.OpUserID: - c.GetUserID() + return c.GetUserID() case constant.OperationID: - c.GetOperationID() + return c.GetOperationID() case constant.ConnID: - c.GetConnID() + return c.GetConnID() case constant.OpUserPlatform: - constant.PlatformIDToName(utils.StringToInt(c.GetPlatformID())) + return constant.PlatformIDToName(utils.StringToInt(c.GetPlatformID())) + case constant.RemoteAddr: + return c.RemoteAddr default: return "" } - return "" } func newContext(respWriter http.ResponseWriter, req *http.Request) *UserConnContext { diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 563e9b670..ea312c73a 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -278,6 +278,7 @@ const Token = "token" const RpcCustomHeader = "customHeader" // rpc中间件自定义ctx参数 const CheckKey = "CheckKey" const TriggerID = "triggerID" +const RemoteAddr = "remoteAddr" const ( UnreliableNotification = 1 diff --git a/pkg/common/log/zap.go b/pkg/common/log/zap.go index 8fd8c5c21..0954161c9 100644 --- a/pkg/common/log/zap.go +++ b/pkg/common/log/zap.go @@ -148,6 +148,8 @@ func (l *ZapLogger) kvAppend(ctx context.Context, keysAndValues []interface{}) [ opUserID := mcontext.GetOpUserID(ctx) connID := mcontext.GetConnID(ctx) triggerID := mcontext.GetTriggerID(ctx) + opUserPlatform := mcontext.GetOpUserPlatform(ctx) + remoteAddr := mcontext.GetRemoteAddr(ctx) if opUserID != "" { keysAndValues = append([]interface{}{constant.OpUserID, opUserID}, keysAndValues...) } @@ -160,6 +162,12 @@ func (l *ZapLogger) kvAppend(ctx context.Context, keysAndValues []interface{}) [ if triggerID != "" { keysAndValues = append([]interface{}{constant.TriggerID, triggerID}, keysAndValues...) } + if opUserPlatform != "" { + keysAndValues = append([]interface{}{constant.OpUserPlatform, opUserPlatform}, keysAndValues...) + } + if remoteAddr != "" { + keysAndValues = append([]interface{}{constant.RemoteAddr, remoteAddr}, keysAndValues...) + } return keysAndValues } diff --git a/pkg/common/mcontext/ctx.go b/pkg/common/mcontext/ctx.go index fe4344616..448521ad5 100644 --- a/pkg/common/mcontext/ctx.go +++ b/pkg/common/mcontext/ctx.go @@ -81,6 +81,15 @@ func GetOpUserPlatform(ctx context.Context) string { } return "" } +func GetRemoteAddr(ctx context.Context) string { + if ctx.Value(constant.RemoteAddr) != "" { + s, ok := ctx.Value(constant.RemoteAddr).(string) + if ok { + return s + } + } + return "" +} func GetMustCtxInfo(ctx context.Context) (operationID, opUserID, platform, connID string, err error) { operationID, ok := ctx.Value(constant.OperationID).(string) From f109ead7050847d2fa9628f99f71151f3e11c13f Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 16:53:25 +0800 Subject: [PATCH 52/54] ws update --- internal/push/push_rpc_server.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/push/push_rpc_server.go b/internal/push/push_rpc_server.go index 08ab12563..cebf55ecb 100644 --- a/internal/push/push_rpc_server.go +++ b/internal/push/push_rpc_server.go @@ -9,7 +9,6 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/discoveryregistry" pbPush "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/push" "google.golang.org/grpc" - "google.golang.org/grpc/credentials/insecure" "sync" ) @@ -23,7 +22,6 @@ func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) e return err } cacheModel := cache.NewCacheModel(rdb) - client.AddOption(grpc.WithTransportCredentials(insecure.NewCredentials())) offlinePusher := NewOfflinePusher(cacheModel) database := controller.NewPushDatabase(cacheModel) pusher := NewPusher(client, offlinePusher, database, localcache.NewGroupLocalCache(client), localcache.NewConversationLocalCache(client)) From 52f49140b20d72f0fd9f13260579be25a90c446a Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 17:06:21 +0800 Subject: [PATCH 53/54] ws update --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 2aa573a54..9a576660a 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.18 require ( firebase.google.com/go v3.13.0+incompatible - github.com/OpenIMSDK/openKeeper v0.0.5 + github.com/OpenIMSDK/openKeeper v0.0.6 github.com/OpenIMSDK/open_utils v1.0.8 github.com/Shopify/sarama v1.32.0 github.com/antonfisher/nested-logrus-formatter v1.3.1 diff --git a/go.sum b/go.sum index 2c32e80e7..8cba84680 100644 --- a/go.sum +++ b/go.sum @@ -375,8 +375,8 @@ firebase.google.com/go v3.13.0+incompatible/go.mod h1:xlah6XbEyW6tbfSklcfe5FHJIw github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenIMSDK/openKeeper v0.0.5 h1:QGICLurmvmgCmd4sl3JglSsHTuJj2d95RPMp73cV1SI= -github.com/OpenIMSDK/openKeeper v0.0.5/go.mod h1:HwHgo+p3E+aAeiLOSyDwVB2zFJtu+QvnFNlfNjFG9vA= +github.com/OpenIMSDK/openKeeper v0.0.6 h1:0eseL/h+evxZAM5Dqs85FEDbDFkTjpVwHBSINQOca5M= +github.com/OpenIMSDK/openKeeper v0.0.6/go.mod h1:HwHgo+p3E+aAeiLOSyDwVB2zFJtu+QvnFNlfNjFG9vA= github.com/OpenIMSDK/open_utils v1.0.8 h1:IopxWgJwEF5ZAPsRuiZZOfcxNOQOCt/p8VDENcHN9r4= github.com/OpenIMSDK/open_utils v1.0.8/go.mod h1:FLoaQblWUVKQgqt2LrNzfSZLT6D3DICBn1kcOMDLUOI= github.com/Shopify/sarama v1.29.0 h1:ARid8o8oieau9XrHI55f/L3EoRAhm9px6sonbD7yuUE= From a0d61769b26c02b566ad414b5000c4a2639767f7 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 23 Mar 2023 17:51:38 +0800 Subject: [PATCH 54/54] ws update --- internal/msggateway/client.go | 2 +- internal/push/push_to_client.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/msggateway/client.go b/internal/msggateway/client.go index fa0729eb1..cd39f8f83 100644 --- a/internal/msggateway/client.go +++ b/internal/msggateway/client.go @@ -71,7 +71,7 @@ func (c *Client) readMessage() { if r := recover(); r != nil { fmt.Println("socket have panic err:", r, string(debug.Stack())) } - //c.close() + c.close() }() //var returnErr error for { diff --git a/internal/push/push_to_client.go b/internal/push/push_to_client.go index 72eb6547a..731403606 100644 --- a/internal/push/push_to_client.go +++ b/internal/push/push_to_client.go @@ -71,7 +71,7 @@ func (p *Pusher) MsgToUser(ctx context.Context, userID string, msg *sdkws.MsgDat } isOfflinePush := utils.GetSwitchFromOptions(msg.Options, constant.IsOfflinePush) //log.NewInfo(operationID, "push_result", wsResults, "sendData", msg, "isOfflinePush", isOfflinePush) - log.ZDebug(ctx, "push_result", "ws push result", wsResults, "sendData", msg, "isOfflinePush", isOfflinePush) + log.ZDebug(ctx, "push_result", "ws push result", wsResults, "sendData", msg, "isOfflinePush", isOfflinePush, "push_to_userID", userID) p.successCount++ if isOfflinePush && userID != msg.SendID { // save invitation info for offline push @@ -177,6 +177,7 @@ func (p *Pusher) MsgToSuperGroupUser(ctx context.Context, groupID string, msg *s func (p *Pusher) GetConnsAndOnlinePush(ctx context.Context, msg *sdkws.MsgData, pushToUserIDs []string) (wsResults []*msggateway.SingleMsgToUserResults, err error) { conns, err := p.client.GetConns(config.Config.RpcRegisterName.OpenImMessageGatewayName) + log.ZDebug(ctx, "get gateway conn", "conn length", len(conns)) if err != nil { return nil, err } @@ -185,7 +186,6 @@ func (p *Pusher) GetConnsAndOnlinePush(ctx context.Context, msg *sdkws.MsgData, msgClient := msggateway.NewMsgGatewayClient(v) reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(ctx, &msggateway.OnlineBatchPushOneMsgReq{MsgData: msg, PushToUserIDs: pushToUserIDs}) if err != nil { - continue } if reply != nil && reply.SinglePushResult != nil {