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 ? '正常' : '异常'}