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
9 changes: 9 additions & 0 deletions BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ cc_library(
"src/datadog/msgpack.cpp",
"src/datadog/net_util.cpp",
"src/datadog/null_collector.cpp",
"src/datadog/optional.cpp",
"src/datadog/parse_util.cpp",
"src/datadog/propagation_styles.cpp",
"src/datadog/rate.cpp",
Expand All @@ -38,6 +39,7 @@ cc_library(
"src/datadog/span_matcher.cpp",
"src/datadog/span_sampler_config.cpp",
"src/datadog/span_sampler.cpp",
"src/datadog/string_view.cpp",
"src/datadog/tag_propagation.cpp",
"src/datadog/tags.cpp",
"src/datadog/threaded_event_scheduler.cpp",
Expand Down Expand Up @@ -73,6 +75,7 @@ cc_library(
"src/datadog/msgpack.h",
"src/datadog/net_util.h",
"src/datadog/null_collector.h",
"src/datadog/optional.h",
"src/datadog/parse_util.h",
"src/datadog/propagation_styles.h",
"src/datadog/rate.h",
Expand All @@ -87,6 +90,7 @@ cc_library(
"src/datadog/span_matcher.h",
"src/datadog/span_sampler_config.h",
"src/datadog/span_sampler.h",
"src/datadog/string_view.h",
"src/datadog/tag_propagation.h",
"src/datadog/tags.h",
"src/datadog/threaded_event_scheduler.h",
Expand All @@ -103,7 +107,12 @@ cc_library(
"-Werror",
"-pedantic",
"-std=c++17",
"-DDD_USE_ABSEIL_FOR_ENVOY",
],
strip_include_prefix = "src/",
visibility = ["//visibility:public"],
deps = [
"@com_google_absl//absl/strings",
"@com_google_absl//absl/types:optional",
],
)
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ target_sources(dd_trace_cpp PRIVATE
src/datadog/msgpack.cpp
src/datadog/net_util.cpp
src/datadog/null_collector.cpp
src/datadog/optional.cpp
src/datadog/parse_util.cpp
src/datadog/propagation_styles.cpp
src/datadog/rate.cpp
Expand All @@ -90,6 +91,7 @@ target_sources(dd_trace_cpp PRIVATE
src/datadog/span_matcher.cpp
src/datadog/span_sampler_config.cpp
src/datadog/span_sampler.cpp
src/datadog/string_view.cpp
src/datadog/tag_propagation.cpp
src/datadog/tags.cpp
src/datadog/threaded_event_scheduler.cpp
Expand Down Expand Up @@ -131,6 +133,7 @@ target_sources(dd_trace_cpp PUBLIC
src/datadog/msgpack.h
src/datadog/net_util.h
src/datadog/null_collector.h
src/datadog/optional.h
src/datadog/parse_util.h
src/datadog/propagation_styles.h
src/datadog/rate.h
Expand All @@ -145,6 +148,7 @@ target_sources(dd_trace_cpp PUBLIC
src/datadog/span_matcher.h
src/datadog/span_sampler_config.h
src/datadog/span_sampler.h
src/datadog/string_view.h
src/datadog/tag_propagation.h
src/datadog/tags.h
src/datadog/threaded_event_scheduler.h
Expand Down
27 changes: 27 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# The Bazel build is primarily for use by Envoy.
#
# Envoy forbids use of std::string_view and std::optional, preferring use of
# Abseil's absl::string_view and absl::optional instead.
#
# In the context of an Envoy build, the Abseil libraries point to whatever
# versions Envoy uses.
#
# To test this library's Bazel build independent of Envoy, we need to specify
# versions of the Abseil libraries. That is what this file is for.

# These rules are based on <https://abseil.io/docs/cpp/quickstart>,
# accessed December 6, 2022.
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
name = "com_google_absl",
urls = ["https://github.com/abseil/abseil-cpp/archive/98eb410c93ad059f9bba1bf43f5bb916fc92a5ea.zip"],
sha256 = "aabf6c57e3834f8dc3873a927f37eaf69975d4b28117fc7427dfb1c661542a87",
strip_prefix = "abseil-cpp-98eb410c93ad059f9bba1bf43f5bb916fc92a5ea",
)

http_archive(
name = "bazel_skylib",
urls = ["https://github.com/bazelbuild/bazel-skylib/releases/download/1.2.1/bazel-skylib-1.2.1.tar.gz"],
sha256 = "f7be3474d42aae265405a592bb7da8e171919d74c16f082a5457840f06054728",
)
Empty file removed WORKSPACE.bazel
Empty file.
2 changes: 1 addition & 1 deletion src/datadog/collector.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
// `response_handler` parameter to `Collector::send`.

#include <memory>
#include <optional>
#include <vector>

#include "expected.h"
#include "json_fwd.hpp"
#include "optional.h"

namespace datadog {
namespace tracing {
Expand Down
3 changes: 1 addition & 2 deletions src/datadog/collector_response.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@
namespace datadog {
namespace tracing {

std::string CollectorResponse::key(std::string_view service,
std::string_view environment) {
std::string CollectorResponse::key(StringView service, StringView environment) {
std::string result;
result += "service:";
result += service;
Expand Down
5 changes: 2 additions & 3 deletions src/datadog/collector_response.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,16 @@
// information.

#include <string>
#include <string_view>
#include <unordered_map>

#include "rate.h"
#include "string_view.h"

namespace datadog {
namespace tracing {

struct CollectorResponse {
static std::string key(std::string_view service,
std::string_view environment);
static std::string key(StringView service, StringView environment);
static const std::string key_of_default_rate;
std::unordered_map<std::string, Rate> sample_rate_by_key;
};
Expand Down
22 changes: 10 additions & 12 deletions src/datadog/curl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
#include <list>
#include <memory>
#include <mutex>
#include <string_view>
#include <thread>
#include <unordered_map>
#include <unordered_set>
Expand All @@ -22,6 +21,7 @@
#include "json.hpp"
#include "logger.h"
#include "parse_util.h"
#include "string_view.h"

namespace datadog {
namespace tracing {
Expand Down Expand Up @@ -61,7 +61,7 @@ class CurlImpl {
public:
~HeaderWriter();
curl_slist *release();
void set(std::string_view key, std::string_view value) override;
void set(StringView key, StringView value) override;
};

class HeaderReader : public DictReader {
Expand All @@ -71,10 +71,9 @@ class CurlImpl {
public:
explicit HeaderReader(
std::unordered_map<std::string, std::string> *response_headers_lower);
std::optional<std::string_view> lookup(std::string_view key) const override;
void visit(
const std::function<void(std::string_view key, std::string_view value)>
&visitor) const override;
Optional<StringView> lookup(StringView key) const override;
void visit(const std::function<void(StringView key, StringView value)>
&visitor) const override;
};

void run();
Expand All @@ -88,7 +87,7 @@ class CurlImpl {
void *user_data);
static bool is_non_whitespace(unsigned char);
static char to_lower(unsigned char);
static std::string_view trim(std::string_view);
static StringView trim(StringView);

public:
explicit CurlImpl(const std::shared_ptr<Logger> &logger);
Expand Down Expand Up @@ -426,7 +425,7 @@ curl_slist *CurlImpl::HeaderWriter::release() {
return list;
}

void CurlImpl::HeaderWriter::set(std::string_view key, std::string_view value) {
void CurlImpl::HeaderWriter::set(StringView key, StringView value) {
buffer_.clear();
buffer_ += key;
buffer_ += ": ";
Expand All @@ -439,8 +438,7 @@ CurlImpl::HeaderReader::HeaderReader(
std::unordered_map<std::string, std::string> *response_headers_lower)
: response_headers_lower_(response_headers_lower) {}

std::optional<std::string_view> CurlImpl::HeaderReader::lookup(
std::string_view key) const {
Optional<StringView> CurlImpl::HeaderReader::lookup(StringView key) const {
buffer_.clear();
std::transform(key.begin(), key.end(), std::back_inserter(buffer_),
&to_lower);
Expand All @@ -453,8 +451,8 @@ std::optional<std::string_view> CurlImpl::HeaderReader::lookup(
}

void CurlImpl::HeaderReader::visit(
const std::function<void(std::string_view key, std::string_view value)>
&visitor) const {
const std::function<void(StringView key, StringView value)> &visitor)
const {
for (const auto &[key, value] : *response_headers_lower_) {
visitor(key, value);
}
Expand Down
8 changes: 4 additions & 4 deletions src/datadog/datadog_agent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ namespace datadog {
namespace tracing {
namespace {

const std::string_view traces_api_path = "/v0.4/traces";
const StringView traces_api_path = "/v0.4/traces";

HTTPClient::URL traces_endpoint(const HTTPClient::URL& agent_url) {
auto traces_url = agent_url;
Expand Down Expand Up @@ -49,10 +49,10 @@ Expected<void> msgpack_encode(
}

std::variant<CollectorResponse, std::string> parse_agent_traces_response(
std::string_view body) try {
StringView body) try {
nlohmann::json response = nlohmann::json::parse(body);

std::string_view type = response.type_name();
StringView type = response.type_name();
if (type != "object") {
std::string message;
message +=
Expand All @@ -66,7 +66,7 @@ std::variant<CollectorResponse, std::string> parse_agent_traces_response(
return message;
}

const std::string_view sample_rates_property = "rate_by_service";
const StringView sample_rates_property = "rate_by_service";
const auto found = response.find(sample_rates_property);
if (found == response.end()) {
return CollectorResponse{};
Expand Down
12 changes: 6 additions & 6 deletions src/datadog/datadog_agent_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
namespace datadog {
namespace tracing {

Expected<HTTPClient::URL> DatadogAgentConfig::parse(std::string_view input) {
const std::string_view separator = "://";
Expected<HTTPClient::URL> DatadogAgentConfig::parse(StringView input) {
const StringView separator = "://";
const auto after_scheme = std::search(input.begin(), input.end(),
separator.begin(), separator.end());
if (after_scheme == input.end()) {
Expand All @@ -23,9 +23,9 @@ Expected<HTTPClient::URL> DatadogAgentConfig::parse(std::string_view input) {
return Error{Error::URL_MISSING_SEPARATOR, std::move(message)};
}

const std::string_view scheme = range(input.begin(), after_scheme);
const std::string_view supported[] = {"http", "https", "unix", "http+unix",
"https+unix"};
const StringView scheme = range(input.begin(), after_scheme);
const StringView supported[] = {"http", "https", "unix", "http+unix",
"https+unix"};
const auto found =
std::find(std::begin(supported), std::end(supported), scheme);
if (found == std::end(supported)) {
Expand All @@ -42,7 +42,7 @@ Expected<HTTPClient::URL> DatadogAgentConfig::parse(std::string_view input) {
return Error{Error::URL_UNSUPPORTED_SCHEME, std::move(message)};
}

const std::string_view authority_and_path =
const StringView authority_and_path =
range(after_scheme + separator.size(), input.end());
// If the scheme is for unix domain sockets, then there's no way to
// distinguish the path-to-socket from the path-to-resource. Some
Expand Down
4 changes: 2 additions & 2 deletions src/datadog/datadog_agent_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
#include <chrono>
#include <memory>
#include <string>
#include <string_view>
#include <variant>

#include "expected.h"
#include "http_client.h"
#include "string_view.h"

namespace datadog {
namespace tracing {
Expand Down Expand Up @@ -50,7 +50,7 @@ struct DatadogAgentConfig {
// How often, in milliseconds, to send batches of traces to the Datadog Agent.
int flush_interval_milliseconds = 2000;

static Expected<HTTPClient::URL> parse(std::string_view);
static Expected<HTTPClient::URL> parse(StringView);
};

class FinalizedDatadogAgentConfig {
Expand Down
12 changes: 6 additions & 6 deletions src/datadog/dict_reader.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
// context from externalized formats: HTTP headers, gRPC metadata, etc.

#include <functional>
#include <optional>
#include <string_view>

#include "optional.h"
#include "string_view.h"

namespace datadog {
namespace tracing {
Expand All @@ -17,13 +18,12 @@ class DictReader {

// Return the value at the specified `key`, or return `std::nullopt` if there
// is no value at `key`.
virtual std::optional<std::string_view> lookup(
std::string_view key) const = 0;
virtual Optional<StringView> lookup(StringView key) const = 0;

// Invoke the specified `visitor` once for each key/value pair in this object.
virtual void visit(
const std::function<void(std::string_view key, std::string_view value)>&
visitor) const = 0;
const std::function<void(StringView key, StringView value)>& visitor)
const = 0;
};

} // namespace tracing
Expand Down
4 changes: 2 additions & 2 deletions src/datadog/dict_writer.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// permitted to result from repeated invocations of `DictWriter::set` with the
// same key.

#include <string_view>
#include "string_view.h"

namespace datadog {
namespace tracing {
Expand All @@ -20,7 +20,7 @@ class DictWriter {
// Associate the specified `value` with the specified `key`. An
// implementation may, but is not required to, overwrite any previous value at
// `key`.
virtual void set(std::string_view key, std::string_view value) = 0;
virtual void set(StringView key, StringView value) = 0;
};

} // namespace tracing
Expand Down
6 changes: 3 additions & 3 deletions src/datadog/environment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ namespace datadog {
namespace tracing {
namespace environment {

std::string_view name(Variable variable) { return variable_names[variable]; }
StringView name(Variable variable) { return variable_names[variable]; }

std::optional<std::string_view> lookup(Variable variable) {
Optional<StringView> lookup(Variable variable) {
const char *name = variable_names[variable];
const char *value = std::getenv(name);
if (!value) {
return std::nullopt;
}
return std::string_view{value};
return StringView{value};
}

nlohmann::json to_json() {
Expand Down
Loading