Skip to content

Commit 4b30ec5

Browse files
bwoebiPROFeNoM
authored andcommitted
Implement extended sampling
Support for tags and resources in sampling rules Allows looking at arbitrary spans too, not only root spans Signed-off-by: Bob Weinand <[email protected]>
1 parent 9688e0f commit 4b30ec5

34 files changed

+535
-138
lines changed

ext/compatibility.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,15 @@ static inline zval *ddtrace_assign_variable(zval *variable_ptr, zval *value) {
6565
#define MAY_BE_ARRAY 0
6666

6767
#define Z_EXTRA_P(z) Z_NEXT_P(z)
68+
69+
#undef zval_get_long
70+
#define zval_get_long ddtrace_zval_get_long
71+
static inline zend_long zval_get_long(zval *op) {
72+
if (Z_ISUNDEF_P(op)) {
73+
return 0;
74+
}
75+
return _zval_get_long(op);
76+
}
6877
#endif
6978

7079
#if PHP_VERSION_ID < 70200

ext/ddtrace.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -632,14 +632,16 @@ static zval *ddtrace_root_span_data_write(zend_object *object, zend_string *memb
632632
}
633633
}
634634
} else if (zend_string_equals_literal(prop_name, "traceId")) {
635-
span->trace_id = Z_TYPE_P(value) == IS_STRING ? ddtrace_parse_userland_trace_id(Z_STR_P(value)) : (ddtrace_trace_id){ 0 };
635+
span->trace_id = Z_TYPE_P(value) == IS_STRING ? ddtrace_parse_hex_trace_id(Z_STRVAL_P(value), Z_STRLEN_P(value)) : (ddtrace_trace_id){ 0 };
636636
if (!span->trace_id.low && !span->trace_id.high) {
637637
span->trace_id = (ddtrace_trace_id) {
638638
.low = span->span_id,
639639
.time = get_DD_TRACE_128_BIT_TRACEID_GENERATION_ENABLED() ? span->start / UINT64_C(1000000000) : 0,
640640
};
641641
value = &span->property_id;
642642
}
643+
} else if (zend_string_equals_literal(prop_name, "samplingPriority")) {
644+
span->explicit_sampling_priority = zval_get_long(value) != DDTRACE_PRIORITY_SAMPLING_UNKNOWN;
643645
}
644646

645647
#if PHP_VERSION_ID >= 70400

ext/distributed_tracing_headers.c

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,6 @@
77

88
ZEND_EXTERN_MODULE_GLOBALS(ddtrace);
99

10-
static ddtrace_trace_id dd_parse_b3_trace_id(char *trace_id, ssize_t trace_id_len) {
11-
return (ddtrace_trace_id){
12-
.high = trace_id_len > 16 ? ddtrace_parse_hex_span_id_str(trace_id, MIN(16, trace_id_len - 16)) : 0,
13-
.low = ddtrace_parse_hex_span_id_str(trace_id + MAX(0, trace_id_len - 16), MIN(16, trace_id_len)),
14-
};
15-
}
16-
1710
static inline bool dd_is_hex_char(char chr) {
1811
return (chr >= '0' && chr <= '9') || (chr >= 'a' && chr <= 'f');
1912
}
@@ -99,7 +92,7 @@ static ddtrace_distributed_tracing_result ddtrace_read_distributed_tracing_ids_b
9992
++b3_ptr;
10093
}
10194

102-
result.trace_id = dd_parse_b3_trace_id(b3_traceid, b3_ptr - b3_traceid);
95+
result.trace_id = ddtrace_parse_hex_trace_id(b3_traceid, b3_ptr - b3_traceid);
10396

10497
char *b3_spanid = ++b3_ptr;
10598
while (b3_ptr < b3_end && *b3_ptr != '-') {
@@ -137,7 +130,7 @@ static ddtrace_distributed_tracing_result ddtrace_read_distributed_tracing_ids_b
137130
ddtrace_distributed_tracing_result result = dd_init_empty_result();
138131

139132
if (read_header(ZAI_STRL("X_B3_TRACEID"), "x-b3-traceid", &trace_id_str, data)) {
140-
result.trace_id = dd_parse_b3_trace_id(ZSTR_VAL(trace_id_str), ZSTR_LEN(trace_id_str));
133+
result.trace_id = ddtrace_parse_hex_trace_id(ZSTR_VAL(trace_id_str), ZSTR_LEN(trace_id_str));
141134
zend_string_release(trace_id_str);
142135
}
143136

@@ -482,14 +475,10 @@ void ddtrace_apply_distributed_tracing_result(ddtrace_distributed_tracing_result
482475
if (!span) {
483476
DDTRACE_G(propagated_priority_sampling) = DDTRACE_G(default_priority_sampling) = result->priority_sampling;
484477
} else {
485-
ddtrace_set_priority_sampling_on_span(span, result->priority_sampling, DD_MECHANISM_DEFAULT);
486-
487-
if (result->priority_sampling == DDTRACE_PRIORITY_SAMPLING_UNSET) {
488-
ZVAL_UNDEF(&zv);
489-
} else {
490-
ZVAL_LONG(&zv, result->priority_sampling);
491-
}
478+
ZVAL_LONG(&zv, result->priority_sampling);
492479
ddtrace_assign_variable(&span->property_propagated_sampling_priority, &zv);
480+
481+
ddtrace_set_priority_sampling_on_span(span, result->priority_sampling, DD_MECHANISM_DEFAULT);
493482
}
494483
}
495484
}

0 commit comments

Comments
 (0)