feat(platform): expose structured capacity metrics

This commit is contained in:
lingniu
2026-07-04 19:10:04 +08:00
parent 68b260c704
commit cbe7882d51
10 changed files with 297 additions and 42 deletions

View File

@@ -25,8 +25,16 @@ type Report struct {
}
type Totals struct {
ActiveConnections int64 `json:"active_connections"`
KafkaLag float64 `json:"kafka_lag"`
ActiveConnections int64 `json:"active_connections"`
KafkaLag float64 `json:"kafka_lag"`
BridgeConsumerPending float64 `json:"bridge_consumer_pending"`
BridgeAckPending float64 `json:"bridge_ack_pending"`
BridgeBatchPendingMessages float64 `json:"bridge_batch_pending_messages"`
FastWriterConsumerPending float64 `json:"fast_writer_consumer_pending"`
FastWriterAckPending float64 `json:"fast_writer_ack_pending"`
FastWriterBatchPending float64 `json:"fast_writer_batch_pending_messages"`
HistoryBatchPending float64 `json:"history_batch_pending_messages"`
HistoryRowsPending float64 `json:"history_rows_pending"`
}
type ServiceCheck struct {
@@ -52,6 +60,14 @@ func Evaluate(metricsByService map[string]string) Report {
report.Totals.KafkaLag += metrics["vehicle_history_kafka_lag"]
report.Totals.KafkaLag += metrics["vehicle_stat_kafka_lag"]
report.Totals.KafkaLag += metrics["vehicle_realtime_kafka_lag"]
report.Totals.BridgeConsumerPending += metrics["vehicle_bridge_nats_consumer_pending"]
report.Totals.BridgeAckPending += metrics["vehicle_bridge_nats_consumer_ack_pending"]
report.Totals.BridgeBatchPendingMessages += metrics["vehicle_bridge_batch_pending_messages"]
report.Totals.FastWriterConsumerPending += metrics["vehicle_fast_writer_nats_consumer_pending"]
report.Totals.FastWriterAckPending += metrics["vehicle_fast_writer_nats_consumer_ack_pending"]
report.Totals.FastWriterBatchPending += metrics["vehicle_fast_writer_batch_pending_messages"]
report.Totals.HistoryBatchPending += metrics["vehicle_history_batch_pending_messages"]
report.Totals.HistoryRowsPending += metrics["vehicle_history_batch_pending_rows"]
report.Findings = append(report.Findings, findingsForMetrics(metrics)...)
}
if len(report.Findings) > 0 {

View File

@@ -41,6 +41,7 @@ vehicle_bridge_batch_pending_messages 1001`,
vehicle_fast_writer_nats_consumer_pending{consumer="vehicle-fast-writer",stream="VEHICLE_INGEST"} 12001
vehicle_fast_writer_batch_pending_messages 9`,
"history": `vehicle_history_batch_pending_messages 6
vehicle_history_batch_pending_rows 7
vehicle_history_kafka_lag{topic="vehicle.raw.go.jt808.v1",partition="0"} 42`,
})
@@ -63,4 +64,22 @@ vehicle_history_kafka_lag{topic="vehicle.raw.go.jt808.v1",partition="0"} 42`,
t.Fatalf("finding missing %q in:\n%s", want, joined)
}
}
if report.Totals.BridgeAckPending != 101 {
t.Fatalf("bridge ack pending = %v, want 101", report.Totals.BridgeAckPending)
}
if report.Totals.BridgeConsumerPending != 12001 {
t.Fatalf("bridge consumer pending = %v, want 12001", report.Totals.BridgeConsumerPending)
}
if report.Totals.FastWriterAckPending != 11 {
t.Fatalf("fast writer ack pending = %v, want 11", report.Totals.FastWriterAckPending)
}
if report.Totals.FastWriterBatchPending != 9 {
t.Fatalf("fast writer batch pending = %v, want 9", report.Totals.FastWriterBatchPending)
}
if report.Totals.HistoryBatchPending != 6 {
t.Fatalf("history batch pending = %v, want 6", report.Totals.HistoryBatchPending)
}
if report.Totals.HistoryRowsPending != 7 {
t.Fatalf("history rows pending = %v, want 7", report.Totals.HistoryRowsPending)
}
}