feat(obfuscation/json): Init json obfuscation [APMSP-2665]#1635
feat(obfuscation/json): Init json obfuscation [APMSP-2665]#1635gh-worker-dd-mergequeue-cf854d[bot] merged 15 commits intomainfrom
Conversation
Clippy Allow Annotation ReportComparing clippy allow annotations between branches:
Summary by Rule
Annotation Counts by File
Annotation Stats by Crate
About This ReportThis report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality. |
There was a problem hiding this comment.
Pull request overview
Ports JSON obfuscation functionality into libdd-trace-obfuscation, aiming to match the Datadog Agent’s behavior and supporting SQL obfuscation/normalization for JSON plan use-cases.
Changes:
- Added a new
JsonObfuscatorthat obfuscates JSON leaf values with support for keep-lists and key-based transformations (e.g., SQL obfuscation). - Enhanced SQL obfuscation to handle quoted literals with suffixes (e.g.
'value'::type) and added a “plan SQL” normalization pass. - Enabled
serde_json’spreserve_orderfeature to keep object key order stable.
Reviewed changes
Copilot reviewed 4 out of 5 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| libdd-trace-obfuscation/src/sql.rs | Adds quoted-literal handling for casts and introduces normalized SQL output for JSON plan obfuscation. |
| libdd-trace-obfuscation/src/lib.rs | Exposes the new json module. |
| libdd-trace-obfuscation/src/json.rs | Implements JsonObfuscator plus unit tests. |
| libdd-trace-obfuscation/Cargo.toml | Enables serde_json preserve_order feature. |
| Cargo.lock | Updates lockfile for new transitive deps (e.g., indexmap). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #1635 +/- ##
==========================================
+ Coverage 71.05% 71.22% +0.16%
==========================================
Files 427 429 +2
Lines 62963 63505 +542
==========================================
+ Hits 44738 45229 +491
- Misses 18225 18276 +51
🚀 New features to boost your workflow:
|
BenchmarksComparisonBenchmark execution time: 2026-03-09 17:57:54 Comparing candidate commit e2ef20e in PR branch Found 17 performance improvements and 8 performance regressions! Performance is the same for 33 metrics, 2 unstable metrics.
|
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| concentrator/add_spans_to_concentrator | execution_time | 10.677ms | 10.706ms ± 0.013ms | 10.705ms ± 0.008ms | 10.712ms | 10.726ms | 10.741ms | 10.771ms | 0.61% | 0.880 | 2.880 | 0.12% | 0.001ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| concentrator/add_spans_to_concentrator | execution_time | [10.704ms; 10.708ms] or [-0.017%; +0.017%] | None | None | None |
Group 2
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normalization/normalize_trace/test_trace | execution_time | 244.628ns | 253.562ns ± 10.262ns | 249.180ns ± 2.228ns | 253.959ns | 280.853ns | 286.731ns | 288.857ns | 15.92% | 2.023 | 3.250 | 4.04% | 0.726ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| normalization/normalize_trace/test_trace | execution_time | [252.140ns; 254.984ns] or [-0.561%; +0.561%] | None | None | None |
Group 3
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| benching string interning on wordpress profile | execution_time | 161.032µs | 162.152µs ± 0.299µs | 162.115µs ± 0.132µs | 162.255µs | 162.582µs | 163.026µs | 163.981µs | 1.15% | 2.016 | 11.004 | 0.18% | 0.021µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| benching string interning on wordpress profile | execution_time | [162.110µs; 162.193µs] or [-0.026%; +0.026%] | None | None | None |
Group 4
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | 190.782ns | 193.365ns ± 2.155ns | 193.230ns ± 1.637ns | 194.530ns | 197.265ns | 198.994ns | 202.409ns | 4.75% | 1.079 | 1.628 | 1.11% | 0.152ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | [193.066ns; 193.664ns] or [-0.154%; +0.154%] | None | None | None |
Group 5
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| receiver_entry_point/report/2598 | execution_time | 3.397ms | 3.430ms ± 0.022ms | 3.424ms ± 0.010ms | 3.435ms | 3.479ms | 3.494ms | 3.498ms | 2.17% | 1.286 | 0.953 | 0.64% | 0.002ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| receiver_entry_point/report/2598 | execution_time | [3.427ms; 3.433ms] or [-0.089%; +0.089%] | None | None | None |
Group 6
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| benching deserializing traces from msgpack to their internal representation | execution_time | 48.801ms | 49.106ms ± 1.069ms | 48.957ms ± 0.063ms | 49.034ms | 49.172ms | 55.310ms | 60.482ms | 23.54% | 8.554 | 77.363 | 2.17% | 0.076ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| benching deserializing traces from msgpack to their internal representation | execution_time | [48.958ms; 49.255ms] or [-0.302%; +0.302%] | None | None | None |
Group 7
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| write only interface | execution_time | 1.261µs | 3.218µs ± 1.412µs | 3.002µs ± 0.028µs | 3.024µs | 3.671µs | 13.849µs | 14.758µs | 391.61% | 7.337 | 55.105 | 43.77% | 0.100µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| write only interface | execution_time | [3.022µs; 3.414µs] or [-6.082%; +6.082%] | None | None | None |
Group 8
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | 144.778µs | 146.623µs ± 1.900µs | 146.299µs ± 0.550µs | 146.866µs | 148.302µs | 153.110µs | 165.466µs | 13.10% | 6.219 | 52.648 | 1.29% | 0.134µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | [146.359µs; 146.886µs] or [-0.180%; +0.180%] | None | None | None |
Group 9
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| benching serializing traces from their internal representation to msgpack | execution_time | 13.901ms | 13.972ms ± 0.035ms | 13.971ms ± 0.019ms | 13.987ms | 14.021ms | 14.083ms | 14.180ms | 1.50% | 1.828 | 7.383 | 0.25% | 0.002ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| benching serializing traces from their internal representation to msgpack | execution_time | [13.967ms; 13.977ms] or [-0.035%; +0.035%] | None | None | None |
Group 10
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| tags/replace_trace_tags | execution_time | 2.311µs | 2.370µs ± 0.018µs | 2.369µs ± 0.006µs | 2.377µs | 2.404µs | 2.411µs | 2.413µs | 1.88% | -0.524 | 2.412 | 0.74% | 0.001µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| tags/replace_trace_tags | execution_time | [2.368µs; 2.373µs] or [-0.103%; +0.103%] | None | None | None |
Group 11
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| credit_card/is_card_number/ | execution_time | 3.896µs | 3.914µs ± 0.003µs | 3.914µs ± 0.001µs | 3.915µs | 3.918µs | 3.921µs | 3.922µs | 0.21% | -1.577 | 14.165 | 0.06% | 0.000µs | 1 | 200 |
| credit_card/is_card_number/ | throughput | 254940507.562op/s | 255484243.660op/s ± 163486.898op/s | 255488515.792op/s ± 83604.935op/s | 255573228.130op/s | 255688813.410op/s | 255797697.882op/s | 256695456.410op/s | 0.47% | 1.603 | 14.367 | 0.06% | 11560.269op/s | 1 | 200 |
| credit_card/is_card_number/ 3782-8224-6310-005 | execution_time | 79.861µs | 80.162µs ± 0.097µs | 80.154µs ± 0.035µs | 80.193µs | 80.251µs | 80.335µs | 81.200µs | 1.30% | 6.019 | 64.894 | 0.12% | 0.007µs | 1 | 200 |
| credit_card/is_card_number/ 3782-8224-6310-005 | throughput | 12315257.589op/s | 12474814.762op/s ± 14960.865op/s | 12475963.809op/s ± 5494.462op/s | 12480504.516op/s | 12489533.215op/s | 12496077.311op/s | 12521776.622op/s | 0.37% | -5.909 | 63.453 | 0.12% | 1057.893op/s | 1 | 200 |
| credit_card/is_card_number/ 378282246310005 | execution_time | 67.803µs | 67.918µs ± 0.076µs | 67.917µs ± 0.037µs | 67.946µs | 68.022µs | 68.115µs | 68.607µs | 1.02% | 4.044 | 32.173 | 0.11% | 0.005µs | 1 | 200 |
| credit_card/is_card_number/ 378282246310005 | throughput | 14575787.942op/s | 14723583.870op/s ± 16468.661op/s | 14723813.101op/s ± 8024.958op/s | 14734135.835op/s | 14741344.635op/s | 14747342.725op/s | 14748605.534op/s | 0.17% | -3.984 | 31.463 | 0.11% | 1164.510op/s | 1 | 200 |
| credit_card/is_card_number/37828224631 | execution_time | 3.894µs | 3.915µs ± 0.003µs | 3.915µs ± 0.002µs | 3.917µs | 3.919µs | 3.922µs | 3.922µs | 0.19% | -1.609 | 10.995 | 0.08% | 0.000µs | 1 | 200 |
| credit_card/is_card_number/37828224631 | throughput | 254948546.294op/s | 255425344.113op/s ± 197089.765op/s | 255440405.761op/s ± 127626.449op/s | 255542618.122op/s | 255688846.919op/s | 255796031.983op/s | 256819616.234op/s | 0.54% | 1.633 | 11.191 | 0.08% | 13936.351op/s | 1 | 200 |
| credit_card/is_card_number/378282246310005 | execution_time | 64.588µs | 64.704µs ± 0.059µs | 64.696µs ± 0.036µs | 64.734µs | 64.805µs | 64.870µs | 64.967µs | 0.42% | 1.074 | 2.811 | 0.09% | 0.004µs | 1 | 200 |
| credit_card/is_card_number/378282246310005 | throughput | 15392511.017op/s | 15455100.825op/s ± 14068.409op/s | 15456920.019op/s ± 8580.811op/s | 15464488.895op/s | 15474446.670op/s | 15478936.202op/s | 15482707.364op/s | 0.17% | -1.064 | 2.769 | 0.09% | 994.787op/s | 1 | 200 |
| credit_card/is_card_number/37828224631000521389798 | execution_time | 45.428µs | 45.686µs ± 0.100µs | 45.676µs ± 0.071µs | 45.758µs | 45.849µs | 45.881µs | 45.983µs | 0.67% | -0.012 | -0.238 | 0.22% | 0.007µs | 1 | 200 |
| credit_card/is_card_number/37828224631000521389798 | throughput | 21747214.941op/s | 21888740.490op/s ± 48137.994op/s | 21893447.292op/s ± 34062.963op/s | 21919854.511op/s | 21973313.748op/s | 21997717.716op/s | 22012789.129op/s | 0.55% | 0.024 | -0.237 | 0.22% | 3403.870op/s | 1 | 200 |
| credit_card/is_card_number/x371413321323331 | execution_time | 6.573µs | 6.627µs ± 0.013µs | 6.633µs ± 0.006µs | 6.636µs | 6.642µs | 6.645µs | 6.646µs | 0.21% | -1.332 | 1.883 | 0.20% | 0.001µs | 1 | 200 |
| credit_card/is_card_number/x371413321323331 | throughput | 150461453.320op/s | 150899812.931op/s ± 305934.303op/s | 150770572.457op/s ± 146980.776op/s | 151074264.361op/s | 151497519.671op/s | 151920555.091op/s | 152145994.056op/s | 0.91% | 1.345 | 1.937 | 0.20% | 21632.822op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/ | execution_time | 3.895µs | 3.915µs ± 0.003µs | 3.914µs ± 0.001µs | 3.916µs | 3.918µs | 3.921µs | 3.922µs | 0.20% | -1.478 | 13.040 | 0.07% | 0.000µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/ | throughput | 254954346.707op/s | 255458894.249op/s ± 171687.327op/s | 255462830.158op/s ± 84803.931op/s | 255546841.743op/s | 255697827.018op/s | 255763037.450op/s | 256707397.574op/s | 0.49% | 1.504 | 13.237 | 0.07% | 12140.127op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | execution_time | 65.588µs | 65.696µs ± 0.048µs | 65.693µs ± 0.030µs | 65.724µs | 65.774µs | 65.808µs | 65.851µs | 0.24% | 0.263 | 0.004 | 0.07% | 0.003µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | throughput | 15185703.286op/s | 15221724.615op/s ± 11114.234op/s | 15222359.118op/s ± 6980.400op/s | 15228732.956op/s | 15239331.156op/s | 15244338.590op/s | 15246639.810op/s | 0.16% | -0.259 | -0.001 | 0.07% | 785.895op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 378282246310005 | execution_time | 53.365µs | 53.423µs ± 0.026µs | 53.420µs ± 0.016µs | 53.438µs | 53.467µs | 53.492µs | 53.513µs | 0.17% | 0.525 | 0.364 | 0.05% | 0.002µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 378282246310005 | throughput | 18686878.978op/s | 18718606.633op/s ± 9202.387op/s | 18719538.743op/s ± 5601.334op/s | 18724865.075op/s | 18732462.075op/s | 18735993.406op/s | 18738741.181op/s | 0.10% | -0.522 | 0.359 | 0.05% | 650.707op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631 | execution_time | 3.894µs | 3.915µs ± 0.003µs | 3.914µs ± 0.001µs | 3.916µs | 3.921µs | 3.922µs | 3.923µs | 0.23% | -0.751 | 10.852 | 0.08% | 0.000µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631 | throughput | 254914308.884op/s | 255459160.896op/s ± 197756.826op/s | 255495809.879op/s ± 93160.642op/s | 255565066.869op/s | 255669264.560op/s | 255729627.816op/s | 256823023.807op/s | 0.52% | 0.780 | 11.041 | 0.08% | 13983.519op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/378282246310005 | execution_time | 50.147µs | 50.229µs ± 0.072µs | 50.218µs ± 0.022µs | 50.241µs | 50.298µs | 50.324µs | 50.955µs | 1.47% | 6.916 | 61.347 | 0.14% | 0.005µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/378282246310005 | throughput | 19625032.357op/s | 19908734.999op/s ± 28362.973op/s | 19913309.400op/s ± 8691.181op/s | 19920380.729op/s | 19929606.542op/s | 19939504.481op/s | 19941390.260op/s | 0.14% | -6.849 | 60.454 | 0.14% | 2005.565op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | execution_time | 45.371µs | 45.697µs ± 0.108µs | 45.692µs ± 0.079µs | 45.777µs | 45.870µs | 45.927µs | 45.938µs | 0.54% | -0.112 | -0.254 | 0.24% | 0.008µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | throughput | 21768665.289op/s | 21883427.063op/s ± 51681.525op/s | 21885556.627op/s ± 37542.880op/s | 21919592.281op/s | 21968127.342op/s | 22003904.312op/s | 22040279.769op/s | 0.71% | 0.124 | -0.244 | 0.24% | 3654.436op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/x371413321323331 | execution_time | 6.572µs | 6.628µs ± 0.013µs | 6.632µs ± 0.006µs | 6.636µs | 6.643µs | 6.647µs | 6.648µs | 0.24% | -1.447 | 2.395 | 0.19% | 0.001µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/x371413321323331 | throughput | 150417974.819op/s | 150868437.643op/s ± 289856.535op/s | 150775215.124op/s ± 134466.043op/s | 151016382.545op/s | 151482173.221op/s | 151825102.268op/s | 152163363.231op/s | 0.92% | 1.461 | 2.453 | 0.19% | 20495.952op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| credit_card/is_card_number/ | execution_time | [3.914µs; 3.914µs] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number/ | throughput | [255461585.949op/s; 255506901.372op/s] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number/ 3782-8224-6310-005 | execution_time | [80.148µs; 80.175µs] or [-0.017%; +0.017%] | None | None | None |
| credit_card/is_card_number/ 3782-8224-6310-005 | throughput | [12472741.330op/s; 12476888.194op/s] or [-0.017%; +0.017%] | None | None | None |
| credit_card/is_card_number/ 378282246310005 | execution_time | [67.908µs; 67.929µs] or [-0.016%; +0.016%] | None | None | None |
| credit_card/is_card_number/ 378282246310005 | throughput | [14721301.472op/s; 14725866.268op/s] or [-0.016%; +0.016%] | None | None | None |
| credit_card/is_card_number/37828224631 | execution_time | [3.915µs; 3.915µs] or [-0.011%; +0.011%] | None | None | None |
| credit_card/is_card_number/37828224631 | throughput | [255398029.367op/s; 255452658.859op/s] or [-0.011%; +0.011%] | None | None | None |
| credit_card/is_card_number/378282246310005 | execution_time | [64.695µs; 64.712µs] or [-0.013%; +0.013%] | None | None | None |
| credit_card/is_card_number/378282246310005 | throughput | [15453151.079op/s; 15457050.571op/s] or [-0.013%; +0.013%] | None | None | None |
| credit_card/is_card_number/37828224631000521389798 | execution_time | [45.672µs; 45.700µs] or [-0.030%; +0.030%] | None | None | None |
| credit_card/is_card_number/37828224631000521389798 | throughput | [21882069.027op/s; 21895411.953op/s] or [-0.030%; +0.030%] | None | None | None |
| credit_card/is_card_number/x371413321323331 | execution_time | [6.625µs; 6.629µs] or [-0.028%; +0.028%] | None | None | None |
| credit_card/is_card_number/x371413321323331 | throughput | [150857413.379op/s; 150942212.483op/s] or [-0.028%; +0.028%] | None | None | None |
| credit_card/is_card_number_no_luhn/ | execution_time | [3.914µs; 3.915µs] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number_no_luhn/ | throughput | [255435100.037op/s; 255482688.462op/s] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | execution_time | [65.689µs; 65.702µs] or [-0.010%; +0.010%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | throughput | [15220184.289op/s; 15223264.940op/s] or [-0.010%; +0.010%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 378282246310005 | execution_time | [53.419µs; 53.426µs] or [-0.007%; +0.007%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 378282246310005 | throughput | [18717331.271op/s; 18719881.995op/s] or [-0.007%; +0.007%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631 | execution_time | [3.914µs; 3.915µs] or [-0.011%; +0.011%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631 | throughput | [255431753.702op/s; 255486568.091op/s] or [-0.011%; +0.011%] | None | None | None |
| credit_card/is_card_number_no_luhn/378282246310005 | execution_time | [50.219µs; 50.239µs] or [-0.020%; +0.020%] | None | None | None |
| credit_card/is_card_number_no_luhn/378282246310005 | throughput | [19904804.164op/s; 19912665.834op/s] or [-0.020%; +0.020%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | execution_time | [45.682µs; 45.712µs] or [-0.033%; +0.033%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | throughput | [21876264.501op/s; 21890589.626op/s] or [-0.033%; +0.033%] | None | None | None |
| credit_card/is_card_number_no_luhn/x371413321323331 | execution_time | [6.627µs; 6.630µs] or [-0.027%; +0.027%] | None | None | None |
| credit_card/is_card_number_no_luhn/x371413321323331 | throughput | [150828266.315op/s; 150908608.971op/s] or [-0.027%; +0.027%] | None | None | None |
Group 12
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ip_address/quantize_peer_ip_address_benchmark | execution_time | 4.955µs | 5.018µs ± 0.036µs | 5.019µs ± 0.037µs | 5.045µs | 5.070µs | 5.072µs | 5.120µs | 2.00% | 0.106 | -1.195 | 0.72% | 0.003µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| ip_address/quantize_peer_ip_address_benchmark | execution_time | [5.013µs; 5.023µs] or [-0.100%; +0.100%] | None | None | None |
Group 13
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sql/obfuscate_sql_string | execution_time | 88.623µs | 88.956µs ± 0.233µs | 88.947µs ± 0.051µs | 88.994µs | 89.095µs | 89.338µs | 91.881µs | 3.30% | 10.031 | 123.790 | 0.26% | 0.016µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sql/obfuscate_sql_string | execution_time | [88.924µs; 88.988µs] or [-0.036%; +0.036%] | None | None | None |
Group 14
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | execution_time | 204.893µs | 205.912µs ± 0.591µs | 205.862µs ± 0.378µs | 206.231µs | 206.945µs | 207.416µs | 208.029µs | 1.05% | 0.727 | 0.635 | 0.29% | 0.042µs | 1 | 200 |
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | throughput | 4807032.715op/s | 4856488.160op/s ± 13902.711op/s | 4857630.729op/s ± 8922.115op/s | 4866621.364op/s | 4876663.545op/s | 4878997.662op/s | 4880593.638op/s | 0.47% | -0.710 | 0.589 | 0.29% | 983.070op/s | 1 | 200 |
| normalization/normalize_name/normalize_name/bad-name | execution_time | 18.566µs | 18.645µs ± 0.070µs | 18.617µs ± 0.022µs | 18.657µs | 18.811µs | 18.843µs | 18.883µs | 1.43% | 1.690 | 1.907 | 0.37% | 0.005µs | 1 | 200 |
| normalization/normalize_name/normalize_name/bad-name | throughput | 52957496.672op/s | 53635754.440op/s ± 199945.554op/s | 53715569.688op/s ± 63675.625op/s | 53757727.816op/s | 53816461.650op/s | 53839424.702op/s | 53862512.741op/s | 0.27% | -1.678 | 1.868 | 0.37% | 14138.286op/s | 1 | 200 |
| normalization/normalize_name/normalize_name/good | execution_time | 10.684µs | 10.755µs ± 0.029µs | 10.752µs ± 0.020µs | 10.774µs | 10.805µs | 10.821µs | 10.846µs | 0.87% | 0.149 | 0.046 | 0.27% | 0.002µs | 1 | 200 |
| normalization/normalize_name/normalize_name/good | throughput | 92199629.794op/s | 92982623.115op/s ± 253585.246op/s | 93004236.638op/s ± 168796.167op/s | 93153899.498op/s | 93388014.575op/s | 93578528.515op/s | 93600578.466op/s | 0.64% | -0.133 | 0.039 | 0.27% | 17931.185op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | execution_time | [205.830µs; 205.994µs] or [-0.040%; +0.040%] | None | None | None |
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | throughput | [4854561.378op/s; 4858414.942op/s] or [-0.040%; +0.040%] | None | None | None |
| normalization/normalize_name/normalize_name/bad-name | execution_time | [18.635µs; 18.654µs] or [-0.052%; +0.052%] | None | None | None |
| normalization/normalize_name/normalize_name/bad-name | throughput | [53608043.909op/s; 53663464.971op/s] or [-0.052%; +0.052%] | None | None | None |
| normalization/normalize_name/normalize_name/good | execution_time | [10.751µs; 10.759µs] or [-0.038%; +0.038%] | None | None | None |
| normalization/normalize_name/normalize_name/good | throughput | [92947478.638op/s; 93017767.591op/s] or [-0.038%; +0.038%] | None | None | None |
Group 15
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| redis/obfuscate_redis_string | execution_time | 32.672µs | 33.363µs ± 0.936µs | 32.785µs ± 0.071µs | 34.619µs | 34.860µs | 35.337µs | 36.330µs | 10.81% | 1.001 | -0.704 | 2.80% | 0.066µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| redis/obfuscate_redis_string | execution_time | [33.233µs; 33.492µs] or [-0.389%; +0.389%] | None | None | None |
Group 16
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| profile_add_sample_frames_x1000 | execution_time | 4.098ms | 4.106ms ± 0.008ms | 4.104ms ± 0.002ms | 4.107ms | 4.111ms | 4.129ms | 4.199ms | 2.29% | 7.870 | 81.139 | 0.20% | 0.001ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| profile_add_sample_frames_x1000 | execution_time | [4.104ms; 4.107ms] or [-0.028%; +0.028%] | None | None | None |
Group 17
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| profile_add_sample2_frames_x1000 | execution_time | 736.437µs | 737.472µs ± 0.558µs | 737.436µs ± 0.283µs | 737.708µs | 738.365µs | 739.352µs | 740.434µs | 0.41% | 1.654 | 6.085 | 0.08% | 0.039µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| profile_add_sample2_frames_x1000 | execution_time | [737.395µs; 737.549µs] or [-0.010%; +0.010%] | None | None | None |
Group 18
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | execution_time | 493.155µs | 493.897µs ± 0.503µs | 493.837µs ± 0.200µs | 494.058µs | 494.507µs | 495.294µs | 499.072µs | 1.06% | 5.801 | 54.876 | 0.10% | 0.036µs | 1 | 200 |
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | throughput | 2003718.233op/s | 2024716.460op/s ± 2049.691op/s | 2024959.994op/s ± 819.513op/s | 2025755.056op/s | 2026578.487op/s | 2027367.321op/s | 2027760.035op/s | 0.14% | -5.731 | 53.889 | 0.10% | 144.935op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | execution_time | 370.057µs | 370.742µs ± 0.323µs | 370.718µs ± 0.235µs | 370.956µs | 371.308µs | 371.524µs | 371.687µs | 0.26% | 0.414 | -0.167 | 0.09% | 0.023µs | 1 | 200 |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | throughput | 2690439.232op/s | 2697298.073op/s ± 2345.824op/s | 2697467.207op/s ± 1710.118op/s | 2699109.097op/s | 2700682.285op/s | 2701529.652op/s | 2702284.500op/s | 0.18% | -0.409 | -0.173 | 0.09% | 165.875op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | execution_time | 167.270µs | 167.563µs ± 0.123µs | 167.569µs ± 0.086µs | 167.651µs | 167.764µs | 167.822µs | 167.905µs | 0.20% | 0.061 | -0.324 | 0.07% | 0.009µs | 1 | 200 |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | throughput | 5955757.860op/s | 5967894.354op/s ± 4366.616op/s | 5967679.742op/s ± 3065.716op/s | 5971127.723op/s | 5975208.665op/s | 5976511.664op/s | 5978343.382op/s | 0.18% | -0.057 | -0.326 | 0.07% | 308.766op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/[empty string] | execution_time | 36.980µs | 37.147µs ± 0.070µs | 37.147µs ± 0.057µs | 37.202µs | 37.254µs | 37.322µs | 37.337µs | 0.51% | 0.168 | -0.594 | 0.19% | 0.005µs | 1 | 200 |
| normalization/normalize_service/normalize_service/[empty string] | throughput | 26783193.515op/s | 26920104.057op/s ± 50690.285op/s | 26920087.089op/s ± 40989.111op/s | 26961710.250op/s | 26997175.836op/s | 27010610.332op/s | 27041596.816op/s | 0.45% | -0.161 | -0.600 | 0.19% | 3584.344op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/test_ASCII | execution_time | 45.394µs | 45.668µs ± 0.164µs | 45.661µs ± 0.108µs | 45.769µs | 45.859µs | 45.925µs | 47.078µs | 3.10% | 3.085 | 25.282 | 0.36% | 0.012µs | 1 | 200 |
| normalization/normalize_service/normalize_service/test_ASCII | throughput | 21241208.795op/s | 21897400.792op/s ± 77908.832op/s | 21900370.598op/s ± 51740.384op/s | 21952074.840op/s | 22001862.435op/s | 22021108.441op/s | 22029224.459op/s | 0.59% | -2.899 | 23.277 | 0.35% | 5508.986op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | execution_time | [493.827µs; 493.967µs] or [-0.014%; +0.014%] | None | None | None |
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | throughput | [2024432.393op/s; 2025000.528op/s] or [-0.014%; +0.014%] | None | None | None |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | execution_time | [370.697µs; 370.786µs] or [-0.012%; +0.012%] | None | None | None |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | throughput | [2696972.965op/s; 2697623.182op/s] or [-0.012%; +0.012%] | None | None | None |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | execution_time | [167.546µs; 167.580µs] or [-0.010%; +0.010%] | None | None | None |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | throughput | [5967289.183op/s; 5968499.525op/s] or [-0.010%; +0.010%] | None | None | None |
| normalization/normalize_service/normalize_service/[empty string] | execution_time | [37.137µs; 37.157µs] or [-0.026%; +0.026%] | None | None | None |
| normalization/normalize_service/normalize_service/[empty string] | throughput | [26913078.871op/s; 26927129.243op/s] or [-0.026%; +0.026%] | None | None | None |
| normalization/normalize_service/normalize_service/test_ASCII | execution_time | [45.645µs; 45.691µs] or [-0.050%; +0.050%] | None | None | None |
| normalization/normalize_service/normalize_service/test_ASCII | throughput | [21886603.378op/s; 21908198.207op/s] or [-0.049%; +0.049%] | None | None | None |
Group 19
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | e2ef20e | 1773078055 | oscarld/init-json-obfuscation |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| two way interface | execution_time | 18.307µs | 26.583µs ± 9.733µs | 18.527µs ± 0.186µs | 34.904µs | 43.062µs | 47.839µs | 68.731µs | 270.97% | 0.849 | 0.433 | 36.52% | 0.688µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| two way interface | execution_time | [25.235µs; 27.932µs] or [-5.074%; +5.074%] | None | None | None |
Baseline
Omitted due to size.
Artifact Size Benchmark Reportaarch64-alpine-linux-musl
aarch64-unknown-linux-gnu
libdatadog-x64-windows
libdatadog-x86-windows
x86_64-alpine-linux-musl
x86_64-unknown-linux-gnu
|
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 5 out of 6 changed files in this pull request and generated 5 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
anais-raison
left a comment
There was a problem hiding this comment.
LGTM expect a few feedbacks on the tests
# What does this PR do? Bump to 29.0.0 [feat(profiling)!: add Tracepoint sample type](#1676) [feat(obfuscation/redis): Reach feature parity on redis obfuscation [APMSP-2668]](#1632) [fix(sidecar): Handle backpressure more gracefully](#1682) [feat(trace-protobuf)!: Add two fields to ClientGroupedStats [SVLS-8627]](#1630) [chore: exclude libdatadog from ADMS auto generated PRs for dependency updates](#1688) [chore(ci): run crashtracking ffi example tests in CI](#1687) [fix(crashtracking): use libunwind to unwind frames](#1663) [feat: publish tracer metadata as OTel process ctx](#1658) [ci: run thread count test in own process](#1693) [feat(obfuscation/json): Init json obfuscation [APMSP-2665]](#1635) [chore(ci): add final_status property on junit XML [APMSP-2610]](#1681) [refactor(data-pipeline-ffi): move macro definitions for better reuse](#1699) [fix(obfuscation/memcached): fuzzing fix](#1695) [ci: replace use of cargo cross for centos7 tests](#1675) #1702 (comment) [feat(stats_exporter)!: add process tags to CSS payloads](#1709) # Motivation I mainly am creating this to use the new unwinding from ucontext for crashtracking # Additional Notes Anything else we should know when reviewing? # How to test the change? Describe here in detail how the change can be validated. [APMSP-2668]: https://datadoghq.atlassian.net/browse/APMSP-2668?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ [SVLS-8627]: https://datadoghq.atlassian.net/browse/SVLS-8627?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ [APMSP-2665]: https://datadoghq.atlassian.net/browse/APMSP-2665?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ Co-authored-by: gyuheon.oh <[email protected]>
What does this PR do?
Motivation
Making libdatadog’s obfuscation feature equivalent to the Agent’s implementation.
Additional Notes
This is not really enough to get full parity because go's json Marshaller doesn't use the exact same format as serde_json's serializer. If the output needs to be byte-per-byte equal a custom serializer needs to be added.(Actually it was not that different, I only needed to change space changes outside top level json objects)How to test the change?