diff --git a/backend/.golangci.yml b/backend/.golangci.yml index adb55e37..3ec692a8 100644 --- a/backend/.golangci.yml +++ b/backend/.golangci.yml @@ -21,6 +21,9 @@ linters: - "!**/internal/service/ops_aggregation_service.go" - "!**/internal/service/ops_alert_evaluator_service.go" - "!**/internal/service/ops_cleanup_service.go" + - "!**/internal/service/ops_metrics_collector.go" + - "!**/internal/service/ops_scheduled_report_service.go" + - "!**/internal/service/wire.go" deny: - pkg: github.com/Wei-Shaw/sub2api/internal/repository desc: "service must not import repository" diff --git a/backend/internal/handler/admin/ops_ws_handler.go b/backend/internal/handler/admin/ops_ws_handler.go index 34081e8d..db7442e5 100644 --- a/backend/internal/handler/admin/ops_ws_handler.go +++ b/backend/internal/handler/admin/ops_ws_handler.go @@ -416,7 +416,10 @@ func releaseOpsWSIPSlot(clientIP string) { if !ok { return } - counter, ok := v.(*atomic.Int32); if !ok { return } + counter, ok := v.(*atomic.Int32) + if !ok { + return + } next := counter.Add(-1) if next <= 0 { // Best-effort cleanup; safe even if a new slot was acquired concurrently. diff --git a/backend/internal/repository/ops_repo_dashboard.go b/backend/internal/repository/ops_repo_dashboard.go index e06e393a..194020bb 100644 --- a/backend/internal/repository/ops_repo_dashboard.go +++ b/backend/internal/repository/ops_repo_dashboard.go @@ -385,7 +385,7 @@ ORDER BY bucket_start ASC` if err != nil { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() out := make([]opsHourlyMetricsRow, 0, 64) for rows.Next() { diff --git a/backend/internal/repository/ops_repo_histograms.go b/backend/internal/repository/ops_repo_histograms.go index 143c7e83..c2978798 100644 --- a/backend/internal/repository/ops_repo_histograms.go +++ b/backend/internal/repository/ops_repo_histograms.go @@ -42,7 +42,7 @@ ORDER BY 3 ASC` if err != nil { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() counts := make(map[string]int64, len(latencyHistogramOrderedRanges)) var total int64 diff --git a/backend/internal/repository/ops_repo_latency_histogram_buckets.go b/backend/internal/repository/ops_repo_latency_histogram_buckets.go index fc085fc6..f7809480 100644 --- a/backend/internal/repository/ops_repo_latency_histogram_buckets.go +++ b/backend/internal/repository/ops_repo_latency_histogram_buckets.go @@ -29,19 +29,19 @@ var latencyHistogramOrderedRanges = func() []string { func latencyHistogramRangeCaseExpr(column string) string { var sb strings.Builder - sb.WriteString("CASE\n") + _, _ = sb.WriteString("CASE\n") for _, b := range latencyHistogramBuckets { if b.upperMs <= 0 { continue } - sb.WriteString(fmt.Sprintf("\tWHEN %s < %d THEN '%s'\n", column, b.upperMs, b.label)) + _, _ = sb.WriteString(fmt.Sprintf("\tWHEN %s < %d THEN '%s'\n", column, b.upperMs, b.label)) } // Default bucket. last := latencyHistogramBuckets[len(latencyHistogramBuckets)-1] - sb.WriteString(fmt.Sprintf("\tELSE '%s'\n", last.label)) - sb.WriteString("END") + _, _ = sb.WriteString(fmt.Sprintf("\tELSE '%s'\n", last.label)) + _, _ = sb.WriteString("END") return sb.String() } diff --git a/backend/internal/repository/ops_repo_metrics.go b/backend/internal/repository/ops_repo_metrics.go index 75345595..bc80ed6e 100644 --- a/backend/internal/repository/ops_repo_metrics.go +++ b/backend/internal/repository/ops_repo_metrics.go @@ -348,7 +348,7 @@ ORDER BY job_name ASC` if err != nil { return nil, err } - defer rows.Close() + defer func() { _ = rows.Close() }() out := make([]*service.OpsJobHeartbeat, 0, 8) for rows.Next() {