in src/envoy/http/service_control/handler_impl.cc [320:383]
void ServiceControlHandlerImpl::callReport(
const Envoy::Http::RequestHeaderMap* request_headers,
const Envoy::Http::ResponseHeaderMap* response_headers,
const Envoy::Http::ResponseTrailerMap* response_trailers,
const Envoy::Tracing::Span& parent_span) {
if (!isReportRequired()) {
return;
}
::espv2::api_proxy::service_control::ReportRequestInfo info;
prepareReportRequest(info);
fillLoggedHeader(request_headers,
require_ctx_->service_ctx().config().log_request_headers(),
info.request_headers);
fillLoggedHeader(response_headers,
require_ctx_->service_ctx().config().log_response_headers(),
info.response_headers);
fillJwtPayloads(
stream_info_.dynamicMetadata(),
require_ctx_->service_ctx().config().jwt_payload_metadata_name(),
require_ctx_->service_ctx().config().log_jwt_payloads(),
info.jwt_payloads);
fillJwtPayload(
stream_info_.dynamicMetadata(),
require_ctx_->service_ctx().config().jwt_payload_metadata_name(),
JwtPayloadIssuerPath, info.auth_issuer);
fillJwtPayload(
stream_info_.dynamicMetadata(),
require_ctx_->service_ctx().config().jwt_payload_metadata_name(),
JwtPayloadAudiencePath, info.auth_audience);
info.frontend_protocol = getFrontendProtocol(response_headers, stream_info_);
info.backend_protocol =
getBackendProtocol(require_ctx_->service_ctx().config());
if (request_headers) {
info.referer = std::string(utils::readHeaderEntry(
request_headers->getInline(referer_handle.handle())));
}
fillLatency(stream_info_, info.latency, filter_stats_);
fillStatus(response_headers, response_trailers, stream_info_, info);
info.request_size = stream_info_.bytesReceived() + request_header_size_;
uint64_t response_header_size = 0;
if (response_headers) {
response_header_size += response_headers->byteSize();
}
if (response_trailers) {
response_header_size += response_trailers->byteSize();
}
info.response_size = stream_info_.bytesSent() + response_header_size;
info.response_code_detail = stream_info_.responseCodeDetails().value_or("");
if (!require_ctx_->service_ctx().config().tracing_disabled()) {
info.trace_id = parent_span.getTraceIdAsHex();
}
require_ctx_->service_ctx().call().callReport(info);
}