diff --git a/vehicle-data-platform/apps/api/internal/platform/mock_store.go b/vehicle-data-platform/apps/api/internal/platform/mock_store.go index 5393495b..7657665e 100644 --- a/vehicle-data-platform/apps/api/internal/platform/mock_store.go +++ b/vehicle-data-platform/apps/api/internal/platform/mock_store.go @@ -178,10 +178,11 @@ func (m *MockStore) QualityIssues(_ context.Context, query url.Values) (Page[Qua func (m *MockStore) OpsHealth(context.Context) (OpsHealth, error) { summary, _ := m.DashboardSummary(context.Background()) + redisOnlineKeys := 92 return OpsHealth{ LinkHealth: summary.LinkHealth, KafkaLag: summary.KafkaLag, - RedisOnlineKeys: 92, + RedisOnlineKeys: &redisOnlineKeys, TDengineWritable: true, MySQLWritable: true, }, nil diff --git a/vehicle-data-platform/apps/api/internal/platform/model.go b/vehicle-data-platform/apps/api/internal/platform/model.go index 61b1394b..0bb10978 100644 --- a/vehicle-data-platform/apps/api/internal/platform/model.go +++ b/vehicle-data-platform/apps/api/internal/platform/model.go @@ -135,7 +135,7 @@ type QualityIssueRow struct { type OpsHealth struct { LinkHealth []LinkHealth `json:"linkHealth"` KafkaLag *int `json:"kafkaLag"` - RedisOnlineKeys int `json:"redisOnlineKeys"` + RedisOnlineKeys *int `json:"redisOnlineKeys"` TDengineWritable bool `json:"tdengineWritable"` MySQLWritable bool `json:"mysqlWritable"` } diff --git a/vehicle-data-platform/apps/api/internal/platform/production_store.go b/vehicle-data-platform/apps/api/internal/platform/production_store.go index e937486a..be6fd6e3 100644 --- a/vehicle-data-platform/apps/api/internal/platform/production_store.go +++ b/vehicle-data-platform/apps/api/internal/platform/production_store.go @@ -377,8 +377,6 @@ func (s *ProductionStore) OpsHealth(ctx context.Context) (OpsHealth, error) { mysqlStatus = "error" mysqlDetail = err.Error() } - var redisKeys int - _ = s.db.QueryRowContext(ctx, `SELECT COUNT(*) FROM vehicle_realtime_snapshot WHERE updated_at >= DATE_SUB(NOW(), INTERVAL 1 MINUTE)`).Scan(&redisKeys) return OpsHealth{ LinkHealth: []LinkHealth{ {Name: "MySQL realtime", Status: mysqlStatus, Detail: mysqlDetail}, @@ -386,8 +384,8 @@ func (s *ProductionStore) OpsHealth(ctx context.Context) (OpsHealth, error) { {Name: "vehicle_realtime_location", Status: "ok", Detail: "读取实时位置表"}, {Name: "TDengine raw_frames", Status: tdengineStatus(s.tdengine), Detail: tdengineDetail(s.tdengine)}, {Name: "Kafka lag", Status: "warning", Detail: "平台暂未接入 Kafka consumer lag 监控"}, + {Name: "Redis online keys", Status: "warning", Detail: "平台暂未接入 Redis 在线 key 读取"}, }, - RedisOnlineKeys: redisKeys, TDengineWritable: s.tdengine != nil, MySQLWritable: mysqlStatus == "ok", }, nil diff --git a/vehicle-data-platform/apps/web/src/api/types.ts b/vehicle-data-platform/apps/web/src/api/types.ts index a208d3ee..031eb52f 100644 --- a/vehicle-data-platform/apps/web/src/api/types.ts +++ b/vehicle-data-platform/apps/web/src/api/types.ts @@ -125,7 +125,7 @@ export interface QualityIssueRow { export interface OpsHealth { linkHealth: LinkHealth[]; kafkaLag: number | null; - redisOnlineKeys: number; + redisOnlineKeys: number | null; tdengineWritable: boolean; mysqlWritable: boolean; } diff --git a/vehicle-data-platform/apps/web/src/pages/Quality.tsx b/vehicle-data-platform/apps/web/src/pages/Quality.tsx index 3d970757..be54f866 100644 --- a/vehicle-data-platform/apps/web/src/pages/Quality.tsx +++ b/vehicle-data-platform/apps/web/src/pages/Quality.tsx @@ -41,7 +41,7 @@ export function Quality() { {formatLag(health?.kafkaLag)} - {health?.redisOnlineKeys ?? 0} + {formatLag(health?.redisOnlineKeys)} {health?.tdengineWritable && health.mysqlWritable ? '正常' : '异常'}