# #api #go #grpc #metrics
#API #Вперед #grpc #метрика
Вопрос:
Я использую grpc/статистику.Обработчик для измерения времени жизни запроса grpc. Я передаю этикетку для метрики «прометей» в трейлере. Как я могу удалить этот трейлер, чтобы не отправлять его клиенту?
type connInfo struct { beginTime time.Time label string } type Stats struct { connInfo sync.Map metrics *metrics.Metrics logger *log.Logger } func New(metrics *metrics.Metrics, logger *log.Logger) *Stats { return amp;Stats{ connInfo: sync.Map{}, metrics: metrics, logger: logger, } } func (h *Stats) TagRPC(ctx context.Context, _ *stats.RPCTagInfo) context.Context { return ctx } func (h *Stats) HandleRPC(ctx context.Context, s stats.RPCStats) { if trailer, ok := s.(*stats.OutTrailer); ok { remoteAddr := string(stats.Tags(ctx)) connInfoInterface, ok := h.connInfo.Load(remoteAddr) if !ok { h.logger.Warn(ctx, "start time was not set") return } connInfo := connInfoInterface.(*connInfo) connInfo.label = trailer.Trailer.Get(remoteAddr)[0] } } func (h *Stats) TagConn(ctx context.Context, s *stats.ConnTagInfo) context.Context { ctx = stats.SetIncomingTags(ctx, []byte(s.RemoteAddr.String())) return ctx } func (h *Stats) HandleConn(ctx context.Context, s stats.ConnStats) { remoteAddr := string(stats.Tags(ctx)) switch s.(type) { case *stats.ConnBegin: h.connInfo.Store(remoteAddr, amp;connInfo{beginTime: time.Now()}) case *stats.ConnEnd: fmt.Printf("client disconnected") connInfoInterface, ok := h.connInfo.LoadAndDelete(remoteAddr) if !ok { h.logger.Warn(ctx, "begin time not setted") } connInfo, ok := connInfoInterface.(*connInfo) if !ok { h.logger.Warn(ctx, "wrong convertations") } h.metrics.ConnectionTime.With(metrics.MakeLabels(connInfo.label)).Observe(time.Since(connInfo.beginTime).Seconds()) } }
отправка трейлера с этикеткой
remoteAddr := string(stats.Tags(ctx)) if remoteAddr != "" { stream.SetTrailer(metadata.New(map[string]string{remoteAddr: metrics.ServiceTypeSpeechRecognizeGRPC})) }
Существуют ли какие-либо другие способы передачи информации из обработчика grpc в grpc/статистику.Хэндлкон?