code: func (i *Interceptor) StreamServer() grpc.StreamServerInterceptor {
  	monitor := i.monitoring.server
  
  	return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
  		start := time.Now()
  		service, method := split(info.FullMethod)
  		ua := userAgent(ss.Context())
  
  		streamLabels := prometheus.Labels{
  			"service":      service,
  			"handler":      method,
  			userAgentLabel: ua,
  		}
  		if i.trackPeers {
  			if ss != nil {
  				streamLabels["peer"] = peerValue(ss.Context())
  			} else {
  				// mostly for testing purposes
  				streamLabels["peer"] = "nil-server-stream"
  			}
  		}
  		err := handler(srv, &monitoredServerStream{ServerStream: ss, labels: streamLabels, monitor: monitor})
  		code := grpc.Code(err)
  		labels := prometheus.Labels{
  			"service":      service,
  			"handler":      method,
  			"code":         code.String(),
  			"type":         handlerType(info.IsClientStream, info.IsServerStream),
  			userAgentLabel: ua,
  		}
  		if i.trackPeers {
  			if ss != nil {
  				labels["peer"] = peerValue(ss.Context())
  			} else {
  				// mostly for testing purposes
  				labels["peer"] = "nil-server-stream"
  			}
  		}
  		if err != nil && code != codes.OK {
  			monitor.errors.With(labels).Add(1)
  		}
  
  		monitor.requestDuration.With(labels).Observe(time.Since(start).Seconds())
  		monitor.requestsTotal.With(labels).Add(1)
  
  		return err
  	}
  }
docs: // StreamServer ...