From 171503d7755043a65c35849b9e81945dcef4c709 Mon Sep 17 00:00:00 2001 From: "3371392206@qq.com" <3371392206@qq.com> Date: Wed, 26 Aug 2026 15:35:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20VUL-002=20=E4=BF=AE=E5=A4=8D=20transport?= =?UTF-8?q?=20=E9=94=99=E8=AF=AF=E5=9F=8B=E7=82=B9=E7=BC=BA=E5=A4=B1=20VUL?= =?UTF-8?q?-002=20(=E4=BD=8E):=20transport=20=E5=B1=82=E9=94=99=E8=AF=AF?= =?UTF-8?q?=E4=B8=8D=E8=BF=9B=E5=85=A5=20UpstreamErrors=20=E6=8C=87?= =?UTF-8?q?=E6=A0=87=20=E5=8E=9F=E4=BB=A3=E7=A0=81=E7=94=A8=20if=20errCode?= =?UTF-8?q?=20!=3D=200=20=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E9=94=99=E8=AF=AF,=E4=BD=86=E5=90=88=E6=88=90?= =?UTF-8?q?=E9=93=BE=E8=B7=AF=E4=B8=AD=20=E5=A4=9A=E7=A7=8D=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=9C=BA=E6=99=AF=E7=9A=84=20errCode=20=E6=9C=AC?= =?UTF-8?q?=E8=BA=AB=E6=98=AF=200(=E7=81=AB=E5=B1=B1=20v3=20=E4=B8=9A?= =?UTF-8?q?=E5=8A=A1=E7=A0=81=E9=9D=9E=200=20=E6=97=B6=E6=89=8D=20?= =?UTF-8?q?=E4=BC=9A=E4=BC=A0=E5=85=A5),=E5=AF=BC=E8=87=B4=E8=BF=99?= =?UTF-8?q?=E4=BA=9B=E5=9C=BA=E6=99=AF=E5=9C=A8=20/metrics=20=E4=B8=8A?= =?UTF-8?q?=E5=AE=8C=E5=85=A8=E4=B8=8D=E5=8F=AF=E8=A7=81:=20=20=20-=20tran?= =?UTF-8?q?sport=5Ferror:=20client.PostStream=20=E5=A4=B1=E8=B4=A5(DNS=20/?= =?UTF-8?q?=20=E8=BF=9E=E6=8E=A5=20/=20TLS)=20=20=20-=20request=5Ferror=20?= =?UTF-8?q?=20:=20buildRequest=20=E5=BA=8F=E5=88=97=E5=8C=96=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=20=20=20-=20wrap=5Ferror=20=20=20=20=20:=20WAV=20?= =?UTF-8?q?=E5=A4=B4=E6=8B=BC=E8=A3=85=E5=A4=B1=E8=B4=A5=20=20=20-=20strea?= =?UTF-8?q?m=5Ferror=20(code=3D0):=20=E8=AF=BB=E6=B5=81=E9=94=99=E8=AF=AF?= =?UTF-8?q?=20=E4=BF=AE=E5=A4=8D:=E6=8A=8A=E5=88=A4=E6=96=AD=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=20if=20status=20!=3D=20"ok",status=20=E6=98=AF?= =?UTF-8?q?=E4=B8=8A=E6=B8=B8=E8=B0=83=E7=94=A8=E5=85=A8=E9=93=BE=20?= =?UTF-8?q?=E8=B7=AF=E7=9A=84=E6=9D=83=E5=A8=81=E9=94=99=E8=AF=AF=E6=8C=87?= =?UTF-8?q?=E7=A4=BA=E5=99=A8,=E4=BB=BB=E4=BD=95=E9=9D=9E=20ok=20=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E9=83=BD=E8=AE=A1=E4=B8=BA=E9=94=99=E8=AF=AF=E3=80=82?= =?UTF-8?q?=20codeLabel(0)=20=E2=86=92=20"transport"=20=E5=B7=B2=E6=9C=89?= =?UTF-8?q?=E5=AE=9A=E4=B9=89,=E4=BF=AE=E5=A4=8D=E5=90=8E=E8=AF=A5?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E7=9C=9F=E6=AD=A3=E7=94=9F=E6=95=88,=20?= =?UTF-8?q?=E7=81=AB=E5=B1=B1=E6=8E=A5=E5=8F=A3=E4=B8=8D=E5=8F=AF=E8=BE=BE?= =?UTF-8?q?=E7=AD=89=E7=BD=91=E7=BB=9C=E6=95=85=E9=9A=9C=E9=A6=96=E6=AC=A1?= =?UTF-8?q?=E5=9C=A8=E7=9B=91=E6=8E=A7=E4=B8=8A=E5=8F=AF=E8=A7=81=E3=80=82?= =?UTF-8?q?=20=E5=90=91=E5=90=8E=E5=85=BC=E5=AE=B9:=E5=B7=B2=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E7=9A=84=20http=5FXXX=20=E9=94=99=E8=AF=AF(status=3D"?= =?UTF-8?q?http=5Fxxx"=20!=3D=20"ok")=20=E8=A1=8C=E4=B8=BA=E4=B8=8D?= =?UTF-8?q?=E5=8F=98,=E6=96=B0=E5=A2=9E=20transport=20/=20request=20/=20wr?= =?UTF-8?q?ap=20/=20stream=20=E9=94=99=E8=AF=AF=E8=BF=9B=E5=85=A5=E6=8C=87?= =?UTF-8?q?=E6=A0=87=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- metrics/metrics.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/metrics/metrics.go b/metrics/metrics.go index 334505d..ad38e33 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -131,7 +131,10 @@ func (AdapterRecorder) UpstreamFinished(speaker, model, format, status string, d if audioBytes > 0 { UpstreamBytes.Add(float64(audioBytes), telemetry.Labels{"format": format}) } - if errCode != 0 { + // 上游调用只要 status != "ok" 即视为错误。原版 if errCode != 0 会漏掉 + // errCode=0 的 request_error / transport_error / wrap_error / stream_error + // (code=0 的流错误) 等场景,导致 transport 类错误在 /metrics 上完全不可见。 + if status != "ok" { UpstreamErrors.Inc(telemetry.Labels{"code": codeLabel(errCode)}) } }