mirror of
https://github.com/3ybactuk/marketplace-go-service-project.git
synced 2025-10-30 14:03:45 +03:00
[hw-7] add metrics, tracing
This commit is contained in:
43
loms/internal/infra/grpc/middleware/metrics.go
Normal file
43
loms/internal/infra/grpc/middleware/metrics.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package mw
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"route256/loms/internal/infra/grpc/metrics"
|
||||
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
const UNKNOWN = "unknown"
|
||||
|
||||
func WithMetrics(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) {
|
||||
start := time.Now()
|
||||
|
||||
resp, err = handler(ctx, req)
|
||||
|
||||
// "/pkg.Service/Method"
|
||||
service, method := parseFullMethod(info.FullMethod)
|
||||
|
||||
code := status.Code(err).String()
|
||||
|
||||
metrics.IncRequestHandlerCount(service, method, code)
|
||||
metrics.StoreHandlerRequestDuration(service, method, code, time.Since(start))
|
||||
|
||||
return resp, err
|
||||
}
|
||||
|
||||
func parseFullMethod(full string) (service, method string) {
|
||||
if full == "" {
|
||||
return UNKNOWN, UNKNOWN
|
||||
}
|
||||
full = strings.TrimPrefix(full, "/")
|
||||
|
||||
slash := strings.Index(full, "/")
|
||||
if slash < 0 {
|
||||
return full, UNKNOWN
|
||||
}
|
||||
return full[:slash], full[slash+1:]
|
||||
}
|
||||
Reference in New Issue
Block a user