feat: add project-owned error catalogs and HTTP 200 failure contracts

This commit is contained in:
2026-09-24 12:40:05 +08:00
parent bb2caefbb4
commit ebfd279f9a
42 changed files with 1897 additions and 120 deletions

View File

@@ -4,7 +4,10 @@ package telemetry
import (
"context"
"errors"
apierrors "git.yuntuo.hk/k2safe/go-omni/errors"
"math"
"net/http"
"time"
"git.yuntuo.hk/k2safe/go-omni/httpx"
"git.yuntuo.hk/k2safe/go-omni/logx"
"go.opentelemetry.io/otel/attribute"
@@ -15,9 +18,6 @@ import (
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
"go.opentelemetry.io/otel/trace"
"math"
"net/http"
"time"
)
type Config struct {
@@ -99,15 +99,22 @@ func (r *Runtime) Middleware() httpx.Middleware {
defer func() {
status := c.Status()
if err != nil && !c.Responded() {
status = apierrors.From(err).Status
status = c.ResolveError(err).Status
}
p := recover()
if p != nil {
status = 500
}
attrs := []attribute.KeyValue{attribute.String("http.request.method", method), attribute.String("http.route", route), attribute.Int("http.response.status_code", status)}
failure := c.Failure()
if failure == nil && err != nil {
failure = c.ResolveError(err)
}
if failure != nil {
attrs = append(attrs, attribute.Bool("omni.request.failed", true), attribute.String("omni.error.key", failure.Code))
}
span.SetAttributes(attrs...)
if status >= 500 {
if status >= 500 || (failure != nil && status < 400) {
span.SetStatus(codes.Error, "request failed")
}
r.requests.Add(ctx, 1, metric.WithAttributes(attrs...))