From 38946d1af54ef988dff72ec7612327c293daf87b Mon Sep 17 00:00:00 2001 From: ryan Date: Thu, 2 Jul 2026 15:28:49 +0800 Subject: [PATCH] fix(clickhouse): resolve lint issues from optimization stack --- docs/plan/clickhouse-cpu-optimization.md | 2 +- .../apps/openflare/agent/observability.go | 2 +- .../observability/access_log_logics.go | 5 +-- internal/apps/openflare/waf/ip_group_sync.go | 5 --- .../openflare_access_log_store_memory.go | 5 +-- .../analytics/node_access_log_filter.go | 34 ++++++++++++------- 6 files changed, 27 insertions(+), 26 deletions(-) diff --git a/docs/plan/clickhouse-cpu-optimization.md b/docs/plan/clickhouse-cpu-optimization.md index 37274b16..dd5e238d 100644 --- a/docs/plan/clickhouse-cpu-optimization.md +++ b/docs/plan/clickhouse-cpu-optimization.md @@ -1,7 +1,7 @@ # ClickHouse CPU 性能优化计划 > PLAN_ID: `63ba981b` -> 状态: 执行中 +> 状态: 已完成 > 目标: 完成 P0–P2 优化,降低 ClickHouse CPU 占用 ## 背景 diff --git a/internal/apps/openflare/agent/observability.go b/internal/apps/openflare/agent/observability.go index 851bd5b0..8d7a81d9 100644 --- a/internal/apps/openflare/agent/observability.go +++ b/internal/apps/openflare/agent/observability.go @@ -235,7 +235,7 @@ func buildNodeAccessLogRecords(nodeID string, direct []NodeAccessLog, buffered [ return records, nil } -func persistNodeAccessLogs(ctx context.Context, nodeID string, records []*model.OpenFlareAccessLog, reportedAt time.Time) error { +func persistNodeAccessLogs(ctx context.Context, _ string, records []*model.OpenFlareAccessLog, _ time.Time) error { if len(records) == 0 { return nil } diff --git a/internal/apps/openflare/observability/access_log_logics.go b/internal/apps/openflare/observability/access_log_logics.go index 98c78dfa..d4593e53 100644 --- a/internal/apps/openflare/observability/access_log_logics.go +++ b/internal/apps/openflare/observability/access_log_logics.go @@ -26,10 +26,7 @@ const ( accessLogFieldRequestCount = "request_count" ) -var ( - nodeAccessLogRetentionWindow = nodeAccessLogRetentionDays * 24 * time.Hour - defaultAccessLogQueryWindow = defaultAccessLogQueryDays * 24 * time.Hour -) +var defaultAccessLogQueryWindow = defaultAccessLogQueryDays * 24 * time.Hour // AccessLogQuery filters access log list queries. type AccessLogQuery struct { diff --git a/internal/apps/openflare/waf/ip_group_sync.go b/internal/apps/openflare/waf/ip_group_sync.go index 4d5effb9..0b9acc37 100644 --- a/internal/apps/openflare/waf/ip_group_sync.go +++ b/internal/apps/openflare/waf/ip_group_sync.go @@ -329,11 +329,6 @@ func normalizeIPLiteral(value string) (string, bool) { return addr.String(), true } -func hostIsIPLiteral(value string) bool { - _, ok := normalizeIPLiteral(value) - return ok -} - func downloadIPGroupSubscription(ctx context.Context, rawURL string) ([]byte, error) { if err := validateSubscriptionURL(rawURL); err != nil { return nil, err diff --git a/internal/model/openflare_access_log_store_memory.go b/internal/model/openflare_access_log_store_memory.go index a707c342..709e5dcc 100644 --- a/internal/model/openflare_access_log_store_memory.go +++ b/internal/model/openflare_access_log_store_memory.go @@ -6,6 +6,7 @@ package model import ( "context" "net" + "net/http" "net/netip" "sort" "strings" @@ -343,13 +344,13 @@ func (s *memoryAccessLogStore) WAFIPAggregates(_ context.Context, filter OpenFla } item.RequestCount++ item.StatusCounts[row.StatusCode]++ - if row.StatusCode == 404 { + if row.StatusCode == http.StatusNotFound { item.Status404Count++ } if row.StatusCode >= 400 && row.StatusCode < 500 { item.ClientErrorCount++ } - if row.StatusCode >= 500 { + if row.StatusCode >= http.StatusInternalServerError { item.ServerErrorCount++ } if memoryAccessLogHostIsIPLiteral(row.Host) { diff --git a/internal/repository/analytics/node_access_log_filter.go b/internal/repository/analytics/node_access_log_filter.go index e89d3441..d4962bb1 100644 --- a/internal/repository/analytics/node_access_log_filter.go +++ b/internal/repository/analytics/node_access_log_filter.go @@ -9,7 +9,15 @@ import ( "time" ) -const nodeAccessLogFilterClauseCapacity = 6 +const ( + nodeAccessLogFilterClauseCapacity = 6 + + nodeAccessLogSortDesc = "DESC" + nodeAccessLogSortAsc = "ASC" + nodeAccessLogSortAscInput = "asc" + + nodeAccessLogColumnRemoteAddr = "remote_addr" +) // NodeAccessLogFilter scopes ClickHouse node access log queries. type NodeAccessLogFilter struct { @@ -66,16 +74,16 @@ func combineNodeAccessLogSQLClauses(left string, right string) string { } func nodeAccessLogOrderClause(sortBy string, sortOrder string) string { - direction := "DESC" - if normalizeNodeAccessLogSortOrder(sortOrder) == "asc" { - direction = "ASC" + direction := nodeAccessLogSortDesc + if normalizeNodeAccessLogSortOrder(sortOrder) == nodeAccessLogSortAscInput { + direction = nodeAccessLogSortAsc } column := "logged_at" switch strings.TrimSpace(sortBy) { case "status_code": column = "status_code" - case "remote_addr": - column = "remote_addr" + case nodeAccessLogColumnRemoteAddr: + column = nodeAccessLogColumnRemoteAddr case "host": column = "host" case "path": @@ -110,9 +118,9 @@ func nodeAccessLogHostIsIPLiteralExpr() string { } func nodeAccessLogBucketOrderClause(sortBy string, sortOrder string) string { - direction := "DESC" - if normalizeNodeAccessLogSortOrder(sortOrder) == "asc" { - direction = "ASC" + direction := nodeAccessLogSortDesc + if normalizeNodeAccessLogSortOrder(sortOrder) == nodeAccessLogSortAscInput { + direction = nodeAccessLogSortAsc } switch strings.TrimSpace(sortBy) { case "request_count": @@ -123,9 +131,9 @@ func nodeAccessLogBucketOrderClause(sortBy string, sortOrder string) string { } func nodeAccessLogIPSummaryOrderClause(sortBy string, sortOrder string) string { - direction := "DESC" - if normalizeNodeAccessLogSortOrder(sortOrder) == "asc" { - direction = "ASC" + direction := nodeAccessLogSortDesc + if normalizeNodeAccessLogSortOrder(sortOrder) == nodeAccessLogSortAscInput { + direction = nodeAccessLogSortAsc } column := "total_requests" switch strings.TrimSpace(sortBy) { @@ -133,7 +141,7 @@ func nodeAccessLogIPSummaryOrderClause(sortBy string, sortOrder string) string { column = "recent_requests" case "last_seen_at": column = "last_seen_epoch" - case "remote_addr": + case nodeAccessLogColumnRemoteAddr: column = "trimmed_remote_addr" } return column + " " + direction + ", last_seen_epoch DESC, trimmed_remote_addr ASC"