From 19b67e89a278324af995a04494ab5a6b41427b3b Mon Sep 17 00:00:00 2001 From: IanShaw027 <131567472+IanShaw027@users.noreply.github.com> Date: Sun, 11 Jan 2026 23:57:20 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20=E4=BF=AE=E5=A4=8D=E5=89=A9=E4=BD=99?= =?UTF-8?q?=E7=9A=84CI=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复 ops_repo_latency_histogram_buckets.go 中另一个函数的 WriteString 未检查错误 - 修复 ops_repo_request_details.go 和 ops_repo_trends.go 中的 Rows.Close 未检查错误 - 修复 ops_alert_models.go, ops_cleanup_service.go, ops_request_details.go 的格式化问题 - 移除 ops_retry.go 中未使用的 status 字段 - 修复 maxTime 函数重复声明(将测试文件中的函数重命名为 testMaxTime) --- .../ops_repo_latency_histogram_buckets.go | 8 +++--- .../repository/ops_repo_request_details.go | 2 +- .../internal/repository/ops_repo_trends.go | 4 +-- .../usage_log_repo_integration_test.go | 6 ++--- backend/internal/service/ops_alert_models.go | 1 - .../internal/service/ops_cleanup_service.go | 26 +++++++++---------- .../internal/service/ops_request_details.go | 1 - backend/internal/service/ops_retry.go | 3 --- 8 files changed, 23 insertions(+), 28 deletions(-) diff --git a/backend/internal/repository/ops_repo_latency_histogram_buckets.go b/backend/internal/repository/ops_repo_latency_histogram_buckets.go index f7809480..cd5bed37 100644 --- a/backend/internal/repository/ops_repo_latency_histogram_buckets.go +++ b/backend/internal/repository/ops_repo_latency_histogram_buckets.go @@ -47,18 +47,18 @@ func latencyHistogramRangeCaseExpr(column string) string { func latencyHistogramRangeOrderCaseExpr(column string) string { var sb strings.Builder - sb.WriteString("CASE\n") + _, _ = sb.WriteString("CASE\n") order := 1 for _, b := range latencyHistogramBuckets { if b.upperMs <= 0 { continue } - sb.WriteString(fmt.Sprintf("\tWHEN %s < %d THEN %d\n", column, b.upperMs, order)) + _, _ = sb.WriteString(fmt.Sprintf("\tWHEN %s < %d THEN %d\n", column, b.upperMs, order)) order++ } - sb.WriteString(fmt.Sprintf("\tELSE %d\n", order)) - sb.WriteString("END") + _, _ = sb.WriteString(fmt.Sprintf("\tELSE %d\n", order)) + _, _ = sb.WriteString("END") return sb.String() } diff --git a/backend/internal/repository/ops_repo_request_details.go b/backend/internal/repository/ops_repo_request_details.go index 678e1648..d8d5d111 100644 --- a/backend/internal/repository/ops_repo_request_details.go +++ b/backend/internal/repository/ops_repo_request_details.go @@ -187,7 +187,7 @@ LIMIT $%d OFFSET $%d if err != nil { return nil, 0, err } - defer rows.Close() + defer func() { _ = rows.Close() }() toIntPtr := func(v sql.NullInt64) *int { if !v.Valid { diff --git a/backend/internal/repository/ops_repo_trends.go b/backend/internal/repository/ops_repo_trends.go index f25e157a..61b5ad64 100644 --- a/backend/internal/repository/ops_repo_trends.go +++ b/backend/internal/repository/ops_repo_trends.go @@ -77,7 +77,7 @@ ORDER BY bucket ASC` if err != nil { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() points := make([]*service.OpsThroughputTrendPoint, 0, 256) for rows.Next() { @@ -189,7 +189,7 @@ ORDER BY request_count DESC` if err != nil { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() items := make([]*service.OpsThroughputPlatformBreakdownItem, 0, 8) for rows.Next() { diff --git a/backend/internal/repository/usage_log_repo_integration_test.go b/backend/internal/repository/usage_log_repo_integration_test.go index 51964782..591ee2f5 100644 --- a/backend/internal/repository/usage_log_repo_integration_test.go +++ b/backend/internal/repository/usage_log_repo_integration_test.go @@ -204,7 +204,7 @@ func (s *UsageLogRepoSuite) TestDashboardStats_TodayTotalsAndPerformance() { userToday := mustCreateUser(s.T(), s.client, &service.User{ Email: "today@example.com", - CreatedAt: maxTime(todayStart.Add(10*time.Second), now.Add(-10*time.Second)), + CreatedAt: testMaxTime(todayStart.Add(10*time.Second), now.Add(-10*time.Second)), UpdatedAt: now, }) userOld := mustCreateUser(s.T(), s.client, &service.User{ @@ -237,7 +237,7 @@ func (s *UsageLogRepoSuite) TestDashboardStats_TodayTotalsAndPerformance() { TotalCost: 1.5, ActualCost: 1.2, DurationMs: &d1, - CreatedAt: maxTime(todayStart.Add(2*time.Minute), now.Add(-2*time.Minute)), + CreatedAt: testMaxTime(todayStart.Add(2*time.Minute), now.Add(-2*time.Minute)), } _, err = s.repo.Create(s.ctx, logToday) s.Require().NoError(err, "Create logToday") @@ -621,7 +621,7 @@ func (s *UsageLogRepoSuite) TestGetGlobalStats() { s.Require().Equal(int64(45), stats.TotalOutputTokens) } -func maxTime(a, b time.Time) time.Time { +func testMaxTime(a, b time.Time) time.Time { if a.After(b) { return a } diff --git a/backend/internal/service/ops_alert_models.go b/backend/internal/service/ops_alert_models.go index 783a3d1e..0acf13ab 100644 --- a/backend/internal/service/ops_alert_models.go +++ b/backend/internal/service/ops_alert_models.go @@ -72,4 +72,3 @@ type OpsAlertEventFilter struct { Platform string GroupID *int64 } - diff --git a/backend/internal/service/ops_cleanup_service.go b/backend/internal/service/ops_cleanup_service.go index c46ceaa9..afd2d22c 100644 --- a/backend/internal/service/ops_cleanup_service.go +++ b/backend/internal/service/ops_cleanup_service.go @@ -94,19 +94,19 @@ func (s *OpsCleanupService) Start() { if parsed, err := time.LoadLocation(strings.TrimSpace(s.cfg.Timezone)); err == nil && parsed != nil { loc = parsed } - } - - c := cron.New(cron.WithParser(opsCleanupCronParser), cron.WithLocation(loc)) - _, err := c.AddFunc(schedule, func() { s.runScheduled() }) - if err != nil { - log.Printf("[OpsCleanup] not started (invalid schedule=%q): %v", schedule, err) - return - } - s.cron = c - s.cron.Start() - log.Printf("[OpsCleanup] started (schedule=%q tz=%s)", schedule, loc.String()) - }) - } + } + + c := cron.New(cron.WithParser(opsCleanupCronParser), cron.WithLocation(loc)) + _, err := c.AddFunc(schedule, func() { s.runScheduled() }) + if err != nil { + log.Printf("[OpsCleanup] not started (invalid schedule=%q): %v", schedule, err) + return + } + s.cron = c + s.cron.Start() + log.Printf("[OpsCleanup] started (schedule=%q tz=%s)", schedule, loc.String()) + }) +} func (s *OpsCleanupService) Stop() { if s == nil { diff --git a/backend/internal/service/ops_request_details.go b/backend/internal/service/ops_request_details.go index e33e6f38..12b9aa1b 100644 --- a/backend/internal/service/ops_request_details.go +++ b/backend/internal/service/ops_request_details.go @@ -149,4 +149,3 @@ func (s *OpsService) ListRequestDetails(ctx context.Context, filter *OpsRequestD PageSize: pageSize, }, nil } - diff --git a/backend/internal/service/ops_retry.go b/backend/internal/service/ops_retry.go index bf6213ae..747aa3b8 100644 --- a/backend/internal/service/ops_retry.go +++ b/backend/internal/service/ops_retry.go @@ -52,7 +52,6 @@ const ( type limitedResponseWriter struct { header http.Header wroteHeader bool - status int limit int totalWritten int64 @@ -65,7 +64,6 @@ func newLimitedResponseWriter(limit int) *limitedResponseWriter { } return &limitedResponseWriter{ header: make(http.Header), - status: http.StatusOK, limit: limit, } } @@ -79,7 +77,6 @@ func (w *limitedResponseWriter) WriteHeader(statusCode int) { return } w.wroteHeader = true - w.status = statusCode } func (w *limitedResponseWriter) Write(p []byte) (int, error) {