-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathchainstats.go
47 lines (39 loc) · 1.36 KB
/
chainstats.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package chainstats
import (
"context"
"google.golang.org/grpc/stats"
)
// ChainStatsHandler is a composite stats.Handler that chains multiple stats.Handler instances.
type ChainStatsHandler struct {
handlers []stats.Handler
}
// NewChainStatsHandler creates a new ChainStatsHandler.
func NewChainStatsHandler(handlers ...stats.Handler) *ChainStatsHandler {
return &ChainStatsHandler{handlers: handlers}
}
// TagRPC calls TagRPC on all the chained stats.Handler instances.
func (c *ChainStatsHandler) TagRPC(ctx context.Context, info *stats.RPCTagInfo) context.Context {
for _, handler := range c.handlers {
ctx = handler.TagRPC(ctx, info)
}
return ctx
}
// HandleRPC calls HandleRPC on all the chained stats.Handler instances.
func (c *ChainStatsHandler) HandleRPC(ctx context.Context, stat stats.RPCStats) {
for _, handler := range c.handlers {
handler.HandleRPC(ctx, stat)
}
}
// TagConn calls TagConn on all the chained stats.Handler instances.
func (c *ChainStatsHandler) TagConn(ctx context.Context, info *stats.ConnTagInfo) context.Context {
for _, handler := range c.handlers {
ctx = handler.TagConn(ctx, info)
}
return ctx
}
// HandleConn calls HandleConn on all the chained stats.Handler instances.
func (c *ChainStatsHandler) HandleConn(ctx context.Context, stat stats.ConnStats) {
for _, handler := range c.handlers {
handler.HandleConn(ctx, stat)
}
}