Skip to content

Commit dcce14f

Browse files
Becks723ACaiCat
andauthored
refactor(observability): new observability infra based on OTeL (#464)
* feat(tracing): add otel provider at cmd/ entry * feat(log): add logger.WithCtx(ctx) method to extract span context * feat(log): pass ctx to logger calls (except async calls) * feat(tracing): add a small tracing probe /api/v1/trace/ping for testing * feat(tracing): add ability to export data to Uptrace * feat(tracing): add RecordError and SetStatus method; cover api/rpc/* * feat(tracing): instrumentation for db, redis * feat(tracing): in logger record span error and status; remove explicit calls to record span in api/rpc/* * feat(tracing): cron tasks supports tracing * feat(logging): bridge logger to Otel log * fix: vulnerability fix * chore: add tests * chore: docker uptrace deployment * chore: set uptrace telemetry data ttl * chore: ck set resource constraints * chore: update uptrace.yml * chore: remove unsupported ttl_delete --------- Signed-off-by: Cai <13110818005@qq.com> Co-authored-by: Cai <13110818005@qq.com>
1 parent cdffc80 commit dcce14f

64 files changed

Lines changed: 1991 additions & 203 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

api/handler/trace_ping.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
Copyright 2024 The west2-online Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package handler
18+
19+
import (
20+
"context"
21+
22+
"github.com/cloudwego/hertz/pkg/app"
23+
"github.com/cloudwego/hertz/pkg/common/utils"
24+
25+
"github.com/west2-online/fzuhelper-server/api/pack"
26+
"github.com/west2-online/fzuhelper-server/api/rpc"
27+
commonrpc "github.com/west2-online/fzuhelper-server/kitex_gen/common"
28+
"github.com/west2-online/fzuhelper-server/pkg/logger"
29+
)
30+
31+
// TracePing .
32+
// @router /api/v1/trace/ping [GET]
33+
func TracePing(ctx context.Context, c *app.RequestContext) {
34+
// log with trace context
35+
logger.WithCtx(ctx).Info("HTTP trace ping request received")
36+
37+
message, err := rpc.TracePingRPC(ctx, &commonrpc.TracePingRequest{})
38+
if err != nil {
39+
pack.RespError(c, err)
40+
return
41+
}
42+
43+
pack.RespData(c, utils.H{
44+
"message": message,
45+
})
46+
}

api/handler/trace_ping_test.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
Copyright 2024 The west2-online Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package handler
18+
19+
import (
20+
"context"
21+
"testing"
22+
23+
"github.com/bytedance/mockey"
24+
"github.com/cloudwego/hertz/pkg/common/config"
25+
"github.com/cloudwego/hertz/pkg/common/ut"
26+
"github.com/cloudwego/hertz/pkg/protocol/consts"
27+
"github.com/cloudwego/hertz/pkg/route"
28+
"github.com/stretchr/testify/assert"
29+
30+
"github.com/west2-online/fzuhelper-server/api/rpc"
31+
commonrpc "github.com/west2-online/fzuhelper-server/kitex_gen/common"
32+
"github.com/west2-online/fzuhelper-server/pkg/errno"
33+
)
34+
35+
func TestTracePing(t *testing.T) {
36+
type testCase struct {
37+
name string
38+
url string
39+
mockMessage string
40+
mockErr error
41+
expectContains string
42+
}
43+
44+
testCases := []testCase{
45+
{
46+
name: "success",
47+
url: "/api/v1/trace/ping",
48+
mockMessage: "pong",
49+
expectContains: `"message":"pong"`,
50+
},
51+
{
52+
name: "rpc error",
53+
url: "/api/v1/trace/ping",
54+
mockErr: errno.InternalServiceError,
55+
expectContains: `{"code":"50001","message":"内部服务错误"`,
56+
},
57+
}
58+
59+
router := route.NewEngine(&config.Options{})
60+
router.GET("/api/v1/trace/ping", TracePing)
61+
62+
defer mockey.UnPatchAll()
63+
for _, tc := range testCases {
64+
mockey.PatchConvey(tc.name, t, func() {
65+
mockey.Mock(rpc.TracePingRPC).To(func(ctx context.Context, req *commonrpc.TracePingRequest) (string, error) {
66+
return tc.mockMessage, tc.mockErr
67+
}).Build()
68+
69+
res := ut.PerformRequest(router, consts.MethodGet, tc.url, nil)
70+
assert.Equal(t, consts.StatusOK, res.Result().StatusCode())
71+
assert.Contains(t, string(res.Result().Body()), tc.expectContains)
72+
})
73+
}
74+
}

api/router/custom_router.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/rpc/academic.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func InitAcademicRPC() {
3838
func GetScoresRPC(ctx context.Context, req *academic.GetScoresRequest) (scores []*model.Score, err error) {
3939
resp, err := academicClient.GetScores(ctx, req)
4040
if err != nil {
41-
logger.Errorf("GetScoresRPC: RPC called failed: %v", err.Error())
41+
logger.WithCtx(ctx).Errorf("GetScoresRPC: RPC called failed: %v", err.Error())
4242
return nil, errno.InternalServiceError.WithMessage(err.Error())
4343
}
4444
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -50,7 +50,7 @@ func GetScoresRPC(ctx context.Context, req *academic.GetScoresRequest) (scores [
5050
func GetGPARPC(ctx context.Context, req *academic.GetGPARequest) (gpa *model.GPABean, err error) {
5151
resp, err := academicClient.GetGPA(ctx, req)
5252
if err != nil {
53-
logger.Errorf("GetGPARPC: RPC called failed: %v", err.Error())
53+
logger.WithCtx(ctx).Errorf("GetGPARPC: RPC called failed: %v", err.Error())
5454
return nil, errno.InternalServiceError.WithMessage(err.Error())
5555
}
5656
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -62,7 +62,7 @@ func GetGPARPC(ctx context.Context, req *academic.GetGPARequest) (gpa *model.GPA
6262
func GetCreditRPC(ctx context.Context, req *academic.GetCreditRequest) (credit []*model.Credit, err error) {
6363
resp, err := academicClient.GetCredit(ctx, req)
6464
if err != nil {
65-
logger.Errorf("GetCreditRPC: RPC called failed: %v", err.Error())
65+
logger.WithCtx(ctx).Errorf("GetCreditRPC: RPC called failed: %v", err.Error())
6666
return nil, errno.InternalServiceError.WithMessage(err.Error())
6767
}
6868
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -75,7 +75,7 @@ func GetCreditRPC(ctx context.Context, req *academic.GetCreditRequest) (credit [
7575
func GetUnifiedExamRPC(ctx context.Context, req *academic.GetUnifiedExamRequest) (unifiedExam []*model.UnifiedExam, err error) {
7676
resp, err := academicClient.GetUnifiedExam(ctx, req)
7777
if err != nil {
78-
logger.Errorf("GetUnifiedExamRPC: RPC called failed: %v", err.Error())
78+
logger.WithCtx(ctx).Errorf("GetUnifiedExamRPC: RPC called failed: %v", err.Error())
7979
return nil, errno.InternalServiceError.WithMessage(err.Error())
8080
}
8181
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -88,7 +88,7 @@ func GetUnifiedExamRPC(ctx context.Context, req *academic.GetUnifiedExamRequest)
8888
func GetCultivatePlanRPC(ctx context.Context, req *academic.GetPlanRequest) (string, error) {
8989
resp, err := academicClient.GetPlan(ctx, req)
9090
if err != nil {
91-
logger.Errorf("GetCultivatePlanRPC: RPC called failed: %v", err.Error())
91+
logger.WithCtx(ctx).Errorf("GetCultivatePlanRPC: RPC called failed: %v", err.Error())
9292
return "", errno.InternalServiceError.WithMessage(err.Error())
9393
}
9494
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -101,7 +101,7 @@ func GetCultivatePlanRPC(ctx context.Context, req *academic.GetPlanRequest) (str
101101
func GetCreditV2RPC(ctx context.Context, req *academic.GetCreditV2Request) (*model.CreditResponse, error) {
102102
resp, err := academicClient.GetCreditV2(ctx, req)
103103
if err != nil {
104-
logger.Errorf("GetCreditV2RPC: RPC called failed: %v", err.Error())
104+
logger.WithCtx(ctx).Errorf("GetCreditV2RPC: RPC called failed: %v", err.Error())
105105
return nil, errno.InternalServiceError.WithMessage(err.Error())
106106
}
107107
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {

api/rpc/captcha.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func InitCaptchaRPC() {
3737
func ValidateCodeRPC(ctx context.Context, req *captcha.ValidateCodeRequest) (string, error) {
3838
resp, err := captchaClient.ValidateCode(ctx, req)
3939
if err != nil {
40-
logger.Errorf("ValidateCodeRPC: RPC called failed: %v", err.Error())
40+
logger.WithCtx(ctx).Errorf("ValidateCodeRPC: RPC called failed: %v", err.Error())
4141
return "", errno.InternalServiceError.WithError(err)
4242
}
4343
if !utils.IsSuccess(resp.Base) {
@@ -49,7 +49,7 @@ func ValidateCodeRPC(ctx context.Context, req *captcha.ValidateCodeRequest) (str
4949
func ValidateCodeForAndroidRPC(ctx context.Context, req *captcha.ValidateCodeForAndroidRequest) (string, error) {
5050
resp, err := captchaClient.ValidateCodeForAndroid(ctx, req)
5151
if err != nil {
52-
logger.Errorf("ValidateCodeForAndroidRPC: RPC called failed: %v", err.Error())
52+
logger.WithCtx(ctx).Errorf("ValidateCodeForAndroidRPC: RPC called failed: %v", err.Error())
5353
return "", errno.InternalServiceError.WithError(err)
5454
}
5555
if resp.Code != "200" {

api/rpc/classroom.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func InitClassroomRPC() {
3838
func GetEmptyRoomRPC(ctx context.Context, req *classroom.EmptyRoomRequest) (emptyRooms []*model.Classroom, err error) {
3939
resp, err := classroomClient.GetEmptyRoom(ctx, req)
4040
if err != nil {
41-
logger.Errorf("GetEmptyRoomRPC: RPC called failed: %v", err.Error())
41+
logger.WithCtx(ctx).Errorf("GetEmptyRoomRPC: RPC called failed: %v", err.Error())
4242
return nil, errno.InternalServiceError.WithMessage(err.Error())
4343
}
4444
if !utils.IsSuccess(resp.Base) {
@@ -50,7 +50,7 @@ func GetEmptyRoomRPC(ctx context.Context, req *classroom.EmptyRoomRequest) (empt
5050
func GetExamRoomInfoRPC(ctx context.Context, req *classroom.ExamRoomInfoRequest) (roomInfo []*model.ExamRoomInfo, err error) {
5151
resp, err := classroomClient.GetExamRoomInfo(ctx, req)
5252
if err != nil {
53-
logger.Errorf("GetExamRoomInfoRPC: RPC called failed: %v", err.Error())
53+
logger.WithCtx(ctx).Errorf("GetExamRoomInfoRPC: RPC called failed: %v", err.Error())
5454
return nil, errno.InternalServiceError.WithMessage(err.Error()) // 不属于业务错误
5555
}
5656
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {

api/rpc/common.go

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func InitCommonRPC() {
3838
func GetCSSRPC(ctx context.Context, req *common.GetCSSRequest) (*[]byte, error) {
3939
resp, err := commonClient.GetCSS(ctx, req)
4040
if err != nil {
41-
logger.Errorf("GetCSSRPC: RPC called failed: %v", err.Error())
41+
logger.WithCtx(ctx).Errorf("GetCSSRPC: RPC called failed: %v", err.Error())
4242
return nil, errno.InternalServiceError.WithMessage(err.Error())
4343
}
4444
if len(resp.Css) < 1 {
@@ -50,7 +50,7 @@ func GetCSSRPC(ctx context.Context, req *common.GetCSSRequest) (*[]byte, error)
5050
func GetHtmlRPC(ctx context.Context, req *common.GetHtmlRequest) (*[]byte, error) {
5151
resp, err := commonClient.GetHtml(ctx, req)
5252
if err != nil {
53-
logger.Errorf("GetHtmlRPC: RPC called failed: %v", err.Error())
53+
logger.WithCtx(ctx).Errorf("GetHtmlRPC: RPC called failed: %v", err.Error())
5454
return nil, errno.InternalServiceError.WithMessage(err.Error())
5555
}
5656
if len(resp.Html) < 1 {
@@ -62,7 +62,7 @@ func GetHtmlRPC(ctx context.Context, req *common.GetHtmlRequest) (*[]byte, error
6262
func GetUserAgreementRPC(ctx context.Context, req *common.GetUserAgreementRequest) (*[]byte, error) {
6363
resp, err := commonClient.GetUserAgreement(ctx, req)
6464
if err != nil {
65-
logger.Errorf("GetUserAgreementRPC: RPC called failed: %v", err.Error())
65+
logger.WithCtx(ctx).Errorf("GetUserAgreementRPC: RPC called failed: %v", err.Error())
6666
return nil, errno.InternalServiceError.WithMessage(err.Error())
6767
}
6868
if len(resp.UserAgreement) < 1 {
@@ -74,7 +74,7 @@ func GetUserAgreementRPC(ctx context.Context, req *common.GetUserAgreementReques
7474
func GetTermsListRPC(ctx context.Context, req *common.TermListRequest) (*model.TermList, error) {
7575
resp, err := commonClient.GetTermsList(ctx, req)
7676
if err != nil {
77-
logger.Errorf("GetTermsListRPC: RPC called failed: %v", err.Error())
77+
logger.WithCtx(ctx).Errorf("GetTermsListRPC: RPC called failed: %v", err.Error())
7878
return nil, errno.InternalServiceError.WithMessage(err.Error())
7979
}
8080

@@ -88,7 +88,7 @@ func GetTermsListRPC(ctx context.Context, req *common.TermListRequest) (*model.T
8888
func GetTermRPC(ctx context.Context, req *common.TermRequest) (*model.TermInfo, error) {
8989
resp, err := commonClient.GetTerm(ctx, req)
9090
if err != nil {
91-
logger.Errorf("GetTermRPC: RPC called failed: %v", err.Error())
91+
logger.WithCtx(ctx).Errorf("GetTermRPC: RPC called failed: %v", err.Error())
9292
return nil, errno.InternalServiceError.WithMessage(err.Error())
9393
}
9494
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -101,7 +101,7 @@ func GetTermRPC(ctx context.Context, req *common.TermRequest) (*model.TermInfo,
101101
func GetNoticesRPC(ctx context.Context, req *common.NoticeRequest) ([]*model.NoticeInfo, int64, error) {
102102
resp, err := commonClient.GetNotices(ctx, req)
103103
if err != nil {
104-
logger.Errorf("GetNoticesRPC: RPC called failed: %v", err.Error())
104+
logger.WithCtx(ctx).Errorf("GetNoticesRPC: RPC called failed: %v", err.Error())
105105
return nil, 0, errno.InternalServiceError.WithMessage(err.Error())
106106
}
107107
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -113,7 +113,7 @@ func GetNoticesRPC(ctx context.Context, req *common.NoticeRequest) ([]*model.Not
113113
func GetContributorRPC(ctx context.Context, req *common.GetContributorInfoRequest) (*common.GetContributorInfoResponse, error) {
114114
resp, err := commonClient.GetContributorInfo(ctx, req)
115115
if err != nil {
116-
logger.Errorf("GetContributorRPC: RPC called failed: %v", err.Error())
116+
logger.WithCtx(ctx).Errorf("GetContributorRPC: RPC called failed: %v", err.Error())
117117
return nil, errno.InternalServiceError.WithMessage(err.Error())
118118
}
119119
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -125,7 +125,7 @@ func GetContributorRPC(ctx context.Context, req *common.GetContributorInfoReques
125125
func GetToolboxConfigRPC(ctx context.Context, req *common.GetToolboxConfigRequest) ([]*model.ToolboxConfig, error) {
126126
resp, err := commonClient.GetToolboxConfig(ctx, req)
127127
if err != nil {
128-
logger.Errorf("GetToolboxConfigRPC: RPC called failed: %v", err.Error())
128+
logger.WithCtx(ctx).Errorf("GetToolboxConfigRPC: RPC called failed: %v", err.Error())
129129
return nil, errno.InternalServiceError.WithMessage(err.Error())
130130
}
131131
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -137,11 +137,23 @@ func GetToolboxConfigRPC(ctx context.Context, req *common.GetToolboxConfigReques
137137
func PutToolboxConfigRPC(ctx context.Context, req *common.PutToolboxConfigRequest) (*common.PutToolboxConfigResponse, error) {
138138
resp, err := commonClient.PutToolboxConfig(ctx, req)
139139
if err != nil {
140-
logger.Errorf("PutToolboxConfigRPC: RPC called failed: %v", err.Error())
140+
logger.WithCtx(ctx).Errorf("PutToolboxConfigRPC: RPC called failed: %v", err.Error())
141141
return nil, errno.InternalServiceError.WithMessage(err.Error())
142142
}
143143
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
144144
return nil, err
145145
}
146146
return resp, nil
147147
}
148+
149+
func TracePingRPC(ctx context.Context, req *common.TracePingRequest) (string, error) {
150+
resp, err := commonClient.TracePing(ctx, req)
151+
if err != nil {
152+
logger.WithCtx(ctx).Errorf("TracePingRPC: RPC called failed: %v", err.Error())
153+
return "", errno.InternalServiceError.WithMessage(err.Error())
154+
}
155+
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
156+
return "", err
157+
}
158+
return resp.Message, nil
159+
}

api/rpc/course.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func InitCourseRPC() {
3838
func GetCourseListRPC(ctx context.Context, req *course.CourseListRequest) (courses []*model.Course, err error) {
3939
resp, err := courseClient.GetCourseList(ctx, req)
4040
if err != nil {
41-
logger.Errorf("GetCourseListRPC: RPC called failed: %v", err.Error())
41+
logger.WithCtx(ctx).Errorf("GetCourseListRPC: RPC called failed: %v", err.Error())
4242
return nil, errno.InternalServiceError.WithMessage(err.Error())
4343
}
4444
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -51,7 +51,7 @@ func GetCourseListRPC(ctx context.Context, req *course.CourseListRequest) (cours
5151
func GetCourseTermsListRPC(ctx context.Context, req *course.TermListRequest) (*course.TermListResponse, error) {
5252
resp, err := courseClient.GetTermList(ctx, req)
5353
if err != nil {
54-
logger.Errorf("GetTermListRPC: RPC called failed: %v", err.Error())
54+
logger.WithCtx(ctx).Errorf("GetTermListRPC: RPC called failed: %v", err.Error())
5555
return nil, errno.InternalServiceError.WithMessage(err.Error())
5656
}
5757
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -63,7 +63,7 @@ func GetCourseTermsListRPC(ctx context.Context, req *course.TermListRequest) (*c
6363
func GetCalendarRPC(ctx context.Context, req *course.GetCalendarRequest) ([]byte, error) {
6464
resp, err := courseClient.GetCalendar(ctx, req)
6565
if err != nil {
66-
logger.Errorf("GetCalendarRPC: RPC called failed: %v", err.Error())
66+
logger.WithCtx(ctx).Errorf("GetCalendarRPC: RPC called failed: %v", err.Error())
6767
return nil, errno.InternalServiceError.WithMessage(err.Error())
6868
}
6969
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -75,7 +75,7 @@ func GetCalendarRPC(ctx context.Context, req *course.GetCalendarRequest) ([]byte
7575
func GetLocateDateRPC(ctx context.Context, req *course.GetLocateDateRequest) (*model.LocateDate, error) {
7676
resp, err := courseClient.GetLocateDate(ctx, req)
7777
if err != nil {
78-
logger.Errorf("GetLocateDateRPC: RPC called failed: %v", err.Error())
78+
logger.WithCtx(ctx).Errorf("GetLocateDateRPC: RPC called failed: %v", err.Error())
7979
return nil, errno.InternalServiceError.WithMessage(err.Error())
8080
}
8181
if !utils.IsSuccess(resp.Base) {
@@ -87,7 +87,7 @@ func GetLocateDateRPC(ctx context.Context, req *course.GetLocateDateRequest) (*m
8787
func GetFriendCourseRPC(ctx context.Context, req *course.GetFriendCourseRequest) (courses []*model.Course, err error) {
8888
resp, err := courseClient.GetFriendCourse(ctx, req)
8989
if err != nil {
90-
logger.Errorf("GetCourseListRPC: RPC called failed: %v", err.Error())
90+
logger.WithCtx(ctx).Errorf("GetCourseListRPC: RPC called failed: %v", err.Error())
9191
return nil, errno.InternalServiceError.WithMessage(err.Error())
9292
}
9393
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -100,7 +100,7 @@ func GetFriendCourseRPC(ctx context.Context, req *course.GetFriendCourseRequest)
100100
func GetAutoAdjustCourseListRPC(ctx context.Context, req *course.GetAutoAdjustCourseListRequest) (adjustCourses []*model.AdjustCourse, err error) {
101101
resp, err := courseClient.GetAutoAdjustCourseList(ctx, req)
102102
if err != nil {
103-
logger.Errorf("GetAutoAdjustCourseListRPC: RPC called failed: %v", err.Error())
103+
logger.WithCtx(ctx).Errorf("GetAutoAdjustCourseListRPC: RPC called failed: %v", err.Error())
104104
return nil, errno.InternalServiceError.WithMessage(err.Error())
105105
}
106106
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {
@@ -113,7 +113,7 @@ func GetAutoAdjustCourseListRPC(ctx context.Context, req *course.GetAutoAdjustCo
113113
func UpdateAutoAdjustCourseRPC(ctx context.Context, req *course.UpdateAdjustCourseRequest) (err error) {
114114
resp, err := courseClient.UpdateAdjustCourse(ctx, req)
115115
if err != nil {
116-
logger.Errorf("UpdateAutoAdjustCourseRPC: RPC called failed: %v", err.Error())
116+
logger.WithCtx(ctx).Errorf("UpdateAutoAdjustCourseRPC: RPC called failed: %v", err.Error())
117117
return errno.InternalServiceError.WithMessage(err.Error())
118118
}
119119
if err = utils.HandleBaseRespWithCookie(resp.Base); err != nil {

0 commit comments

Comments
 (0)