Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions envoy/tracing/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,25 @@ envoy_package()
envoy_cc_library(
name = "http_tracer_interface",
hdrs = ["http_tracer.h"],
deps = [
":tracer_interface",
],
)

envoy_cc_library(
name = "tracer_interface",
hdrs = ["tracer.h"],
deps = [
":trace_driver_interface",
"//envoy/access_log:access_log_interface",
"//envoy/http:header_map_interface",
],
)

envoy_cc_library(
name = "http_tracer_manager_interface",
hdrs = ["http_tracer_manager.h"],
name = "tracer_manager_interface",
hdrs = ["tracer_manager.h"],
deps = [
":http_tracer_interface",
":tracer_interface",
"@envoy_api//envoy/config/trace/v3:pkg_cc_proto",
],
)
Expand Down
27 changes: 3 additions & 24 deletions envoy/tracing/http_tracer.h
Original file line number Diff line number Diff line change
@@ -1,31 +1,10 @@
#pragma once

#include <memory>
#include <string>
#include <vector>

#include "envoy/access_log/access_log.h"
#include "envoy/common/pure.h"
#include "envoy/http/header_map.h"
#include "envoy/tracing/trace_driver.h"
#include "envoy/tracing/trace_reason.h"
#include "envoy/tracing/tracer.h"

namespace Envoy {
namespace Tracing {

/**
* HttpTracer is responsible for handling traces and delegate actions to the
* corresponding drivers.
*/
class HttpTracer {
public:
virtual ~HttpTracer() = default;

virtual SpanPtr startSpan(const Config& config, Http::RequestHeaderMap& request_headers,
const StreamInfo::StreamInfo& stream_info,
const Tracing::Decision tracing_decision) PURE;
};

// Alias name of Tracer to reduce unnecessary changes in the current code.
using HttpTracer = Tracer;
using HttpTracerSharedPtr = std::shared_ptr<HttpTracer>;

} // namespace Tracing
Expand Down
29 changes: 0 additions & 29 deletions envoy/tracing/http_tracer_manager.h

This file was deleted.

34 changes: 34 additions & 0 deletions envoy/tracing/tracer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#pragma once

#include <memory>
#include <string>
#include <vector>

#include "envoy/access_log/access_log.h"
#include "envoy/common/pure.h"
#include "envoy/tracing/trace_driver.h"
#include "envoy/tracing/trace_reason.h"

#include "trace_context.h"
#include "tracer.h"

namespace Envoy {
namespace Tracing {

/**
* Tracer is responsible for handling traces and delegate actions to the
* corresponding drivers.
*/
class Tracer {
public:
virtual ~Tracer() = default;

virtual SpanPtr startSpan(const Config& config, TraceContext& trace_context,
const StreamInfo::StreamInfo& stream_info,
const Tracing::Decision tracing_decision) PURE;
};

using TracerSharedPtr = std::shared_ptr<Tracer>;

} // namespace Tracing
} // namespace Envoy
29 changes: 29 additions & 0 deletions envoy/tracing/tracer_manager.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#pragma once

#include "envoy/config/trace/v3/http_tracer.pb.h"
#include "envoy/tracing/tracer.h"

namespace Envoy {
namespace Tracing {

/**
* An Tracer manager which ensures existence of at most one Tracer instance
* for a given configuration.
*/
class TracerManager {
public:
virtual ~TracerManager() = default;

/**
* Get an existing Tracer or create a new one for a given configuration.
* @param config supplies the configuration for the tracing provider.
* @return TracerSharedPtr.
*/
virtual TracerSharedPtr
getOrCreateTracer(const envoy::config::trace::v3::Tracing_Http* config) PURE;
};

using TracerManagerSharedPtr = std::shared_ptr<TracerManager>;

} // namespace Tracing
} // namespace Envoy
2 changes: 1 addition & 1 deletion source/common/access_log/access_log_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ FilterPtr FilterFactory::fromProto(const envoy::config::accesslog::v3::AccessLog
bool TraceableRequestFilter::evaluate(const StreamInfo::StreamInfo& info,
const Http::RequestHeaderMap&, const Http::ResponseHeaderMap&,
const Http::ResponseTrailerMap&) const {
const Tracing::Decision decision = Tracing::HttpTracerUtility::shouldTraceRequest(info);
const Tracing::Decision decision = Tracing::TracerUtility::shouldTraceRequest(info);
return decision.traced && decision.reason == Tracing::Reason::ServiceForced;
}

Expand Down
2 changes: 1 addition & 1 deletion source/common/http/conn_manager_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1186,7 +1186,7 @@ void ConnectionManagerImpl::ActiveStream::decodeHeaders(RequestHeaderMapPtr&& he

void ConnectionManagerImpl::ActiveStream::traceRequest() {
const Tracing::Decision tracing_decision =
Tracing::HttpTracerUtility::shouldTraceRequest(filter_manager_.streamInfo());
Tracing::TracerUtility::shouldTraceRequest(filter_manager_.streamInfo());
ConnectionManagerImpl::chargeTracingStats(tracing_decision.reason,
connection_manager_.config_.tracingStats());

Expand Down
43 changes: 23 additions & 20 deletions source/common/tracing/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -38,34 +38,37 @@ envoy_cc_library(
"http_tracer_impl.h",
],
deps = [
":common_values_lib",
":null_span_lib",
"//envoy/http:request_id_extension_interface",
"//envoy/local_info:local_info_interface",
"//envoy/runtime:runtime_interface",
"//envoy/thread_local:thread_local_interface",
":tracer_lib",
"//envoy/tracing:http_tracer_interface",
"//envoy/upstream:cluster_manager_interface",
"//source/common/buffer:zero_copy_input_stream_lib",
"//source/common/common:base64_lib",
"//source/common/common:macros",
"//source/common/common:utility_lib",
"//source/common/formatter:substitution_formatter_lib",
"//source/common/grpc:common_lib",
"//source/common/http:codes_lib",
"//source/common/http:header_map_lib",
"//source/common/http:headers_lib",
"//source/common/http:message_lib",
"//source/common/http:utility_lib",
"//source/common/json:json_loader_lib",
"//source/common/protobuf:utility_lib",
"//source/common/stream_info:utility_lib",
"@envoy_api//envoy/config/core/v3:pkg_cc_proto",
"@envoy_api//envoy/type/metadata/v3:pkg_cc_proto",
"@envoy_api//envoy/type/tracing/v3:pkg_cc_proto",
],
)

envoy_cc_library(
name = "tracer_lib",
srcs = [
"tracer_impl.cc",
],
hdrs = [
"tracer_impl.h",
],
deps = [
":common_values_lib",
":null_span_lib",
"//envoy/local_info:local_info_interface",
"//envoy/tracing:tracer_interface",
"//envoy/upstream:upstream_interface",
"//source/common/stream_info:utility_lib",
],
)

envoy_cc_library(
name = "tracer_config_lib",
hdrs = [
Expand All @@ -77,17 +80,17 @@ envoy_cc_library(
)

envoy_cc_library(
name = "http_tracer_manager_lib",
name = "tracer_manager_lib",
srcs = [
"http_tracer_manager_impl.cc",
"tracer_manager_impl.cc",
],
hdrs = [
"http_tracer_manager_impl.h",
"tracer_manager_impl.h",
],
deps = [
"//envoy/server:tracer_config_interface",
"//envoy/singleton:instance_interface",
"//envoy/tracing:http_tracer_manager_interface",
"//envoy/tracing:tracer_manager_interface",
"//source/common/common:minimal_logger_lib",
"//source/common/config:utility_lib",
"//source/common/tracing:http_tracer_lib",
Expand Down
57 changes: 0 additions & 57 deletions source/common/tracing/http_tracer_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#include "source/common/common/fmt.h"
#include "source/common/common/macros.h"
#include "source/common/common/utility.h"
#include "source/common/formatter/substitution_formatter.h"
#include "source/common/grpc/common.h"
#include "source/common/http/codes.h"
#include "source/common/http/header_map_impl.h"
Expand All @@ -37,37 +36,6 @@ static absl::string_view valueOrDefault(const Http::HeaderEntry* header,
return header ? header->value().getStringView() : default_value;
}

const std::string HttpTracerUtility::IngressOperation = "ingress";
const std::string HttpTracerUtility::EgressOperation = "egress";

const std::string& HttpTracerUtility::toString(OperationName operation_name) {
switch (operation_name) {
case OperationName::Ingress:
return IngressOperation;
case OperationName::Egress:
return EgressOperation;
}

return EMPTY_STRING; // Make the compiler happy.
}

Decision HttpTracerUtility::shouldTraceRequest(const StreamInfo::StreamInfo& stream_info) {
// Exclude health check requests immediately.
if (stream_info.healthCheck()) {
return {Reason::HealthCheck, false};
}

const Tracing::Reason trace_reason = stream_info.traceReason();
switch (trace_reason) {
case Reason::ClientForced:
case Reason::ServiceForced:
case Reason::Sampling:
return {trace_reason, true};
default:
return {trace_reason, false};
}
}

static void addTagIfNotNull(Span& span, const std::string& tag, const Http::HeaderEntry* entry) {
if (entry != nullptr) {
span.setTag(tag, entry->value().getStringView());
Expand Down Expand Up @@ -278,30 +246,5 @@ void HttpTracerUtility::setCommonTags(Span& span, const StreamInfo::StreamInfo&
}
}

HttpTracerImpl::HttpTracerImpl(DriverSharedPtr driver, const LocalInfo::LocalInfo& local_info)
: driver_(std::move(driver)), local_info_(local_info) {}

SpanPtr HttpTracerImpl::startSpan(const Config& config, Http::RequestHeaderMap& request_headers,
const StreamInfo::StreamInfo& stream_info,
const Tracing::Decision tracing_decision) {
std::string span_name = HttpTracerUtility::toString(config.operationName());

if (config.operationName() == OperationName::Egress) {
span_name.append(" ");
span_name.append(std::string(request_headers.getHostValue()));
}

SpanPtr active_span = driver_->startSpan(config, request_headers, span_name,
stream_info.startTime(), tracing_decision);

// Set tags related to the local environment
if (active_span) {
active_span->setTag(Tracing::Tags::get().NodeId, local_info_.nodeName());
active_span->setTag(Tracing::Tags::get().Zone, local_info_.zoneName());
}

return active_span;
}

} // namespace Tracing
} // namespace Envoy
Loading