#348-v3 add check method in should be skipped #189
108
handler.go
108
handler.go
@ -15,6 +15,7 @@ import (
|
|||||||
"go.unistack.org/micro/v3/errors"
|
"go.unistack.org/micro/v3/errors"
|
||||||
"go.unistack.org/micro/v3/logger"
|
"go.unistack.org/micro/v3/logger"
|
||||||
"go.unistack.org/micro/v3/metadata"
|
"go.unistack.org/micro/v3/metadata"
|
||||||
|
"go.unistack.org/micro/v3/meter"
|
||||||
"go.unistack.org/micro/v3/options"
|
"go.unistack.org/micro/v3/options"
|
||||||
"go.unistack.org/micro/v3/register"
|
"go.unistack.org/micro/v3/register"
|
||||||
"go.unistack.org/micro/v3/semconv"
|
"go.unistack.org/micro/v3/semconv"
|
||||||
@ -435,49 +436,66 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
var sp tracer.Span
|
var sp tracer.Span
|
||||||
if !match && h.hd != nil {
|
if !match && h.hd != nil {
|
||||||
if hdlr, ok := h.hd.Handler().(http.Handler); ok {
|
if hdlr, ok := h.hd.Handler().(http.Handler); ok {
|
||||||
h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", h.hd.Name()).Inc()
|
if !slices.Contains(tracer.DefaultSkipEndpoints, h.hd.Name()) {
|
||||||
ctx, sp = h.opts.Tracer.Start(ctx, h.hd.Name()+" rpc-server",
|
ctx, sp = h.opts.Tracer.Start(ctx, h.hd.Name()+" rpc-server",
|
||||||
tracer.WithSpanKind(tracer.SpanKindServer),
|
tracer.WithSpanKind(tracer.SpanKindServer),
|
||||||
tracer.WithSpanLabels(
|
tracer.WithSpanLabels(
|
||||||
"endpoint", h.hd.Name(),
|
"endpoint", h.hd.Name(),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
hdlr.ServeHTTP(w, r.WithContext(ctx))
|
defer func() {
|
||||||
n := GetRspCode(ctx)
|
n := GetRspCode(ctx)
|
||||||
if n > 399 {
|
if s, _ := sp.Status(); s != tracer.SpanStatusError && n > 399 {
|
||||||
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", h.hd.Name(), "status", "success", "code", strconv.Itoa(n)).Inc()
|
sp.SetStatus(tracer.SpanStatusError, http.StatusText(n))
|
||||||
if s, _ := sp.Status(); s != tracer.SpanStatusError {
|
}
|
||||||
sp.SetStatus(tracer.SpanStatusError, http.StatusText(n))
|
sp.Finish()
|
||||||
}
|
}()
|
||||||
} else {
|
|
||||||
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", h.hd.Name(), "status", "failure", "code", strconv.Itoa(n)).Inc()
|
|
||||||
}
|
}
|
||||||
te := time.Since(ts)
|
|
||||||
h.opts.Meter.Summary(semconv.ServerRequestLatencyMicroseconds, "endpoint", h.hd.Name()).Update(te.Seconds())
|
if !slices.Contains(meter.DefaultSkipEndpoints, h.hd.Name()) {
|
||||||
h.opts.Meter.Histogram(semconv.ServerRequestDurationSeconds, "endpoint", h.hd.Name()).Update(te.Seconds())
|
h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", h.hd.Name()).Inc()
|
||||||
h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", h.hd.Name()).Dec()
|
|
||||||
sp.Finish()
|
defer func() {
|
||||||
|
n := GetRspCode(ctx)
|
||||||
|
if n > 399 {
|
||||||
|
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", h.hd.Name(), "status", "success", "code", strconv.Itoa(n)).Inc()
|
||||||
|
} else {
|
||||||
|
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", h.hd.Name(), "status", "failure", "code", strconv.Itoa(n)).Inc()
|
||||||
|
}
|
||||||
|
te := time.Since(ts)
|
||||||
|
h.opts.Meter.Summary(semconv.ServerRequestLatencyMicroseconds, "endpoint", h.hd.Name()).Update(te.Seconds())
|
||||||
|
h.opts.Meter.Histogram(semconv.ServerRequestDurationSeconds, "endpoint", h.hd.Name()).Update(te.Seconds())
|
||||||
|
h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", h.hd.Name()).Dec()
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
hdlr.ServeHTTP(w, r.WithContext(ctx))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else if !match {
|
} else if !match {
|
||||||
// check for http.HandlerFunc handlers
|
// check for http.HandlerFunc handlers
|
||||||
ctx, sp = h.opts.Tracer.Start(ctx, r.URL.Path+" rpc-server",
|
if !slices.Contains(tracer.DefaultSkipEndpoints, r.URL.Path) {
|
||||||
tracer.WithSpanKind(tracer.SpanKindServer),
|
ctx, sp = h.opts.Tracer.Start(ctx, r.URL.Path+" rpc-server",
|
||||||
tracer.WithSpanLabels(
|
tracer.WithSpanKind(tracer.SpanKindServer),
|
||||||
"endpoint", r.URL.Path,
|
tracer.WithSpanLabels(
|
||||||
),
|
"endpoint", r.URL.Path,
|
||||||
)
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if n := GetRspCode(ctx); n > 399 {
|
||||||
|
sp.SetStatus(tracer.SpanStatusError, http.StatusText(n))
|
||||||
|
} else {
|
||||||
|
sp.SetStatus(tracer.SpanStatusError, http.StatusText(http.StatusNotFound))
|
||||||
|
}
|
||||||
|
sp.Finish()
|
||||||
|
}()
|
||||||
|
}
|
||||||
if ph, _, err := h.pathHandlers.Search(r.Method, r.URL.Path); err == nil {
|
if ph, _, err := h.pathHandlers.Search(r.Method, r.URL.Path); err == nil {
|
||||||
ph.(http.HandlerFunc)(w, r.WithContext(ctx))
|
ph.(http.HandlerFunc)(w, r.WithContext(ctx))
|
||||||
if n := GetRspCode(ctx); n > 399 {
|
|
||||||
sp.SetStatus(tracer.SpanStatusError, http.StatusText(n))
|
|
||||||
}
|
|
||||||
sp.Finish()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
h.errorHandler(ctx, nil, w, r, fmt.Errorf("not matching route found"), http.StatusNotFound)
|
h.errorHandler(ctx, nil, w, r, fmt.Errorf("not matching route found"), http.StatusNotFound)
|
||||||
sp.SetStatus(tracer.SpanStatusError, http.StatusText(http.StatusNotFound))
|
|
||||||
sp.Finish()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -495,20 +513,28 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
ctx, sp = h.opts.Tracer.Start(ctx, endpointName+" rpc-server", topts...)
|
ctx, sp = h.opts.Tracer.Start(ctx, endpointName+" rpc-server", topts...)
|
||||||
|
|
||||||
defer func() {
|
if !slices.Contains(meter.DefaultSkipEndpoints, handler.name) {
|
||||||
te := time.Since(ts)
|
defer func() {
|
||||||
h.opts.Meter.Summary(semconv.ServerRequestLatencyMicroseconds, "endpoint", handler.name).Update(te.Seconds())
|
te := time.Since(ts)
|
||||||
h.opts.Meter.Histogram(semconv.ServerRequestDurationSeconds, "endpoint", handler.name).Update(te.Seconds())
|
h.opts.Meter.Summary(semconv.ServerRequestLatencyMicroseconds, "endpoint", handler.name).Update(te.Seconds())
|
||||||
h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", handler.name).Dec()
|
h.opts.Meter.Histogram(semconv.ServerRequestDurationSeconds, "endpoint", handler.name).Update(te.Seconds())
|
||||||
|
h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", handler.name).Dec()
|
||||||
|
|
||||||
|
n := GetRspCode(ctx)
|
||||||
|
if n > 399 {
|
||||||
|
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", handler.name, "status", "failure", "code", strconv.Itoa(n)).Inc()
|
||||||
|
} else {
|
||||||
|
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", handler.name, "status", "success", "code", strconv.Itoa(n)).Inc()
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
n := GetRspCode(ctx)
|
n := GetRspCode(ctx)
|
||||||
if n > 399 {
|
if n > 399 {
|
||||||
if s, _ := sp.Status(); s != tracer.SpanStatusError {
|
if s, _ := sp.Status(); s != tracer.SpanStatusError {
|
||||||
sp.SetStatus(tracer.SpanStatusError, http.StatusText(n))
|
sp.SetStatus(tracer.SpanStatusError, http.StatusText(n))
|
||||||
}
|
}
|
||||||
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", handler.name, "status", "failure", "code", strconv.Itoa(n)).Inc()
|
|
||||||
} else {
|
|
||||||
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", handler.name, "status", "success", "code", strconv.Itoa(n)).Inc()
|
|
||||||
}
|
}
|
||||||
sp.Finish()
|
sp.Finish()
|
||||||
}()
|
}()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user