feat(go): improve realtime pipeline resilience

This commit is contained in:
lingniu
2026-07-03 15:20:22 +08:00
parent b8299faefa
commit 9994f2baf4
6 changed files with 213 additions and 11 deletions

View File

@@ -179,6 +179,12 @@ func (c *MQTTClient) buildTLSConfig() (*tls.Config, error) {
}
func (c *MQTTClient) handleMessage(ctx context.Context, topic string, payload []byte) {
started := time.Now()
frameStatus := envelope.ParseBadFrame
defer func() {
c.recordFrameDuration(frameStatus, time.Since(started))
}()
messageCtx, cancelMessage := context.WithTimeout(context.WithoutCancel(ctx), frameOperationTimeout)
defer cancelMessage()
@@ -214,6 +220,7 @@ func (c *MQTTClient) handleMessage(ctx context.Context, topic string, payload []
c.recordIdentityMetric(identityStatus(env))
}
}
frameStatus = env.ParseStatus
c.recordFrameMetric(env.ParseStatus)
if err := c.cfg.Sink.PublishRaw(messageCtx, env); err != nil {
c.recordPublishMetric("raw", "error")
@@ -252,6 +259,16 @@ func (c *MQTTClient) recordFrameMetric(status envelope.ParseStatus) {
})
}
func (c *MQTTClient) recordFrameDuration(status envelope.ParseStatus, elapsed time.Duration) {
if c.cfg.Metrics == nil {
return
}
c.cfg.Metrics.SetGauge("vehicle_gateway_frame_duration_ms", metrics.Labels{
"protocol": string(envelope.ProtocolYutongMQTT),
"status": string(status),
}, float64(elapsed.Milliseconds()))
}
func (c *MQTTClient) recordPublishMetric(kind string, status string) {
if c.cfg.Metrics == nil {
return