fix(ci): 修复剩余的CI错误
- 修复 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)
This commit is contained in:
@@ -47,18 +47,18 @@ func latencyHistogramRangeCaseExpr(column string) string {
|
|||||||
|
|
||||||
func latencyHistogramRangeOrderCaseExpr(column string) string {
|
func latencyHistogramRangeOrderCaseExpr(column string) string {
|
||||||
var sb strings.Builder
|
var sb strings.Builder
|
||||||
sb.WriteString("CASE\n")
|
_, _ = sb.WriteString("CASE\n")
|
||||||
|
|
||||||
order := 1
|
order := 1
|
||||||
for _, b := range latencyHistogramBuckets {
|
for _, b := range latencyHistogramBuckets {
|
||||||
if b.upperMs <= 0 {
|
if b.upperMs <= 0 {
|
||||||
continue
|
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++
|
order++
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.WriteString(fmt.Sprintf("\tELSE %d\n", order))
|
_, _ = sb.WriteString(fmt.Sprintf("\tELSE %d\n", order))
|
||||||
sb.WriteString("END")
|
_, _ = sb.WriteString("END")
|
||||||
return sb.String()
|
return sb.String()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ LIMIT $%d OFFSET $%d
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer func() { _ = rows.Close() }()
|
||||||
|
|
||||||
toIntPtr := func(v sql.NullInt64) *int {
|
toIntPtr := func(v sql.NullInt64) *int {
|
||||||
if !v.Valid {
|
if !v.Valid {
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ ORDER BY bucket ASC`
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer func() { _ = rows.Close() }()
|
||||||
|
|
||||||
points := make([]*service.OpsThroughputTrendPoint, 0, 256)
|
points := make([]*service.OpsThroughputTrendPoint, 0, 256)
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
@@ -189,7 +189,7 @@ ORDER BY request_count DESC`
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer rows.Close()
|
defer func() { _ = rows.Close() }()
|
||||||
|
|
||||||
items := make([]*service.OpsThroughputPlatformBreakdownItem, 0, 8)
|
items := make([]*service.OpsThroughputPlatformBreakdownItem, 0, 8)
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ func (s *UsageLogRepoSuite) TestDashboardStats_TodayTotalsAndPerformance() {
|
|||||||
|
|
||||||
userToday := mustCreateUser(s.T(), s.client, &service.User{
|
userToday := mustCreateUser(s.T(), s.client, &service.User{
|
||||||
Email: "today@example.com",
|
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,
|
UpdatedAt: now,
|
||||||
})
|
})
|
||||||
userOld := mustCreateUser(s.T(), s.client, &service.User{
|
userOld := mustCreateUser(s.T(), s.client, &service.User{
|
||||||
@@ -237,7 +237,7 @@ func (s *UsageLogRepoSuite) TestDashboardStats_TodayTotalsAndPerformance() {
|
|||||||
TotalCost: 1.5,
|
TotalCost: 1.5,
|
||||||
ActualCost: 1.2,
|
ActualCost: 1.2,
|
||||||
DurationMs: &d1,
|
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)
|
_, err = s.repo.Create(s.ctx, logToday)
|
||||||
s.Require().NoError(err, "Create logToday")
|
s.Require().NoError(err, "Create logToday")
|
||||||
@@ -621,7 +621,7 @@ func (s *UsageLogRepoSuite) TestGetGlobalStats() {
|
|||||||
s.Require().Equal(int64(45), stats.TotalOutputTokens)
|
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) {
|
if a.After(b) {
|
||||||
return a
|
return a
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,4 +72,3 @@ type OpsAlertEventFilter struct {
|
|||||||
Platform string
|
Platform string
|
||||||
GroupID *int64
|
GroupID *int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -94,19 +94,19 @@ func (s *OpsCleanupService) Start() {
|
|||||||
if parsed, err := time.LoadLocation(strings.TrimSpace(s.cfg.Timezone)); err == nil && parsed != nil {
|
if parsed, err := time.LoadLocation(strings.TrimSpace(s.cfg.Timezone)); err == nil && parsed != nil {
|
||||||
loc = parsed
|
loc = parsed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c := cron.New(cron.WithParser(opsCleanupCronParser), cron.WithLocation(loc))
|
c := cron.New(cron.WithParser(opsCleanupCronParser), cron.WithLocation(loc))
|
||||||
_, err := c.AddFunc(schedule, func() { s.runScheduled() })
|
_, err := c.AddFunc(schedule, func() { s.runScheduled() })
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("[OpsCleanup] not started (invalid schedule=%q): %v", schedule, err)
|
log.Printf("[OpsCleanup] not started (invalid schedule=%q): %v", schedule, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
s.cron = c
|
s.cron = c
|
||||||
s.cron.Start()
|
s.cron.Start()
|
||||||
log.Printf("[OpsCleanup] started (schedule=%q tz=%s)", schedule, loc.String())
|
log.Printf("[OpsCleanup] started (schedule=%q tz=%s)", schedule, loc.String())
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *OpsCleanupService) Stop() {
|
func (s *OpsCleanupService) Stop() {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
|
|||||||
@@ -149,4 +149,3 @@ func (s *OpsService) ListRequestDetails(ctx context.Context, filter *OpsRequestD
|
|||||||
PageSize: pageSize,
|
PageSize: pageSize,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ const (
|
|||||||
type limitedResponseWriter struct {
|
type limitedResponseWriter struct {
|
||||||
header http.Header
|
header http.Header
|
||||||
wroteHeader bool
|
wroteHeader bool
|
||||||
status int
|
|
||||||
|
|
||||||
limit int
|
limit int
|
||||||
totalWritten int64
|
totalWritten int64
|
||||||
@@ -65,7 +64,6 @@ func newLimitedResponseWriter(limit int) *limitedResponseWriter {
|
|||||||
}
|
}
|
||||||
return &limitedResponseWriter{
|
return &limitedResponseWriter{
|
||||||
header: make(http.Header),
|
header: make(http.Header),
|
||||||
status: http.StatusOK,
|
|
||||||
limit: limit,
|
limit: limit,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -79,7 +77,6 @@ func (w *limitedResponseWriter) WriteHeader(statusCode int) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
w.wroteHeader = true
|
w.wroteHeader = true
|
||||||
w.status = statusCode
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *limitedResponseWriter) Write(p []byte) (int, error) {
|
func (w *limitedResponseWriter) Write(p []byte) (int, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user