datadog 2.42.0 → 2.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +67 -2
- data/README.md +3 -0
- data/ext/datadog_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +46 -5
- data/ext/datadog_profiling_native_extension/collectors_idle_sampling_helper.c +6 -7
- data/ext/datadog_profiling_native_extension/collectors_stack.c +6 -7
- data/ext/datadog_profiling_native_extension/collectors_stack.h +1 -1
- data/ext/datadog_profiling_native_extension/collectors_thread_context.c +80 -36
- data/ext/datadog_profiling_native_extension/collectors_thread_context.h +3 -2
- data/ext/datadog_profiling_native_extension/extconf.rb +4 -2
- data/ext/datadog_profiling_native_extension/heap_recorder.c +13 -0
- data/ext/datadog_profiling_native_extension/heap_recorder.h +4 -0
- data/ext/datadog_profiling_native_extension/private_vm_api_access.c +34 -2
- data/ext/datadog_profiling_native_extension/private_vm_api_access.h +1 -0
- data/ext/datadog_profiling_native_extension/profiling.c +1 -0
- data/ext/datadog_profiling_native_extension/stack_recorder.c +17 -4
- data/ext/datadog_profiling_native_extension/time_helpers.h +5 -4
- data/ext/libdatadog_api/di.c +8 -3
- data/ext/libdatadog_api/extconf.rb +1 -1
- data/ext/libdatadog_api/feature_flags.c +8 -0
- data/ext/libdatadog_api/init.c +3 -1
- data/ext/libdatadog_api/otel_thread_context.c +51 -15
- data/ext/libdatadog_api/trace_exporter.c +642 -22
- data/ext/libdatadog_extconf_helpers.rb +14 -9
- data/lib/datadog/ai_guard/component.rb +17 -8
- data/lib/datadog/ai_guard/configuration/ext.rb +2 -0
- data/lib/datadog/ai_guard/configuration.rb +13 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/chat_instrumentation.rb +48 -55
- data/lib/datadog/ai_guard/contrib/ruby_llm/integration.rb +1 -1
- data/lib/datadog/ai_guard/contrib/ruby_llm/message_adapter.rb +76 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/patcher.rb +1 -0
- data/lib/datadog/ai_guard/contrib/ruby_llm/redaction_change_set.rb +135 -0
- data/lib/datadog/ai_guard/evaluation/client.rb +50 -0
- data/lib/datadog/ai_guard/evaluation/content_part.rb +12 -0
- data/lib/datadog/ai_guard/evaluation/message.rb +25 -7
- data/lib/datadog/ai_guard/evaluation/message_builder.rb +31 -0
- data/lib/datadog/ai_guard/evaluation/no_op_result.rb +6 -6
- data/lib/datadog/ai_guard/evaluation/outcome.rb +24 -0
- data/lib/datadog/ai_guard/evaluation/request.rb +4 -60
- data/lib/datadog/ai_guard/evaluation/response.rb +33 -0
- data/lib/datadog/ai_guard/evaluation/result.rb +11 -18
- data/lib/datadog/ai_guard/evaluation/tool_call.rb +15 -2
- data/lib/datadog/ai_guard/evaluation.rb +25 -11
- data/lib/datadog/ai_guard/ext.rb +1 -0
- data/lib/datadog/ai_guard/{api_client.rb → http_client.rb} +6 -4
- data/lib/datadog/ai_guard/metrics/telemetry.rb +43 -0
- data/lib/datadog/ai_guard/redaction/replacements.rb +97 -0
- data/lib/datadog/ai_guard/redaction/result.rb +29 -0
- data/lib/datadog/ai_guard/redaction.rb +80 -0
- data/lib/datadog/ai_guard.rb +58 -57
- data/lib/datadog/core/configuration/components.rb +9 -1
- data/lib/datadog/core/configuration/settings.rb +5 -2
- data/lib/datadog/core/configuration/supported_configurations.rb +8 -0
- data/lib/datadog/core/remote/client/capabilities.rb +10 -4
- data/lib/datadog/core/remote/component.rb +9 -2
- data/lib/datadog/core/remote/worker.rb +8 -0
- data/lib/datadog/di/instrumenter.rb +1 -1
- data/lib/datadog/di/probe_manager.rb +10 -5
- data/lib/datadog/di/proc_responder.rb +1 -1
- data/lib/datadog/open_feature/agentless/configuration_source.rb +246 -0
- data/lib/datadog/open_feature/agentless/parser.rb +43 -0
- data/lib/datadog/open_feature/agentless/response.rb +19 -0
- data/lib/datadog/open_feature/agentless/transport.rb +103 -0
- data/lib/datadog/open_feature/component.rb +57 -1
- data/lib/datadog/open_feature/configuration/agentless_endpoint.rb +90 -0
- data/lib/datadog/open_feature/configuration/source/resolution.rb +22 -0
- data/lib/datadog/open_feature/configuration/source.rb +43 -0
- data/lib/datadog/open_feature/configuration.rb +118 -0
- data/lib/datadog/open_feature/native_evaluator.rb +1 -14
- data/lib/datadog/open_feature/remote.rb +5 -5
- data/lib/datadog/open_feature/transport.rb +5 -0
- data/lib/datadog/opentelemetry/signal_configuration.rb +13 -9
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +2 -2
- data/lib/datadog/profiling/collectors/idle_sampling_helper.rb +5 -7
- data/lib/datadog/profiling/collectors/info.rb +2 -6
- data/lib/datadog/symbol_database/extractor.rb +84 -102
- data/lib/datadog/tracing/component.rb +2 -0
- data/lib/datadog/tracing/configuration/ext.rb +1 -0
- data/lib/datadog/tracing/configuration/settings.rb +6 -0
- data/lib/datadog/tracing/context.rb +24 -2
- data/lib/datadog/tracing/context_provider.rb +9 -5
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +32 -5
- data/lib/datadog/tracing/contrib/sequel/jdbc_connection_string.rb +140 -0
- data/lib/datadog/tracing/contrib/sequel/utils.rb +49 -62
- data/lib/datadog/tracing/metadata/ext.rb +3 -0
- data/lib/datadog/tracing/otel_thread_context.rb +78 -9
- data/lib/datadog/tracing/tracer.rb +15 -2
- data/lib/datadog/tracing/transport/native.rb +18 -26
- data/lib/datadog/tracing/transport/span_events_negotiation.rb +41 -0
- data/lib/datadog/tracing/transport/trace_formatter.rb +13 -3
- data/lib/datadog/tracing/transport/traces.rb +3 -23
- data/lib/datadog/version.rb +1 -1
- metadata +25 -7
- data/lib/datadog/ai_guard/evaluation/content_builder.rb +0 -31
data/ext/libdatadog_api/init.c
CHANGED
|
@@ -25,7 +25,9 @@ void DDTRACE_EXPORT Init_libdatadog_api(void) {
|
|
|
25
25
|
library_config_init(core_module);
|
|
26
26
|
ddsketch_init(core_module);
|
|
27
27
|
feature_flags_init(core_module);
|
|
28
|
-
|
|
28
|
+
#ifndef TRUFFLERUBY
|
|
29
|
+
di_init(datadog_module);
|
|
30
|
+
#endif
|
|
29
31
|
|
|
30
32
|
VALUE tracing_module = rb_define_module_under(datadog_module, "Tracing");
|
|
31
33
|
trace_exporter_init(tracing_module);
|
|
@@ -4,7 +4,12 @@
|
|
|
4
4
|
#include "datadog_ruby_common.h"
|
|
5
5
|
#include "otel_thread_context.h"
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
// Relies on a :fiber_switch TracePoint that TruffleRuby does not support yet
|
|
8
|
+
#if defined(__linux__) && !defined(TRUFFLERUBY)
|
|
9
|
+
#define OTEL_THREAD_CONTEXT_SUPPORTED
|
|
10
|
+
#endif
|
|
11
|
+
|
|
12
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
8
13
|
#include <datadog/otel-thread-ctx.h>
|
|
9
14
|
extern __thread const uint8_t *otel_thread_ctx_v1;
|
|
10
15
|
|
|
@@ -24,6 +29,7 @@ static ID fiber_context_slot;
|
|
|
24
29
|
DDTRACE_UNUSED static bool otel_context_enabled = false;
|
|
25
30
|
|
|
26
31
|
static VALUE native_set(VALUE _self, VALUE trace_id, VALUE span_id, VALUE local_root_span_id);
|
|
32
|
+
static VALUE native_clear(VALUE _self);
|
|
27
33
|
static VALUE native_supported_p(VALUE _self);
|
|
28
34
|
static VALUE native_enable(VALUE _self);
|
|
29
35
|
static VALUE native_read(VALUE _self);
|
|
@@ -31,17 +37,18 @@ static VALUE native_read(VALUE _self);
|
|
|
31
37
|
void otel_thread_context_init(VALUE tracing_module) {
|
|
32
38
|
fiber_context_slot = rb_intern("__dd_otel_fiber_context");
|
|
33
39
|
|
|
34
|
-
VALUE
|
|
40
|
+
VALUE otel_thread_context_class = rb_define_class_under(tracing_module, "OTelThreadContext", rb_cObject);
|
|
35
41
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
rb_define_method(otel_thread_context_class, "_native_enable", native_enable, 0);
|
|
43
|
+
rb_define_method(otel_thread_context_class, "_native_set", native_set, 3);
|
|
44
|
+
rb_define_method(otel_thread_context_class, "_native_clear", native_clear, 0);
|
|
45
|
+
rb_define_method(otel_thread_context_class, "_native_supported?", native_supported_p, 0);
|
|
39
46
|
|
|
40
|
-
VALUE testing_module = rb_define_module_under(
|
|
47
|
+
VALUE testing_module = rb_define_module_under(otel_thread_context_class, "Testing");
|
|
41
48
|
rb_define_singleton_method(testing_module, "_native_read", native_read, 0);
|
|
42
49
|
}
|
|
43
50
|
|
|
44
|
-
#ifdef
|
|
51
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
45
52
|
static ddog_ThreadContextHandle *get_fiber_handle_for(VALUE thread) {
|
|
46
53
|
VALUE obj = rb_thread_local_aref(thread, fiber_context_slot);
|
|
47
54
|
|
|
@@ -54,6 +61,22 @@ void otel_thread_context_init(VALUE tracing_module) {
|
|
|
54
61
|
return get_fiber_handle_for(rb_thread_current());
|
|
55
62
|
}
|
|
56
63
|
|
|
64
|
+
static void pack_span_id(VALUE id, uint8_t bytes[8]) {
|
|
65
|
+
// Tracing::Utils.next_id caps generated span IDs at (1 << 62) - 1, which fits
|
|
66
|
+
// in a Fixnum on 64-bit Ruby. Packing them directly avoids rb_integer_pack's
|
|
67
|
+
// generic conversion and format checks on each context update.
|
|
68
|
+
// https://github.com/DataDog/dd-trace-rb/blob/0b10368e0a2940c1f4d50c9739b9973b4f8bc32a/lib/datadog/tracing/utils.rb#L20-L37
|
|
69
|
+
if (FIXNUM_P(id)) {
|
|
70
|
+
uint64_t number = (uint64_t) FIX2LONG(id);
|
|
71
|
+
for (int i = 7; i >= 0; i--) {
|
|
72
|
+
bytes[i] = (uint8_t) number;
|
|
73
|
+
number >>= 8;
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
rb_integer_pack(id, bytes, 1, sizeof(uint64_t), 0, INTEGER_PACK_BIG_ENDIAN);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
57
80
|
static void store_current_fiber_handle(ddog_ThreadContextHandle *handle) {
|
|
58
81
|
VALUE obj = TypedData_Wrap_Struct(rb_cObject, &otel_ctx_handle_t, handle);
|
|
59
82
|
rb_thread_local_aset(rb_thread_current(), fiber_context_slot, obj);
|
|
@@ -135,7 +158,7 @@ void otel_thread_context_init(VALUE tracing_module) {
|
|
|
135
158
|
#endif
|
|
136
159
|
|
|
137
160
|
static VALUE native_enable(DDTRACE_UNUSED VALUE _self) {
|
|
138
|
-
#ifdef
|
|
161
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
139
162
|
if (otel_context_enabled) return Qtrue;
|
|
140
163
|
otel_context_enabled = true;
|
|
141
164
|
|
|
@@ -161,7 +184,7 @@ static VALUE native_enable(DDTRACE_UNUSED VALUE _self) {
|
|
|
161
184
|
}
|
|
162
185
|
|
|
163
186
|
static VALUE native_supported_p(DDTRACE_UNUSED VALUE _self) {
|
|
164
|
-
#ifdef
|
|
187
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
165
188
|
return Qtrue;
|
|
166
189
|
#else
|
|
167
190
|
return Qfalse;
|
|
@@ -174,17 +197,17 @@ static VALUE native_set(
|
|
|
174
197
|
DDTRACE_UNUSED VALUE span_id,
|
|
175
198
|
DDTRACE_UNUSED VALUE local_root_span_id
|
|
176
199
|
) {
|
|
177
|
-
#ifdef
|
|
200
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
178
201
|
if (!otel_context_enabled) return Qfalse;
|
|
179
202
|
|
|
180
203
|
uint8_t trace_id_bytes[16];
|
|
181
204
|
uint8_t span_id_bytes[8];
|
|
182
205
|
uint8_t local_root_span_id_bytes[8];
|
|
183
206
|
|
|
184
|
-
|
|
185
|
-
rb_integer_pack(trace_id, trace_id_bytes, sizeof(
|
|
186
|
-
|
|
187
|
-
|
|
207
|
+
// Note: We use 2 words of size 8, as `rb_integer_pack` has a fast path for it (vs 16 bytes of size 1)
|
|
208
|
+
rb_integer_pack(trace_id, trace_id_bytes, 2, sizeof(uint64_t), 0, INTEGER_PACK_BIG_ENDIAN);
|
|
209
|
+
pack_span_id(span_id, span_id_bytes);
|
|
210
|
+
pack_span_id(local_root_span_id, local_root_span_id_bytes);
|
|
188
211
|
|
|
189
212
|
ddog_ThreadContextHandle *handle = get_current_fiber_handle();
|
|
190
213
|
|
|
@@ -204,8 +227,21 @@ static VALUE native_set(
|
|
|
204
227
|
#endif
|
|
205
228
|
}
|
|
206
229
|
|
|
230
|
+
static VALUE native_clear(DDTRACE_UNUSED VALUE _self) {
|
|
231
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
232
|
+
if (!otel_context_enabled) return Qfalse;
|
|
233
|
+
|
|
234
|
+
ddog_ThreadContextHandle *detached = ddog_otel_thread_ctx_detach();
|
|
235
|
+
rb_thread_local_aset(rb_thread_current(), fiber_context_slot, Qnil);
|
|
236
|
+
|
|
237
|
+
return detached == NULL ? Qfalse : Qtrue;
|
|
238
|
+
#else
|
|
239
|
+
return Qfalse;
|
|
240
|
+
#endif
|
|
241
|
+
}
|
|
242
|
+
|
|
207
243
|
static VALUE native_read(DDTRACE_UNUSED VALUE _self) {
|
|
208
|
-
#ifdef
|
|
244
|
+
#ifdef OTEL_THREAD_CONTEXT_SUPPORTED
|
|
209
245
|
const uint8_t *raw = otel_thread_ctx_v1;
|
|
210
246
|
if (!raw) return Qnil;
|
|
211
247
|
|