Skip to content

Commit e1360ac

Browse files
committed
Update libdatadog; fix two bugs
1 parent 6c240c5 commit e1360ac

File tree

9 files changed

+117
-47
lines changed

9 files changed

+117
-47
lines changed

.gitlab/generate-appsec.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
after_script:
146146
- mkdir -p "${CI_PROJECT_DIR}/artifacts"
147147
- find appsec/tests/integration/build/test-results -name "*.xml" -exec cp --parents '{}' "${CI_PROJECT_DIR}/artifacts/" \;
148+
- cp -r appsec/tests/integration/build/test-logs "${CI_PROJECT_DIR}/artifacts/" 2>/dev/null || true
148149
- .gitlab/upload-junit-to-datadog.sh "test.source.file:appsec"
149150
artifacts:
150151
reports:

Cargo.lock

Lines changed: 25 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

appsec/src/helper/service.cpp

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,9 @@ void service::metrics_impl::submit_log(const sidecar_settings &sc_settings,
162162
SPDLOG_INFO("Failed to enqueue telemetry log, error: {}",
163163
std::string_view{error_msg.ptr, error_msg.len});
164164
fn_ddog_Error_drop(&result.some);
165-
return;
165+
} else {
166+
SPDLOG_DEBUG("Sent telemetry log via sidecar-ffi: {}: {}",
167+
log.identifier, log.message);
166168
}
167169
}
168170

@@ -189,6 +191,9 @@ void service::metrics_impl::register_metric_ffi(
189191
SPDLOG_INFO("Failed to register telemetry metric, error: {}",
190192
std::string_view{error_msg.ptr, error_msg.len});
191193
fn_ddog_Error_drop(&result.some);
194+
} else {
195+
SPDLOG_DEBUG(
196+
"Sent telemetry metric via sidecar-ffi: {} of type {}", name, type);
192197
}
193198
}
194199

@@ -222,14 +227,32 @@ void service::metrics_impl::submit_metric_ffi(
222227
SPDLOG_INFO("Failed to enqueue telemetry point, error: {}",
223228
std::string_view{error_msg.ptr, error_msg.len});
224229
fn_ddog_Error_drop(&result.some);
230+
} else {
231+
SPDLOG_DEBUG("Sent telemetry point via sidecar-ffi: {} of value {}",
232+
name, value);
225233
}
226234
}
227235

228236
void service::register_known_metrics(const sidecar_settings &sc_settings,
229237
const telemetry_settings &telemetry_settings)
230238
{
239+
static constexpr std::chrono::minutes kRegisterInterval = 25min;
240+
// register known metrics every 25 minutes
241+
// libdatadog has a cleanup task that deletes TelemetryCachedClients
242+
// if they are 30 minutes without being used
243+
auto registered = metrics_registered_at_.load(std::memory_order_relaxed);
244+
auto now = std::chrono::steady_clock::now();
245+
if (registered + kRegisterInterval > now) {
246+
return;
247+
}
248+
if (!metrics_registered_at_.compare_exchange_strong(
249+
registered, now, std::memory_order_relaxed)) {
250+
SPDLOG_DEBUG("Metrics concurrent registration attempt");
251+
return;
252+
}
253+
231254
for (auto &&metric : metrics::known_metrics) {
232-
msubmitter_->register_metric_ffi(
255+
metrics_impl::register_metric_ffi(
233256
sc_settings, telemetry_settings, metric.name, metric.type);
234257
}
235258
}
@@ -241,7 +264,7 @@ void service::handle_worker_count_metrics(const sidecar_settings &sc_settings)
241264
return;
242265
}
243266

244-
msubmitter_->submit_metric_ffi(sc_settings, telemetry_settings_,
267+
metrics_impl::submit_metric_ffi(sc_settings, telemetry_settings_,
245268
metrics::helper_worker_count, static_cast<double>(cur_st.count),
246269
std::nullopt);
247270

appsec/src/helper/service.hpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -261,11 +261,7 @@ class service {
261261

262262
void drain_metrics(const sidecar_settings &sc_settings)
263263
{
264-
auto registered = metrics_registered_.load(std::memory_order_relaxed);
265-
if (!registered && metrics_registered_.compare_exchange_strong(
266-
registered, true, std::memory_order_relaxed)) {
267-
register_known_metrics(sc_settings, telemetry_settings_);
268-
}
264+
register_known_metrics(sc_settings, telemetry_settings_);
269265

270266
msubmitter_->drain_metrics(sc_settings, telemetry_settings_);
271267
}
@@ -274,8 +270,7 @@ class service {
274270
{
275271
msubmitter_->drain_logs(sc_settings, telemetry_settings_);
276272

277-
// take this opportunity to submit internal worker count metrics too
278-
// this could be done at any other time when sc_settings is available
273+
register_known_metrics(sc_settings, telemetry_settings_);
279274
handle_worker_count_metrics(sc_settings);
280275
}
281276

@@ -337,7 +332,8 @@ class service {
337332
std::optional<sampler> schema_sampler_;
338333
std::string rc_path_;
339334
telemetry_settings telemetry_settings_;
340-
std::atomic<bool> metrics_registered_;
335+
std::atomic<std::chrono::time_point<std::chrono::steady_clock>>
336+
metrics_registered_at_;
341337
std::shared_ptr<metrics_impl> msubmitter_;
342338

343339
struct num_workers_t {

appsec/tests/integration/build.gradle

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,10 @@ dependencies {
3636
implementation 'org.msgpack:msgpack-core:0.9.9'
3737
implementation 'io.javalin:javalin:6.7.0'
3838

39-
implementation platform('org.testcontainers:testcontainers-bom:1.21.3')
40-
implementation 'org.testcontainers:mysql'
41-
implementation "org.testcontainers:junit-jupiter"
39+
implementation platform('org.testcontainers:testcontainers-bom:2.0.3')
40+
implementation 'org.testcontainers:testcontainers-mysql'
41+
implementation "org.testcontainers:testcontainers-junit-jupiter"
42+
implementation 'org.hamcrest:hamcrest:2.2'
4243
implementation 'com.flipkart.zjsonpatch:zjsonpatch:0.4.16'
4344
implementation 'org.junit.jupiter:junit-jupiter-engine:5.12.2'
4445
implementation 'org.junit.jupiter:junit-jupiter-params:5.12.2'
@@ -93,6 +94,11 @@ def creationDateOf(String image) {
9394
Date volumeDate = Date.from(OffsetDateTime.parse(imageModifiedStr).toInstant())
9495
volumeDate.time
9596
}
97+
def libddwafCommit() {
98+
def proc = ['git', '-C', "${projectDir}/../../third_party/libddwaf", 'rev-parse', 'HEAD'].execute()
99+
proc.waitForOrKill(5_000)
100+
proc.text.trim()
101+
}
96102

97103
def createVolumeTask = { String volumeName ->
98104
String taskName = "createVolume-$volumeName"
@@ -346,17 +352,17 @@ def buildAppSecTask = { String version, String variant ->
346352
],
347353
command: [
348354
'-e', '-c',
349-
'''
350-
git config --global --add safe.directory '*'
355+
"""
351356
cd /appsec
352357
test -f CMakeCache.txt || \\
353358
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \\
354359
-DCMAKE_INSTALL_PREFIX=/appsec \\
355360
-DDD_APPSEC_ENABLE_PATCHELF_LIBC=ON \\
361+
-DGIT_COMMIT=${libddwafCommit()} \\
356362
-DDD_APPSEC_TESTING=ON /project/appsec
357363
make -j extension ddappsec-helper && \\
358364
touch ddappsec.so libddappsec-helper.so
359-
'''
365+
"""
360366
]
361367
)
362368
}

0 commit comments

Comments
 (0)