Compare commits

...

2 Commits
v3.11.32 ... v3

Author SHA1 Message Date
2deb9d3df9 handler/meter: export Options
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2024-11-17 19:26:42 +03:00
f071b4b145 add server type in metrics and tracing
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2024-11-10 20:18:20 +03:00
2 changed files with 18 additions and 16 deletions

View File

@ -454,19 +454,19 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
} }
if !slices.Contains(meter.DefaultSkipEndpoints, endpointName) { if !slices.Contains(meter.DefaultSkipEndpoints, endpointName) {
h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", endpointName).Inc() h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", endpointName, "server", "http").Inc()
defer func() { defer func() {
n := GetRspCode(ctx) n := GetRspCode(ctx)
if n > 399 { if n > 399 {
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", endpointName, "status", "success", "code", strconv.Itoa(n)).Inc() h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", endpointName, "server", "http", "status", "success", "code", strconv.Itoa(n)).Inc()
} else { } else {
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", endpointName, "status", "failure", "code", strconv.Itoa(n)).Inc() h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", endpointName, "server", "http", "status", "failure", "code", strconv.Itoa(n)).Inc()
} }
te := time.Since(ts) te := time.Since(ts)
h.opts.Meter.Summary(semconv.ServerRequestLatencyMicroseconds, "endpoint", endpointName).Update(te.Seconds()) h.opts.Meter.Summary(semconv.ServerRequestLatencyMicroseconds, "endpoint", endpointName, "server", "http").Update(te.Seconds())
h.opts.Meter.Histogram(semconv.ServerRequestDurationSeconds, "endpoint", endpointName).Update(te.Seconds()) h.opts.Meter.Histogram(semconv.ServerRequestDurationSeconds, "endpoint", endpointName, "server", "http").Update(te.Seconds())
h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", endpointName).Dec() h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", endpointName, "server", "http").Dec()
}() }()
} }
@ -480,6 +480,7 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
tracer.WithSpanKind(tracer.SpanKindServer), tracer.WithSpanKind(tracer.SpanKindServer),
tracer.WithSpanLabels( tracer.WithSpanLabels(
"endpoint", r.URL.Path, "endpoint", r.URL.Path,
"server", "http",
), ),
) )
@ -506,6 +507,7 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
tracer.WithSpanKind(tracer.SpanKindServer), tracer.WithSpanKind(tracer.SpanKindServer),
tracer.WithSpanLabels( tracer.WithSpanLabels(
"endpoint", endpointName, "endpoint", endpointName,
"server", "http",
), ),
} }
@ -513,20 +515,20 @@ func (h *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
topts = append(topts, tracer.WithSpanRecord(false)) topts = append(topts, tracer.WithSpanRecord(false))
} }
ctx, sp = h.opts.Tracer.Start(ctx, endpointName+" rpc-server", topts...) ctx, sp = h.opts.Tracer.Start(ctx, "rpc-server", topts...)
if !slices.Contains(meter.DefaultSkipEndpoints, handler.name) { if !slices.Contains(meter.DefaultSkipEndpoints, handler.name) {
defer func() { defer func() {
te := time.Since(ts) te := time.Since(ts)
h.opts.Meter.Summary(semconv.ServerRequestLatencyMicroseconds, "endpoint", handler.name).Update(te.Seconds()) h.opts.Meter.Summary(semconv.ServerRequestLatencyMicroseconds, "endpoint", handler.name, "server", "http").Update(te.Seconds())
h.opts.Meter.Histogram(semconv.ServerRequestDurationSeconds, "endpoint", handler.name).Update(te.Seconds()) h.opts.Meter.Histogram(semconv.ServerRequestDurationSeconds, "endpoint", handler.name, "server", "http").Update(te.Seconds())
h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", handler.name).Dec() h.opts.Meter.Counter(semconv.ServerRequestInflight, "endpoint", handler.name, "server", "http").Dec()
n := GetRspCode(ctx) n := GetRspCode(ctx)
if n > 399 { if n > 399 {
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", handler.name, "status", "failure", "code", strconv.Itoa(n)).Inc() h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", handler.name, "server", "http", "status", "failure", "code", strconv.Itoa(n)).Inc()
} else { } else {
h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", handler.name, "status", "success", "code", strconv.Itoa(n)).Inc() h.opts.Meter.Counter(semconv.ServerRequestTotal, "endpoint", handler.name, "server", "http", "status", "success", "code", strconv.Itoa(n)).Inc()
} }
}() }()
} }

View File

@ -35,7 +35,7 @@ var bufPool = sync.Pool{
var _ MeterServiceServer = &Handler{} var _ MeterServiceServer = &Handler{}
type Handler struct { type Handler struct {
opts Options Options Options
} }
type Option func(*Options) type Option func(*Options)
@ -81,7 +81,7 @@ func NewOptions(opts ...Option) Options {
func NewHandler(opts ...Option) *Handler { func NewHandler(opts ...Option) *Handler {
options := NewOptions(opts...) options := NewOptions(opts...)
return &Handler{opts: options} return &Handler{Options: options}
} }
func (h *Handler) Metrics(ctx context.Context, req *codecpb.Frame, rsp *codecpb.Frame) error { func (h *Handler) Metrics(ctx context.Context, req *codecpb.Frame, rsp *codecpb.Frame) error {
@ -96,7 +96,7 @@ func (h *Handler) Metrics(ctx context.Context, req *codecpb.Frame, rsp *codecpb.
w := io.Writer(buf) w := io.Writer(buf)
if md, ok := metadata.FromOutgoingContext(ctx); gzipAccepted(md) && ok && !h.opts.DisableCompress { if md, ok := metadata.FromOutgoingContext(ctx); gzipAccepted(md) && ok && !h.Options.DisableCompress {
omd, _ := metadata.FromOutgoingContext(ctx) omd, _ := metadata.FromOutgoingContext(ctx)
omd.Set(contentEncodingHeader, "gzip") omd.Set(contentEncodingHeader, "gzip")
gz := gzipPool.Get().(*gzip.Writer) gz := gzipPool.Get().(*gzip.Writer)
@ -109,7 +109,7 @@ func (h *Handler) Metrics(ctx context.Context, req *codecpb.Frame, rsp *codecpb.
gz.Flush() gz.Flush()
} }
if err := h.opts.Meter.Write(w, h.opts.MeterOptions...); err != nil { if err := h.Options.Meter.Write(w, h.Options.MeterOptions...); err != nil {
log.Error(ctx, "http/meter write failed", err) log.Error(ctx, "http/meter write failed", err)
return nil return nil
} }