From 31833d06bad0a504655af8a00d7acb23ea6d4466 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Mar 2023 15:10:21 +0800 Subject: [PATCH 1/5] db --- internal/apiresp/resp.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/internal/apiresp/resp.go b/internal/apiresp/resp.go index 5d208d0d3..f151ca88b 100644 --- a/internal/apiresp/resp.go +++ b/internal/apiresp/resp.go @@ -1,6 +1,8 @@ package apiresp import ( + "context" + "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" ) @@ -12,6 +14,9 @@ type apiResponse struct { } func apiSuccess(data any) *apiResponse { + log.ZDebug(context.Background(), "apiSuccess", "resp", &apiResponse{ + Data: data, + }) return &apiResponse{ Data: data, } From ce87ef0a04d574044659308cc9d1aa9d116ccba2 Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Thu, 16 Mar 2023 15:10:23 +0800 Subject: [PATCH 2/5] conversation update --- internal/common/check/conversation.go | 13 ++++++++++++- pkg/common/log/zap.go | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/internal/common/check/conversation.go b/internal/common/check/conversation.go index ca3bf21e9..c391d2626 100644 --- a/internal/common/check/conversation.go +++ b/internal/common/check/conversation.go @@ -31,5 +31,16 @@ func (c *ConversationChecker) getConn() (*grpc.ClientConn, error) { } func (c *ConversationChecker) GetSingleConversationRecvMsgOpt(ctx context.Context, userID, conversationID string) (int32, error) { - panic("implement me") + cc, err := c.getConn() + if err != nil { + return 0, err + } + var req conversation.GetConversationReq + req.OwnerUserID = userID + req.ConversationID = conversationID + sConversation, err := conversation.NewConversationClient(cc).GetConversation(ctx, &req) + if err != nil { + return 0, err + } + return sConversation.GetConversation().RecvMsgOpt, err } diff --git a/pkg/common/log/zap.go b/pkg/common/log/zap.go index dc8a0ed95..4a5c2efa2 100644 --- a/pkg/common/log/zap.go +++ b/pkg/common/log/zap.go @@ -77,6 +77,7 @@ func (l *ZapLogger) cores() (zap.Option, error) { c := zap.NewProductionEncoderConfig() c.EncodeTime = zapcore.ISO8601TimeEncoder c.EncodeDuration = zapcore.SecondsDurationEncoder + c.EncodeLevel = zapcore.CapitalLevelEncoder c.MessageKey = "msg" c.LevelKey = "level" c.TimeKey = "time" From 12d25e91bfb577d3f0da0c32d9eb9fbee8533624 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Mar 2023 16:10:08 +0800 Subject: [PATCH 3/5] db --- internal/apiresp/resp.go | 3 --- internal/rpc/friend/black.go | 20 ++++++++++++-------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/internal/apiresp/resp.go b/internal/apiresp/resp.go index f151ca88b..4f6a636db 100644 --- a/internal/apiresp/resp.go +++ b/internal/apiresp/resp.go @@ -14,9 +14,6 @@ type apiResponse struct { } func apiSuccess(data any) *apiResponse { - log.ZDebug(context.Background(), "apiSuccess", "resp", &apiResponse{ - Data: data, - }) return &apiResponse{ Data: data, } diff --git a/internal/rpc/friend/black.go b/internal/rpc/friend/black.go index de687c1ba..d66ac7c74 100644 --- a/internal/rpc/friend/black.go +++ b/internal/rpc/friend/black.go @@ -7,17 +7,23 @@ import ( "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" + "time" ) func (s *friendServer) GetPaginationBlacks(ctx context.Context, req *pbFriend.GetPaginationBlacksReq) (resp *pbFriend.GetPaginationBlacksResp, err error) { - resp = &pbFriend.GetPaginationBlacksResp{} if err := s.userCheck.Access(ctx, req.UserID); err != nil { return nil, err } - blacks, total, err := s.BlackDatabase.FindOwnerBlacks(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber) + var pageNumber, showNumber int32 + if req.Pagination != nil { + pageNumber = req.Pagination.PageNumber + showNumber = req.Pagination.ShowNumber + } + blacks, total, err := s.BlackDatabase.FindOwnerBlacks(ctx, req.UserID, pageNumber, showNumber) if err != nil { return nil, err } + resp = &pbFriend.GetPaginationBlacksResp{} resp.Blacks, err = (*convert.NewDBBlack(nil, s.RegisterCenter)).DB2PB(ctx, blacks) if err != nil { return nil, err @@ -27,18 +33,17 @@ func (s *friendServer) GetPaginationBlacks(ctx context.Context, req *pbFriend.Ge } func (s *friendServer) IsBlack(ctx context.Context, req *pbFriend.IsBlackReq) (*pbFriend.IsBlackResp, error) { - resp := &pbFriend.IsBlackResp{} in1, in2, err := s.BlackDatabase.CheckIn(ctx, req.UserID1, req.UserID2) if err != nil { return nil, err } + resp := &pbFriend.IsBlackResp{} resp.InUser1Blacks = in1 resp.InUser2Blacks = in2 return resp, nil } func (s *friendServer) RemoveBlack(ctx context.Context, req *pbFriend.RemoveBlackReq) (*pbFriend.RemoveBlackResp, error) { - resp := &pbFriend.RemoveBlackResp{} if err := s.userCheck.Access(ctx, req.OwnerUserID); err != nil { return nil, err } @@ -46,18 +51,17 @@ func (s *friendServer) RemoveBlack(ctx context.Context, req *pbFriend.RemoveBlac return nil, err } s.notification.BlackDeletedNotification(ctx, req) - return resp, nil + return &pbFriend.RemoveBlackResp{}, nil } func (s *friendServer) AddBlack(ctx context.Context, req *pbFriend.AddBlackReq) (*pbFriend.AddBlackResp, error) { - resp := &pbFriend.AddBlackResp{} if err := tokenverify.CheckAccessV3(ctx, req.OwnerUserID); err != nil { return nil, err } - black := relation.BlackModel{OwnerUserID: req.OwnerUserID, BlockUserID: req.BlackUserID, OperatorUserID: tracelog.GetOpUserID(ctx)} + black := relation.BlackModel{OwnerUserID: req.OwnerUserID, BlockUserID: req.BlackUserID, OperatorUserID: tracelog.GetOpUserID(ctx), CreateTime: time.Now()} if err := s.BlackDatabase.Create(ctx, []*relation.BlackModel{&black}); err != nil { return nil, err } s.notification.BlackAddedNotification(ctx, req) - return resp, nil + return &pbFriend.AddBlackResp{}, nil } From 962c39f3c25223d7cae05c5120dcf6608b231572 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Mar 2023 16:11:34 +0800 Subject: [PATCH 4/5] db --- internal/apiresp/resp.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/apiresp/resp.go b/internal/apiresp/resp.go index 4f6a636db..5d208d0d3 100644 --- a/internal/apiresp/resp.go +++ b/internal/apiresp/resp.go @@ -1,8 +1,6 @@ package apiresp import ( - "context" - "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" ) From d725b9538fd051a12fdc60e56e8c8904c53e2f90 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 16 Mar 2023 16:23:56 +0800 Subject: [PATCH 5/5] db --- pkg/common/db/relation/mysql_init.go | 68 +------------------------ pkg/common/log/sql_logger.go | 74 ++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+), 67 deletions(-) create mode 100644 pkg/common/log/sql_logger.go diff --git a/pkg/common/db/relation/mysql_init.go b/pkg/common/db/relation/mysql_init.go index b365b8b4d..c7b7062b0 100644 --- a/pkg/common/db/relation/mysql_init.go +++ b/pkg/common/db/relation/mysql_init.go @@ -1,8 +1,6 @@ package relation import ( - "context" - "errors" "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/config" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/log" @@ -10,7 +8,6 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" mysqlDriver "github.com/go-sql-driver/mysql" "gorm.io/driver/mysql" - gormUtils "gorm.io/gorm/utils" "time" "gorm.io/gorm" @@ -40,7 +37,7 @@ func newMysqlGormDB() (*gorm.DB, error) { } dsn = fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local", config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, config.Config.Mysql.DBAddress[0], config.Config.Mysql.DBDatabaseName) - sqlLogger := NewSqlLogger(logger.LogLevel(config.Config.Mysql.LogLevel), true, time.Duration(config.Config.Mysql.SlowThreshold)*time.Millisecond) + sqlLogger := log.NewSqlLogger(logger.LogLevel(config.Config.Mysql.LogLevel), true, time.Duration(config.Config.Mysql.SlowThreshold)*time.Millisecond) db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: sqlLogger, }) @@ -77,66 +74,3 @@ func IsMysqlDuplicateKey(err error) bool { } return false } - -type SqlLogger struct { - LogLevel logger.LogLevel - IgnoreRecordNotFoundError bool - SlowThreshold time.Duration -} - -func NewSqlLogger(logLevel logger.LogLevel, ignoreRecordNotFoundError bool, slowThreshold time.Duration) *SqlLogger { - return &SqlLogger{ - LogLevel: logLevel, - IgnoreRecordNotFoundError: ignoreRecordNotFoundError, - SlowThreshold: slowThreshold, - } -} - -func (l *SqlLogger) LogMode(logLevel logger.LogLevel) logger.Interface { - newLogger := *l - newLogger.LogLevel = logLevel - return &newLogger -} - -func (SqlLogger) Info(ctx context.Context, msg string, args ...interface{}) { - log.ZInfo(ctx, msg, args) -} - -func (SqlLogger) Warn(ctx context.Context, msg string, args ...interface{}) { - log.ZWarn(ctx, msg, nil, args) -} - -func (SqlLogger) Error(ctx context.Context, msg string, args ...interface{}) { - log.ZError(ctx, msg, nil, args) -} - -func (l SqlLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) { - if l.LogLevel <= logger.Silent { - return - } - elapsed := time.Since(begin) - switch { - case err != nil && l.LogLevel >= logger.Error && (!errors.Is(err, gorm.ErrRecordNotFound) || !l.IgnoreRecordNotFoundError): - sql, rows := fc() - if rows == -1 { - log.ZError(ctx, "sql exec detail", err, "gorm", gormUtils.FileWithLineNum(), "time(ms)", float64(elapsed.Nanoseconds())/1e6, "sql", sql) - } else { - log.ZError(ctx, "sql exec detail", err, "gorm", gormUtils.FileWithLineNum(), "time(ms)", float64(elapsed.Nanoseconds())/1e6, "rows", rows, "sql", sql) - } - case elapsed > l.SlowThreshold && l.SlowThreshold != 0 && l.LogLevel >= logger.Warn: - sql, rows := fc() - slowLog := fmt.Sprintf("SLOW SQL >= %v", l.SlowThreshold) - if rows == -1 { - log.ZWarn(ctx, "sql exec detail", nil, "gorm", gormUtils.FileWithLineNum(), nil, "slow sql", slowLog, "time(ms)", float64(elapsed.Nanoseconds())/1e6, "sql", sql) - } else { - log.ZWarn(ctx, "sql exec detail", nil, "gorm", gormUtils.FileWithLineNum(), nil, "slow sql", slowLog, "time(ms)", float64(elapsed.Nanoseconds())/1e6, "rows", rows, "sql", sql) - } - case l.LogLevel == logger.Info: - sql, rows := fc() - if rows == -1 { - log.ZDebug(ctx, "sql exec detail", "gorm", gormUtils.FileWithLineNum(), "time(ms)", float64(elapsed.Nanoseconds())/1e6, "sql", sql) - } else { - log.ZDebug(ctx, "sql exec detail", "gorm", gormUtils.FileWithLineNum(), "time(ms)", float64(elapsed.Nanoseconds())/1e6, "rows", rows, "sql", sql) - } - } -} diff --git a/pkg/common/log/sql_logger.go b/pkg/common/log/sql_logger.go new file mode 100644 index 000000000..1455eaa87 --- /dev/null +++ b/pkg/common/log/sql_logger.go @@ -0,0 +1,74 @@ +package log + +import ( + "context" + "fmt" + "github.com/pkg/errors" + "gorm.io/gorm" + gormLogger "gorm.io/gorm/logger" + gormUtils "gorm.io/gorm/utils" + "time" +) + +type SqlLogger struct { + LogLevel gormLogger.LogLevel + IgnoreRecordNotFoundError bool + SlowThreshold time.Duration +} + +func NewSqlLogger(logLevel gormLogger.LogLevel, ignoreRecordNotFoundError bool, slowThreshold time.Duration) *SqlLogger { + return &SqlLogger{ + LogLevel: logLevel, + IgnoreRecordNotFoundError: ignoreRecordNotFoundError, + SlowThreshold: slowThreshold, + } +} + +func (l *SqlLogger) LogMode(logLevel gormLogger.LogLevel) gormLogger.Interface { + newLogger := *l + newLogger.LogLevel = logLevel + return &newLogger +} + +func (SqlLogger) Info(ctx context.Context, msg string, args ...interface{}) { + ZInfo(ctx, msg, args) +} + +func (SqlLogger) Warn(ctx context.Context, msg string, args ...interface{}) { + ZWarn(ctx, msg, nil, args) +} + +func (SqlLogger) Error(ctx context.Context, msg string, args ...interface{}) { + ZError(ctx, msg, nil, args) +} + +func (l SqlLogger) Trace(ctx context.Context, begin time.Time, fc func() (sql string, rowsAffected int64), err error) { + if l.LogLevel <= gormLogger.Silent { + return + } + elapsed := time.Since(begin) + switch { + case err != nil && l.LogLevel >= gormLogger.Error && (!errors.Is(err, gorm.ErrRecordNotFound) || !l.IgnoreRecordNotFoundError): + sql, rows := fc() + if rows == -1 { + ZError(ctx, "sql exec detail", err, "gorm", gormUtils.FileWithLineNum(), "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "sql", sql) + } else { + ZError(ctx, "sql exec detail", err, "gorm", gormUtils.FileWithLineNum(), "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "rows", rows, "sql", sql) + } + case elapsed > l.SlowThreshold && l.SlowThreshold != 0 && l.LogLevel >= gormLogger.Warn: + sql, rows := fc() + slowLog := fmt.Sprintf("SLOW SQL >= %v", l.SlowThreshold) + if rows == -1 { + ZWarn(ctx, "sql exec detail", nil, "gorm", gormUtils.FileWithLineNum(), nil, "slow sql", slowLog, "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "sql", sql) + } else { + ZWarn(ctx, "sql exec detail", nil, "gorm", gormUtils.FileWithLineNum(), nil, "slow sql", slowLog, "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "rows", rows, "sql", sql) + } + case l.LogLevel == gormLogger.Info: + sql, rows := fc() + if rows == -1 { + ZDebug(ctx, "sql exec detail", "gorm", gormUtils.FileWithLineNum(), "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "sql", sql) + } else { + ZDebug(ctx, "sql exec detail", "gorm", gormUtils.FileWithLineNum(), "elapsed time", fmt.Sprintf("%f(ms)", float64(elapsed.Nanoseconds())/1e6), "rows", rows, "sql", sql) + } + } +}