Skip to content

Commit 1c02927

Browse files
committed
Address PR comments
1 parent eb8b87b commit 1c02927

29 files changed

+176
-222
lines changed

appsec/src/extension/commands_helpers.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -749,10 +749,9 @@ void _handle_telemetry_metric(const char *nonnull key_str, size_t key_len,
749749
{
750750
#define HANDLE_METRIC(name, type) \
751751
do { \
752-
if (key_len == sizeof(name "") - 1 && \
753-
memcmp(key_str, name, key_len) == 0) { \
752+
if (key_len == LSTRLEN(name) && memcmp(key_str, name, key_len) == 0) { \
754753
static zend_string *_Atomic key_zstr; \
755-
_init_zstr(&key_zstr, name, sizeof(name) - 1); \
754+
_init_zstr(&key_zstr, name, LSTRLEN(name)); \
756755
zend_string *tags_zstr = zend_string_init(tags_str, tags_len, 1); \
757756
ddtrace_metric_register_buffer( \
758757
key_zstr, type, DDTRACE_METRIC_NAMESPACE_APPSEC); \

appsec/src/extension/request_abort.c

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
#include "compatibility.h"
1313
#include "configuration.h"
1414
#include "ddappsec.h"
15-
#include "dddefs.h"
1615
#include "ddtrace.h"
1716
#include "logging.h"
1817
#include "php_compat.h"

appsec/src/helper/.clang-tidy

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Checks: 'readability-identifier-naming'
2+
3+
CheckOptions:
4+
- key: readability-identifier-naming.StructCase
5+
value: lower_case
6+
- key: readability-identifier-naming.StructPrefix
7+
value: ''
8+
- key: readability-identifier-naming.ClassCase
9+
value: lower_case
10+
- key: readability-identifier-naming.ClassPrefix
11+
value: ''
12+
13+
InheritParentConfig: true

appsec/src/helper/client.cpp

+18-19
Original file line numberDiff line numberDiff line change
@@ -497,14 +497,14 @@ void client::run(worker::queue_consumer &q)
497497

498498
namespace {
499499

500-
struct RequestMetricsSubmitter : public metrics::TelemetrySubmitter {
501-
RequestMetricsSubmitter() = default;
502-
~RequestMetricsSubmitter() override = default;
503-
RequestMetricsSubmitter(const RequestMetricsSubmitter &) = delete;
504-
RequestMetricsSubmitter &operator=(
505-
const RequestMetricsSubmitter &) = delete;
506-
RequestMetricsSubmitter(RequestMetricsSubmitter &&) = delete;
507-
RequestMetricsSubmitter &operator=(RequestMetricsSubmitter &&) = delete;
500+
struct request_metrics_submitter : public metrics::telemetry_submitter {
501+
request_metrics_submitter() = default;
502+
~request_metrics_submitter() override = default;
503+
request_metrics_submitter(const request_metrics_submitter &) = delete;
504+
request_metrics_submitter &operator=(
505+
const request_metrics_submitter &) = delete;
506+
request_metrics_submitter(request_metrics_submitter &&) = delete;
507+
request_metrics_submitter &operator=(request_metrics_submitter &&) = delete;
508508

509509
void submit_metric(
510510
std::string_view name, double value, std::string tags) override
@@ -513,37 +513,36 @@ struct RequestMetricsSubmitter : public metrics::TelemetrySubmitter {
513513
value, tags);
514514
tel_metrics[name].emplace_back(value, tags);
515515
};
516-
void submit_legacy_metric(std::string_view name, double value) override
516+
void submit_span_metric(std::string_view name, double value) override
517517
{
518518
SPDLOG_TRACE(
519-
"submit_legacy_metric [req]: name={}, value={}", name, value);
519+
"submit_span_metric [req]: name={}, value={}", name, value);
520520
metrics[name] = value;
521521
};
522-
void submit_legacy_meta(std::string_view name, std::string value) override
522+
void submit_span_meta(std::string_view name, std::string value) override
523523
{
524-
SPDLOG_TRACE(
525-
"submit_legacy_meta [req]: name={}, value={}", name, value);
524+
SPDLOG_TRACE("submit_span_meta [req]: name={}, value={}", name, value);
526525
meta[std::string{name}] = value;
527526
};
528-
void submit_legacy_meta_copy_key(
529-
std::string name, std::string value) override
527+
void submit_span_meta_copy_key(std::string name, std::string value) override
530528
{
531-
SPDLOG_TRACE("submit_legacy_meta_copy_key [req]: name={}, value={}",
532-
name, value);
529+
SPDLOG_TRACE(
530+
"submit_span_meta_copy_key [req]: name={}, value={}", name, value);
533531
meta[name] = value;
534532
}
535533

536534
std::map<std::string, std::string> meta;
537535
std::map<std::string_view, double> metrics;
538-
std::map<std::string_view, std::vector<std::pair<double, std::string>>>
536+
std::unordered_map<std::string_view,
537+
std::vector<std::pair<double, std::string>>>
539538
tel_metrics;
540539
};
541540

542541
template <typename Response>
543542
void collect_metrics_impl(Response &response, service &service,
544543
std::optional<engine::context> &context)
545544
{
546-
RequestMetricsSubmitter msubmitter{};
545+
request_metrics_submitter msubmitter{};
547546
if (context) {
548547
context->get_metrics(msubmitter);
549548
}

appsec/src/helper/engine.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ void engine::subscribe(std::unique_ptr<subscriber> sub)
2525
}
2626

2727
void engine::update(
28-
engine_ruleset &ruleset, metrics::TelemetrySubmitter &submit_metric)
28+
engine_ruleset &ruleset, metrics::telemetry_submitter &submit_metric)
2929
{
3030
std::vector<std::unique_ptr<subscriber>> new_subscribers;
3131
auto old_common =
@@ -114,7 +114,7 @@ std::optional<engine::result> engine::context::publish(parameter &&param)
114114
return res;
115115
}
116116

117-
void engine::context::get_metrics(metrics::TelemetrySubmitter &msubmitter)
117+
void engine::context::get_metrics(metrics::telemetry_submitter &msubmitter)
118118
{
119119
for (const auto &[subscriber, listener] : listeners_) {
120120
listener->submit_metrics(msubmitter);
@@ -123,7 +123,7 @@ void engine::context::get_metrics(metrics::TelemetrySubmitter &msubmitter)
123123

124124
std::unique_ptr<engine> engine::from_settings(
125125
const dds::engine_settings &eng_settings,
126-
metrics::TelemetrySubmitter &msubmitter)
126+
metrics::telemetry_submitter &msubmitter)
127127
{
128128
auto &&rules_path = eng_settings.rules_file_or_default();
129129
auto ruleset = engine_ruleset::from_path(rules_path);

appsec/src/helper/engine.hpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class engine {
6868

6969
std::optional<result> publish(parameter &&param);
7070
// NOLINTNEXTLINE(google-runtime-references)
71-
void get_metrics(metrics::TelemetrySubmitter &msubmitter);
71+
void get_metrics(metrics::telemetry_submitter &msubmitter);
7272

7373
protected:
7474
std::shared_ptr<shared_state> common_;
@@ -87,7 +87,7 @@ class engine {
8787

8888
static std::unique_ptr<engine> from_settings(
8989
const dds::engine_settings &eng_settings,
90-
metrics::TelemetrySubmitter &msubmitter);
90+
metrics::telemetry_submitter &msubmitter);
9191

9292
static auto create(
9393
uint32_t trace_rate_limit = engine_settings::default_trace_rate_limit)
@@ -103,7 +103,7 @@ class engine {
103103
// Should not be called concurrently but safely publishes changes to common_
104104
// the rc client has a lock that ensures this
105105
virtual void update(
106-
engine_ruleset &ruleset, metrics::TelemetrySubmitter &submit_metric);
106+
engine_ruleset &ruleset, metrics::telemetry_submitter &submit_metric);
107107

108108
protected:
109109
explicit engine(uint32_t trace_rate_limit)
@@ -114,7 +114,7 @@ class engine {
114114
// should use only atomic operations (pre-c++20
115115
// std::atomic<std::shared_ptr>)
116116
std::shared_ptr<shared_state> common_;
117-
std::shared_ptr<metrics::TelemetrySubmitter> msubmitter_;
117+
std::shared_ptr<metrics::telemetry_submitter> msubmitter_;
118118
rate_limiter<dds::timer> limiter_;
119119
};
120120

appsec/src/helper/metrics.cpp

-11
This file was deleted.

appsec/src/helper/metrics.hpp

+14-14
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,28 @@
66

77
#pragma once
88

9-
#include <functional>
109
#include <string>
1110
#include <string_view>
1211

1312
namespace dds::metrics {
1413

15-
struct TelemetrySubmitter {
16-
TelemetrySubmitter() = default;
17-
TelemetrySubmitter(const TelemetrySubmitter &) = delete;
18-
TelemetrySubmitter &operator=(const TelemetrySubmitter &) = delete;
19-
TelemetrySubmitter(TelemetrySubmitter &&) = delete;
20-
TelemetrySubmitter &operator=(TelemetrySubmitter &&) = delete;
14+
struct telemetry_submitter {
15+
telemetry_submitter() = default;
16+
telemetry_submitter(const telemetry_submitter &) = delete;
17+
telemetry_submitter &operator=(const telemetry_submitter &) = delete;
18+
telemetry_submitter(telemetry_submitter &&) = delete;
19+
telemetry_submitter &operator=(telemetry_submitter &&) = delete;
2120

22-
virtual ~TelemetrySubmitter() = 0;
21+
virtual ~telemetry_submitter() = 0;
22+
// first arguments of type string_view should have static storage
2323
virtual void submit_metric(std::string_view, double, std::string) = 0;
24-
virtual void submit_legacy_metric(std::string_view, double) = 0;
25-
virtual void submit_legacy_meta(std::string_view, std::string) = 0;
26-
virtual void submit_legacy_meta_copy_key(std::string, std::string) = 0;
24+
virtual void submit_span_metric(std::string_view, double) = 0;
25+
virtual void submit_span_meta(std::string_view, std::string) = 0;
26+
void submit_span_meta(std::string, std::string) = delete;
27+
virtual void submit_span_meta_copy_key(std::string, std::string) = 0;
28+
void submit_span_meta_copy_key(std::string_view, std::string) = delete;
2729
};
30+
inline telemetry_submitter::~telemetry_submitter() = default;
2831

2932
constexpr std::string_view waf_init = "waf.init";
3033
constexpr std::string_view waf_updates = "waf.updates";
@@ -38,9 +41,6 @@ constexpr std::string_view waf_truncated_value_size =
3841
constexpr std::string_view waf_duration_tel = "waf.duration";
3942
constexpr std::string_view waf_duration_ext = "waf.duration_ext";
4043

41-
constexpr std::string_view rc_first_pull = "remote_config.first_pull";
42-
constexpr std::string_view rc_last_success = "remote_config.last_success";
43-
4444
// not implemented (difficult to count requests on the helper)
4545
constexpr std::string_view rc_requests_before_running =
4646
"remote_config.requests_before_running";

appsec/src/helper/network/acceptor.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
// This product includes software developed at Datadog
55
// (https://www.datadoghq.com/). Copyright 2021 Datadog, Inc.
66
#include "acceptor.hpp"
7-
#include "../exception.hpp"
87
#include "socket.hpp"
98
#include <cerrno>
109
#include <chrono>

appsec/src/helper/network/broker.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include "../exception.hpp"
88
#include "proto.hpp"
99
#include <chrono>
10-
#include <iostream>
1110
#include <msgpack.hpp>
1211
#include <spdlog/spdlog.h>
1312
#include <sstream>

appsec/src/helper/network/proto.hpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ struct client_init {
130130

131131
std::map<std::string, std::string> meta;
132132
std::map<std::string_view, double> metrics;
133-
std::map<std::string_view, std::vector<std::pair<double, std::string>>>
133+
std::unordered_map<std::string_view,
134+
std::vector<std::pair<double, std::string>>>
134135
tel_metrics;
135136

136137
MSGPACK_DEFINE(status, version, errors, meta, metrics, tel_metrics);
@@ -291,7 +292,8 @@ struct request_shutdown {
291292

292293
std::map<std::string, std::string> meta;
293294
std::map<std::string_view, double> metrics;
294-
std::map<std::string_view, std::vector<std::pair<double, std::string>>>
295+
std::unordered_map<std::string_view,
296+
std::vector<std::pair<double, std::string>>>
295297
tel_metrics;
296298

297299
MSGPACK_DEFINE(

appsec/src/helper/remote_config/client.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44
// This product includes software developed at Datadog
55
// (https://www.datadoghq.com/). Copyright 2021 Datadog, Inc.
66
#include "client.hpp"
7-
#include "exception.hpp"
87
#include "product.hpp"
9-
#include <algorithm>
10-
#include <regex>
118
#include <set>
129
#include <spdlog/spdlog.h>
1310
#include <stdexcept>
@@ -18,7 +15,7 @@ extern "C" {
1815
}
1916

2017
namespace {
21-
struct ddog_CharSlice {
18+
struct ddog_CharSlice { // NOLINT(readability-identifier-naming)
2219
const char *ptr;
2320
uintptr_t len;
2421
};

appsec/src/helper/remote_config/client_handler.cpp

+3-24
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ static constexpr std::chrono::milliseconds default_max_interval = 5min;
1919

2020
client_handler::client_handler(std::unique_ptr<client> &&rc_client,
2121
std::shared_ptr<service_config> service_config,
22-
std::shared_ptr<metrics::TelemetrySubmitter> msubmitter)
22+
std::shared_ptr<metrics::telemetry_submitter> msubmitter)
2323
: rc_client_{std::move(rc_client)},
2424
service_config_{std::move(service_config)},
2525
msubmitter_{std::move(msubmitter)}
@@ -30,7 +30,7 @@ std::unique_ptr<client_handler> client_handler::from_settings(
3030
std::shared_ptr<dds::service_config> service_config,
3131
const remote_config::settings &rc_settings,
3232
const std::shared_ptr<engine> &engine_ptr,
33-
std::shared_ptr<metrics::TelemetrySubmitter> msubmitter,
33+
std::shared_ptr<metrics::telemetry_submitter> msubmitter,
3434
bool dynamic_enablement)
3535
{
3636
if (!rc_settings.enabled) {
@@ -73,28 +73,7 @@ void client_handler::poll()
7373
const std::lock_guard lock{mutex_};
7474

7575
try {
76-
if (last_success_ != empty_time) {
77-
auto now = std::chrono::steady_clock::now();
78-
auto elapsed =
79-
std::chrono::duration_cast<std::chrono::milliseconds>(
80-
now - last_success_);
81-
msubmitter_->submit_metric(metrics::rc_last_success,
82-
static_cast<double>(elapsed.count()), {});
83-
}
84-
85-
const bool result = rc_client_->poll();
86-
87-
auto now = std::chrono::steady_clock::now();
88-
last_success_ = now;
89-
90-
if (result && creation_time_ != empty_time) {
91-
auto elapsed =
92-
std::chrono::duration_cast<std::chrono::milliseconds>(
93-
now - creation_time_);
94-
msubmitter_->submit_metric(metrics::rc_first_pull,
95-
static_cast<double>(elapsed.count()), {});
96-
creation_time_ = empty_time;
97-
}
76+
rc_client_->poll();
9877
} catch (const std::exception &e) {
9978
SPDLOG_WARN("Error polling remote config: {}", e.what());
10079
}

appsec/src/helper/remote_config/client_handler.hpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class client_handler {
2121
public:
2222
client_handler(std::unique_ptr<remote_config::client> &&rc_client,
2323
std::shared_ptr<service_config> service_config,
24-
std::shared_ptr<metrics::TelemetrySubmitter> msubmitter);
24+
std::shared_ptr<metrics::telemetry_submitter> msubmitter);
2525
~client_handler() = default;
2626

2727
client_handler(const client_handler &) = delete;
@@ -35,7 +35,7 @@ class client_handler {
3535
std::shared_ptr<dds::service_config> service_config,
3636
const remote_config::settings &rc_settings,
3737
const std::shared_ptr<engine> &engine_ptr,
38-
std::shared_ptr<metrics::TelemetrySubmitter> msubmitter,
38+
std::shared_ptr<metrics::telemetry_submitter> msubmitter,
3939
bool dynamic_enablement);
4040

4141
void poll();
@@ -51,12 +51,11 @@ class client_handler {
5151

5252
std::shared_ptr<service_config> service_config_;
5353
std::unique_ptr<remote_config::client> rc_client_;
54-
std::shared_ptr<metrics::TelemetrySubmitter> msubmitter_;
54+
std::shared_ptr<metrics::telemetry_submitter> msubmitter_;
5555

5656
std::mutex mutex_{};
5757
std::chrono::steady_clock::time_point creation_time_{
5858
std::chrono::steady_clock::now()}; // def value after first poll() done
59-
std::chrono::steady_clock::time_point last_success_{};
6059
};
6160

6261
} // namespace dds::remote_config

appsec/src/helper/remote_config/listeners/engine_listener.cpp

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,20 @@
44
// This product includes software developed at Datadog
55
// (https://www.datadoghq.com/). Copyright 2021 Datadog, Inc.
66
#include "engine_listener.hpp"
7-
#include "../../json_helper.hpp"
87
#include "../exception.hpp"
98
#include "../product.hpp"
109
#include "config_aggregators/asm_aggregator.hpp"
1110
#include "config_aggregators/asm_data_aggregator.hpp"
1211
#include "config_aggregators/asm_dd_aggregator.hpp"
13-
#include <optional>
1412
#include <rapidjson/document.h>
1513
#include <rapidjson/rapidjson.h>
1614
#include <spdlog/spdlog.h>
17-
#include <type_traits>
1815
#include <utility>
1916

2017
namespace dds::remote_config {
2118

2219
engine_listener::engine_listener(std::shared_ptr<engine> engine,
23-
std::shared_ptr<dds::metrics::TelemetrySubmitter> msubmitter,
20+
std::shared_ptr<dds::metrics::telemetry_submitter> msubmitter,
2421
const std::string &rules_file)
2522
: engine_{std::move(engine)}, msubmitter_{std::move(msubmitter)}
2623
{

0 commit comments

Comments
 (0)