ddtrace 1.4.1 → 1.6.1
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 +144 -1
- data/LICENSE-3rdparty.csv +1 -0
- data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +9 -2
- data/ext/ddtrace_profiling_loader/extconf.rb +17 -0
- data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +38 -2
- data/ext/ddtrace_profiling_native_extension/clock_id.h +1 -0
- data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +1 -0
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +517 -42
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.h +3 -0
- data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time_worker.c +208 -30
- data/ext/ddtrace_profiling_native_extension/collectors_stack.c +156 -46
- data/ext/ddtrace_profiling_native_extension/collectors_stack.h +11 -2
- data/ext/ddtrace_profiling_native_extension/extconf.rb +11 -1
- data/ext/ddtrace_profiling_native_extension/http_transport.c +83 -64
- data/ext/ddtrace_profiling_native_extension/libdatadog_helpers.h +4 -4
- data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +3 -4
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +59 -0
- data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +3 -0
- data/ext/ddtrace_profiling_native_extension/profiling.c +10 -0
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.c +0 -1
- data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +4 -2
- data/ext/ddtrace_profiling_native_extension/stack_recorder.c +45 -29
- data/ext/ddtrace_profiling_native_extension/stack_recorder.h +7 -7
- data/lib/datadog/appsec/assets/waf_rules/recommended.json +1169 -275
- data/lib/datadog/appsec/assets/waf_rules/risky.json +78 -78
- data/lib/datadog/appsec/assets/waf_rules/strict.json +278 -88
- data/lib/datadog/appsec/configuration/settings.rb +0 -2
- data/lib/datadog/appsec/contrib/rack/gateway/watcher.rb +25 -20
- data/lib/datadog/appsec/contrib/rack/reactive/request.rb +11 -11
- data/lib/datadog/appsec/contrib/rack/reactive/request_body.rb +11 -11
- data/lib/datadog/appsec/contrib/rack/reactive/response.rb +11 -11
- data/lib/datadog/appsec/contrib/rack/request.rb +3 -0
- data/lib/datadog/appsec/contrib/rack/request_middleware.rb +46 -19
- data/lib/datadog/appsec/contrib/rails/gateway/watcher.rb +7 -6
- data/lib/datadog/appsec/contrib/rails/integration.rb +1 -1
- data/lib/datadog/appsec/contrib/rails/reactive/action.rb +11 -11
- data/lib/datadog/appsec/contrib/rails/request.rb +3 -0
- data/lib/datadog/appsec/contrib/sinatra/gateway/watcher.rb +14 -12
- data/lib/datadog/appsec/contrib/sinatra/reactive/routed.rb +11 -11
- data/lib/datadog/appsec/event.rb +6 -10
- data/lib/datadog/appsec/instrumentation/gateway.rb +16 -2
- data/lib/datadog/appsec/processor.rb +18 -2
- data/lib/datadog/ci/ext/environment.rb +16 -4
- data/lib/datadog/core/configuration/agent_settings_resolver.rb +0 -3
- data/lib/datadog/core/configuration/components.rb +28 -16
- data/lib/datadog/core/configuration/settings.rb +127 -8
- data/lib/datadog/core/configuration.rb +1 -1
- data/lib/datadog/core/diagnostics/environment_logger.rb +5 -1
- data/lib/datadog/core/header_collection.rb +41 -0
- data/lib/datadog/core/telemetry/collector.rb +0 -2
- data/lib/datadog/core/utils/compression.rb +5 -1
- data/lib/datadog/core/workers/async.rb +0 -2
- data/lib/datadog/core.rb +0 -54
- data/lib/datadog/opentracer/tracer.rb +4 -6
- data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +12 -2
- data/lib/datadog/profiling/collectors/cpu_and_wall_time_worker.rb +5 -3
- data/lib/datadog/profiling/collectors/old_stack.rb +1 -1
- data/lib/datadog/profiling/exporter.rb +2 -4
- data/lib/datadog/profiling/http_transport.rb +1 -1
- data/lib/datadog/profiling.rb +1 -1
- data/lib/datadog/tracing/client_ip.rb +164 -0
- data/lib/datadog/tracing/configuration/ext.rb +14 -0
- data/lib/datadog/tracing/contrib/aws/instrumentation.rb +2 -0
- data/lib/datadog/tracing/contrib/aws/services.rb +0 -2
- data/lib/datadog/tracing/contrib/dalli/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/dalli/instrumentation.rb +4 -0
- data/lib/datadog/tracing/contrib/elasticsearch/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/elasticsearch/patcher.rb +3 -0
- data/lib/datadog/tracing/contrib/ethon/easy_patch.rb +2 -2
- data/lib/datadog/tracing/contrib/ethon/multi_patch.rb +2 -0
- data/lib/datadog/tracing/contrib/excon/middleware.rb +2 -0
- data/lib/datadog/tracing/contrib/ext.rb +25 -0
- data/lib/datadog/tracing/contrib/faraday/middleware.rb +3 -2
- data/lib/datadog/tracing/contrib/grape/endpoint.rb +0 -2
- data/lib/datadog/tracing/contrib/graphql/configuration/settings.rb +1 -1
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +5 -0
- data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb +7 -1
- data/lib/datadog/tracing/contrib/grpc/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/hanami/action_tracer.rb +47 -0
- data/lib/datadog/tracing/contrib/hanami/configuration/settings.rb +22 -0
- data/lib/datadog/tracing/contrib/hanami/ext.rb +24 -0
- data/lib/datadog/tracing/contrib/hanami/integration.rb +44 -0
- data/lib/datadog/tracing/contrib/hanami/patcher.rb +33 -0
- data/lib/datadog/tracing/contrib/hanami/plugin.rb +23 -0
- data/lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb +41 -0
- data/lib/datadog/tracing/contrib/hanami/router_tracing.rb +44 -0
- data/lib/datadog/tracing/contrib/http/instrumentation.rb +2 -0
- data/lib/datadog/tracing/contrib/httpclient/instrumentation.rb +2 -0
- data/lib/datadog/tracing/contrib/httprb/instrumentation.rb +2 -0
- data/lib/datadog/tracing/contrib/mongodb/ext.rb +7 -0
- data/lib/datadog/tracing/contrib/mongodb/subscribers.rb +4 -0
- data/lib/datadog/tracing/contrib/mysql2/configuration/settings.rb +12 -0
- data/lib/datadog/tracing/contrib/mysql2/ext.rb +1 -0
- data/lib/datadog/tracing/contrib/mysql2/instrumentation.rb +16 -0
- data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +12 -0
- data/lib/datadog/tracing/contrib/pg/ext.rb +2 -1
- data/lib/datadog/tracing/contrib/pg/instrumentation.rb +38 -21
- data/lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb +43 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb +32 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb +28 -0
- data/lib/datadog/tracing/contrib/propagation/sql_comment.rb +49 -0
- data/lib/datadog/tracing/contrib/rack/header_collection.rb +35 -0
- data/lib/datadog/tracing/contrib/rack/middlewares.rb +105 -43
- data/lib/datadog/tracing/contrib/redis/ext.rb +2 -0
- data/lib/datadog/tracing/contrib/redis/instrumentation.rb +4 -2
- data/lib/datadog/tracing/contrib/redis/integration.rb +2 -1
- data/lib/datadog/tracing/contrib/redis/patcher.rb +40 -0
- data/lib/datadog/tracing/contrib/redis/tags.rb +5 -0
- data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +2 -0
- data/lib/datadog/tracing/contrib/sinatra/env.rb +12 -23
- data/lib/datadog/tracing/contrib/sinatra/ext.rb +7 -3
- data/lib/datadog/tracing/contrib/sinatra/patcher.rb +2 -2
- data/lib/datadog/tracing/contrib/sinatra/tracer.rb +8 -80
- data/lib/datadog/tracing/contrib/sinatra/tracer_middleware.rb +14 -9
- data/lib/datadog/tracing/contrib/utils/quantization/http.rb +92 -10
- data/lib/datadog/tracing/contrib.rb +1 -0
- data/lib/datadog/tracing/distributed/datadog_tags_codec.rb +84 -0
- data/lib/datadog/tracing/distributed/headers/datadog.rb +122 -30
- data/lib/datadog/tracing/distributed/headers/ext.rb +2 -0
- data/lib/datadog/tracing/flush.rb +57 -35
- data/lib/datadog/tracing/metadata/ext.rb +11 -9
- data/lib/datadog/tracing/metadata/tagging.rb +9 -0
- data/lib/datadog/tracing/propagation/http.rb +9 -1
- data/lib/datadog/tracing/sampling/ext.rb +31 -0
- data/lib/datadog/tracing/sampling/priority_sampler.rb +46 -4
- data/lib/datadog/tracing/sampling/rate_by_key_sampler.rb +8 -9
- data/lib/datadog/tracing/sampling/rate_by_service_sampler.rb +29 -5
- data/lib/datadog/tracing/sampling/rate_limiter.rb +3 -0
- data/lib/datadog/tracing/sampling/rate_sampler.rb +20 -3
- data/lib/datadog/tracing/sampling/rule_sampler.rb +4 -3
- data/lib/datadog/tracing/sampling/span/ext.rb +25 -0
- data/lib/datadog/tracing/sampling/span/matcher.rb +9 -0
- data/lib/datadog/tracing/sampling/span/rule.rb +82 -0
- data/lib/datadog/tracing/sampling/span/rule_parser.rb +104 -0
- data/lib/datadog/tracing/sampling/span/sampler.rb +75 -0
- data/lib/datadog/tracing/span_operation.rb +0 -2
- data/lib/datadog/tracing/trace_digest.rb +3 -0
- data/lib/datadog/tracing/trace_operation.rb +32 -3
- data/lib/datadog/tracing/trace_segment.rb +7 -2
- data/lib/datadog/tracing/tracer.rb +34 -6
- data/lib/datadog/tracing/writer.rb +7 -0
- data/lib/ddtrace/transport/trace_formatter.rb +7 -0
- data/lib/ddtrace/transport/traces.rb +3 -1
- data/lib/ddtrace/version.rb +1 -1
- metadata +36 -18
- data/lib/datadog/profiling/old_ext.rb +0 -42
- data/lib/datadog/profiling/transport/http/api/endpoint.rb +0 -85
- data/lib/datadog/profiling/transport/http/api/instance.rb +0 -38
- data/lib/datadog/profiling/transport/http/api/spec.rb +0 -42
- data/lib/datadog/profiling/transport/http/api.rb +0 -45
- data/lib/datadog/profiling/transport/http/builder.rb +0 -30
- data/lib/datadog/profiling/transport/http/client.rb +0 -37
- data/lib/datadog/profiling/transport/http/response.rb +0 -21
- data/lib/datadog/profiling/transport/http.rb +0 -118
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ddtrace
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.6.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Datadog, Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-
|
|
11
|
+
date: 2022-11-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: msgpack
|
|
@@ -28,44 +28,50 @@ dependencies:
|
|
|
28
28
|
name: debase-ruby_core_source
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: 0.10.16
|
|
34
|
+
- - "<="
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: 0.10.17
|
|
34
37
|
type: :runtime
|
|
35
38
|
prerelease: false
|
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
40
|
requirements:
|
|
38
|
-
- -
|
|
41
|
+
- - ">="
|
|
39
42
|
- !ruby/object:Gem::Version
|
|
40
43
|
version: 0.10.16
|
|
44
|
+
- - "<="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: 0.10.17
|
|
41
47
|
- !ruby/object:Gem::Dependency
|
|
42
48
|
name: libddwaf
|
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
|
44
50
|
requirements:
|
|
45
51
|
- - "~>"
|
|
46
52
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 1.
|
|
53
|
+
version: 1.5.1.0.0
|
|
48
54
|
type: :runtime
|
|
49
55
|
prerelease: false
|
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
57
|
requirements:
|
|
52
58
|
- - "~>"
|
|
53
59
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 1.
|
|
60
|
+
version: 1.5.1.0.0
|
|
55
61
|
- !ruby/object:Gem::Dependency
|
|
56
62
|
name: libdatadog
|
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
|
58
64
|
requirements:
|
|
59
65
|
- - "~>"
|
|
60
66
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 0.
|
|
67
|
+
version: 0.9.0.1.0
|
|
62
68
|
type: :runtime
|
|
63
69
|
prerelease: false
|
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
71
|
requirements:
|
|
66
72
|
- - "~>"
|
|
67
73
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 0.
|
|
74
|
+
version: 0.9.0.1.0
|
|
69
75
|
description: |
|
|
70
76
|
ddtrace is Datadog's tracing client for Ruby. It is used to trace requests
|
|
71
77
|
as they flow across web servers, databases and microservices so that developers
|
|
@@ -217,6 +223,7 @@ files:
|
|
|
217
223
|
- lib/datadog/core/error.rb
|
|
218
224
|
- lib/datadog/core/extensions.rb
|
|
219
225
|
- lib/datadog/core/git/ext.rb
|
|
226
|
+
- lib/datadog/core/header_collection.rb
|
|
220
227
|
- lib/datadog/core/logger.rb
|
|
221
228
|
- lib/datadog/core/logging/ext.rb
|
|
222
229
|
- lib/datadog/core/metrics/client.rb
|
|
@@ -307,7 +314,6 @@ files:
|
|
|
307
314
|
- lib/datadog/profiling/http_transport.rb
|
|
308
315
|
- lib/datadog/profiling/load_native_extension.rb
|
|
309
316
|
- lib/datadog/profiling/native_extension.rb
|
|
310
|
-
- lib/datadog/profiling/old_ext.rb
|
|
311
317
|
- lib/datadog/profiling/old_recorder.rb
|
|
312
318
|
- lib/datadog/profiling/pprof/builder.rb
|
|
313
319
|
- lib/datadog/profiling/pprof/converter.rb
|
|
@@ -328,17 +334,10 @@ files:
|
|
|
328
334
|
- lib/datadog/profiling/tasks/setup.rb
|
|
329
335
|
- lib/datadog/profiling/trace_identifiers/ddtrace.rb
|
|
330
336
|
- lib/datadog/profiling/trace_identifiers/helper.rb
|
|
331
|
-
- lib/datadog/profiling/transport/http.rb
|
|
332
|
-
- lib/datadog/profiling/transport/http/api.rb
|
|
333
|
-
- lib/datadog/profiling/transport/http/api/endpoint.rb
|
|
334
|
-
- lib/datadog/profiling/transport/http/api/instance.rb
|
|
335
|
-
- lib/datadog/profiling/transport/http/api/spec.rb
|
|
336
|
-
- lib/datadog/profiling/transport/http/builder.rb
|
|
337
|
-
- lib/datadog/profiling/transport/http/client.rb
|
|
338
|
-
- lib/datadog/profiling/transport/http/response.rb
|
|
339
337
|
- lib/datadog/tracing.rb
|
|
340
338
|
- lib/datadog/tracing/analytics.rb
|
|
341
339
|
- lib/datadog/tracing/buffer.rb
|
|
340
|
+
- lib/datadog/tracing/client_ip.rb
|
|
342
341
|
- lib/datadog/tracing/configuration/ext.rb
|
|
343
342
|
- lib/datadog/tracing/context.rb
|
|
344
343
|
- lib/datadog/tracing/context_provider.rb
|
|
@@ -470,6 +469,7 @@ files:
|
|
|
470
469
|
- lib/datadog/tracing/contrib/excon/integration.rb
|
|
471
470
|
- lib/datadog/tracing/contrib/excon/middleware.rb
|
|
472
471
|
- lib/datadog/tracing/contrib/excon/patcher.rb
|
|
472
|
+
- lib/datadog/tracing/contrib/ext.rb
|
|
473
473
|
- lib/datadog/tracing/contrib/extensions.rb
|
|
474
474
|
- lib/datadog/tracing/contrib/faraday/configuration/settings.rb
|
|
475
475
|
- lib/datadog/tracing/contrib/faraday/connection.rb
|
|
@@ -496,6 +496,14 @@ files:
|
|
|
496
496
|
- lib/datadog/tracing/contrib/grpc/integration.rb
|
|
497
497
|
- lib/datadog/tracing/contrib/grpc/intercept_with_datadog.rb
|
|
498
498
|
- lib/datadog/tracing/contrib/grpc/patcher.rb
|
|
499
|
+
- lib/datadog/tracing/contrib/hanami/action_tracer.rb
|
|
500
|
+
- lib/datadog/tracing/contrib/hanami/configuration/settings.rb
|
|
501
|
+
- lib/datadog/tracing/contrib/hanami/ext.rb
|
|
502
|
+
- lib/datadog/tracing/contrib/hanami/integration.rb
|
|
503
|
+
- lib/datadog/tracing/contrib/hanami/patcher.rb
|
|
504
|
+
- lib/datadog/tracing/contrib/hanami/plugin.rb
|
|
505
|
+
- lib/datadog/tracing/contrib/hanami/renderer_policy_tracing.rb
|
|
506
|
+
- lib/datadog/tracing/contrib/hanami/router_tracing.rb
|
|
499
507
|
- lib/datadog/tracing/contrib/http/circuit_breaker.rb
|
|
500
508
|
- lib/datadog/tracing/contrib/http/configuration/settings.rb
|
|
501
509
|
- lib/datadog/tracing/contrib/http/ext.rb
|
|
@@ -560,6 +568,10 @@ files:
|
|
|
560
568
|
- lib/datadog/tracing/contrib/presto/instrumentation.rb
|
|
561
569
|
- lib/datadog/tracing/contrib/presto/integration.rb
|
|
562
570
|
- lib/datadog/tracing/contrib/presto/patcher.rb
|
|
571
|
+
- lib/datadog/tracing/contrib/propagation/sql_comment.rb
|
|
572
|
+
- lib/datadog/tracing/contrib/propagation/sql_comment/comment.rb
|
|
573
|
+
- lib/datadog/tracing/contrib/propagation/sql_comment/ext.rb
|
|
574
|
+
- lib/datadog/tracing/contrib/propagation/sql_comment/mode.rb
|
|
563
575
|
- lib/datadog/tracing/contrib/qless/configuration/settings.rb
|
|
564
576
|
- lib/datadog/tracing/contrib/qless/ext.rb
|
|
565
577
|
- lib/datadog/tracing/contrib/qless/integration.rb
|
|
@@ -582,6 +594,7 @@ files:
|
|
|
582
594
|
- lib/datadog/tracing/contrib/racecar/patcher.rb
|
|
583
595
|
- lib/datadog/tracing/contrib/rack/configuration/settings.rb
|
|
584
596
|
- lib/datadog/tracing/contrib/rack/ext.rb
|
|
597
|
+
- lib/datadog/tracing/contrib/rack/header_collection.rb
|
|
585
598
|
- lib/datadog/tracing/contrib/rack/integration.rb
|
|
586
599
|
- lib/datadog/tracing/contrib/rack/middlewares.rb
|
|
587
600
|
- lib/datadog/tracing/contrib/rack/patcher.rb
|
|
@@ -676,6 +689,7 @@ files:
|
|
|
676
689
|
- lib/datadog/tracing/contrib/utils/quantization/hash.rb
|
|
677
690
|
- lib/datadog/tracing/contrib/utils/quantization/http.rb
|
|
678
691
|
- lib/datadog/tracing/correlation.rb
|
|
692
|
+
- lib/datadog/tracing/distributed/datadog_tags_codec.rb
|
|
679
693
|
- lib/datadog/tracing/distributed/headers/b3.rb
|
|
680
694
|
- lib/datadog/tracing/distributed/headers/b3_single.rb
|
|
681
695
|
- lib/datadog/tracing/distributed/headers/datadog.rb
|
|
@@ -710,7 +724,11 @@ files:
|
|
|
710
724
|
- lib/datadog/tracing/sampling/rule.rb
|
|
711
725
|
- lib/datadog/tracing/sampling/rule_sampler.rb
|
|
712
726
|
- lib/datadog/tracing/sampling/sampler.rb
|
|
727
|
+
- lib/datadog/tracing/sampling/span/ext.rb
|
|
713
728
|
- lib/datadog/tracing/sampling/span/matcher.rb
|
|
729
|
+
- lib/datadog/tracing/sampling/span/rule.rb
|
|
730
|
+
- lib/datadog/tracing/sampling/span/rule_parser.rb
|
|
731
|
+
- lib/datadog/tracing/sampling/span/sampler.rb
|
|
714
732
|
- lib/datadog/tracing/span.rb
|
|
715
733
|
- lib/datadog/tracing/span_operation.rb
|
|
716
734
|
- lib/datadog/tracing/sync_writer.rb
|
|
@@ -778,7 +796,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
778
796
|
- !ruby/object:Gem::Version
|
|
779
797
|
version: 2.0.0
|
|
780
798
|
requirements: []
|
|
781
|
-
rubygems_version: 3.3.
|
|
799
|
+
rubygems_version: 3.3.7
|
|
782
800
|
signing_key:
|
|
783
801
|
specification_version: 4
|
|
784
802
|
summary: Datadog tracing code for your Ruby applications
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
module Datadog
|
|
4
|
-
module Profiling
|
|
5
|
-
# NOTE: This OldExt file is temporary and expected to be removed once the migration to the new `HttpTransport` class
|
|
6
|
-
# is complete
|
|
7
|
-
module OldExt
|
|
8
|
-
module Transport
|
|
9
|
-
module HTTP
|
|
10
|
-
URI_TEMPLATE_DD_API = 'https://intake.profile.%s/'.freeze
|
|
11
|
-
|
|
12
|
-
FORM_FIELD_RECORDING_START = 'start'.freeze
|
|
13
|
-
FORM_FIELD_RECORDING_END = 'end'.freeze
|
|
14
|
-
FORM_FIELD_FAMILY = 'family'.freeze
|
|
15
|
-
FORM_FIELD_TAG_ENV = 'env'.freeze
|
|
16
|
-
FORM_FIELD_TAG_HOST = 'host'.freeze
|
|
17
|
-
FORM_FIELD_TAG_LANGUAGE = 'language'.freeze
|
|
18
|
-
FORM_FIELD_TAG_PID = 'process_id'.freeze
|
|
19
|
-
FORM_FIELD_TAG_PROFILER_VERSION = 'profiler_version'.freeze
|
|
20
|
-
FORM_FIELD_TAG_RUNTIME = 'runtime'.freeze
|
|
21
|
-
FORM_FIELD_TAG_RUNTIME_ENGINE = 'runtime_engine'.freeze
|
|
22
|
-
FORM_FIELD_TAG_RUNTIME_ID = 'runtime-id'.freeze
|
|
23
|
-
FORM_FIELD_TAG_RUNTIME_PLATFORM = 'runtime_platform'.freeze
|
|
24
|
-
FORM_FIELD_TAG_RUNTIME_VERSION = 'runtime_version'.freeze
|
|
25
|
-
FORM_FIELD_TAG_SERVICE = 'service'.freeze
|
|
26
|
-
FORM_FIELD_TAG_VERSION = 'version'.freeze
|
|
27
|
-
FORM_FIELD_TAGS = 'tags'.freeze
|
|
28
|
-
FORM_FIELD_INTAKE_VERSION = 'version'.freeze
|
|
29
|
-
|
|
30
|
-
HEADER_CONTENT_TYPE = 'Content-Type'.freeze
|
|
31
|
-
HEADER_CONTENT_TYPE_OCTET_STREAM = 'application/octet-stream'.freeze
|
|
32
|
-
|
|
33
|
-
FORM_FIELD_PPROF_DATA = 'data[rubyprofile.pprof]'.freeze
|
|
34
|
-
PPROF_DEFAULT_FILENAME = 'rubyprofile.pprof.gz'.freeze
|
|
35
|
-
|
|
36
|
-
FORM_FIELD_CODE_PROVENANCE_DATA = 'data[code-provenance.json]'.freeze
|
|
37
|
-
CODE_PROVENANCE_FILENAME = 'code-provenance.json.gz'.freeze
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../../../core/utils/compression'
|
|
4
|
-
require_relative '../../../../core/vendor/multipart-post/multipart/post/composite_read_io'
|
|
5
|
-
require_relative '../../../old_ext'
|
|
6
|
-
require_relative '../response'
|
|
7
|
-
require_relative '../../../../../ddtrace/transport/http/api/endpoint'
|
|
8
|
-
|
|
9
|
-
module Datadog
|
|
10
|
-
module Profiling
|
|
11
|
-
module Transport
|
|
12
|
-
module HTTP
|
|
13
|
-
module API
|
|
14
|
-
# Datadog API endpoint for profiling
|
|
15
|
-
class Endpoint < Datadog::Transport::HTTP::API::Endpoint
|
|
16
|
-
include Profiling::OldExt::Transport::HTTP
|
|
17
|
-
|
|
18
|
-
# These tags are read from the flush object (see below) directly and so we ignore any extra copies that
|
|
19
|
-
# may come in the tags hash to avoid duplicates.
|
|
20
|
-
TAGS_TO_IGNORE_IN_TAGS_HASH = %w[service env version].freeze
|
|
21
|
-
private_constant :TAGS_TO_IGNORE_IN_TAGS_HASH
|
|
22
|
-
|
|
23
|
-
attr_reader \
|
|
24
|
-
:encoder
|
|
25
|
-
|
|
26
|
-
def initialize(path, encoder = nil)
|
|
27
|
-
super(:post, path)
|
|
28
|
-
@encoder = encoder
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def call(env, &block)
|
|
32
|
-
# Build request
|
|
33
|
-
env.form = build_form(env)
|
|
34
|
-
|
|
35
|
-
# Send request
|
|
36
|
-
http_response = super(env, &block)
|
|
37
|
-
|
|
38
|
-
# Build response
|
|
39
|
-
Profiling::Transport::HTTP::Response.new(http_response)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def build_form(env)
|
|
43
|
-
flush = env.request
|
|
44
|
-
pprof_file = build_pprof(flush)
|
|
45
|
-
|
|
46
|
-
form = {
|
|
47
|
-
FORM_FIELD_INTAKE_VERSION => '3', # Aka 1.3 intake format
|
|
48
|
-
FORM_FIELD_RECORDING_START => flush.start.utc.iso8601,
|
|
49
|
-
FORM_FIELD_RECORDING_END => flush.finish.utc.iso8601,
|
|
50
|
-
FORM_FIELD_TAGS => flush.tags_as_array.map { |key, value| "#{key}:#{value}" },
|
|
51
|
-
FORM_FIELD_PPROF_DATA => pprof_file,
|
|
52
|
-
FORM_FIELD_FAMILY => 'ruby',
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
# May not be available/enabled
|
|
56
|
-
form[FORM_FIELD_CODE_PROVENANCE_DATA] = build_code_provenance(flush) if flush.code_provenance_data
|
|
57
|
-
|
|
58
|
-
form
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def build_pprof(flush)
|
|
62
|
-
gzipped_pprof_data = flush.pprof_data
|
|
63
|
-
|
|
64
|
-
Core::Vendor::Multipart::Post::UploadIO.new(
|
|
65
|
-
StringIO.new(gzipped_pprof_data),
|
|
66
|
-
HEADER_CONTENT_TYPE_OCTET_STREAM,
|
|
67
|
-
PPROF_DEFAULT_FILENAME
|
|
68
|
-
)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def build_code_provenance(flush)
|
|
72
|
-
gzipped_code_provenance = flush.code_provenance_data
|
|
73
|
-
|
|
74
|
-
Core::Vendor::Multipart::Post::UploadIO.new(
|
|
75
|
-
StringIO.new(gzipped_code_provenance),
|
|
76
|
-
HEADER_CONTENT_TYPE_OCTET_STREAM,
|
|
77
|
-
CODE_PROVENANCE_FILENAME,
|
|
78
|
-
)
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../../../../ddtrace/transport/http/api/instance'
|
|
4
|
-
require_relative 'spec'
|
|
5
|
-
|
|
6
|
-
module Datadog
|
|
7
|
-
module Profiling
|
|
8
|
-
module Transport
|
|
9
|
-
module HTTP
|
|
10
|
-
module API
|
|
11
|
-
# API instance for profiling
|
|
12
|
-
class Instance < Datadog::Transport::HTTP::API::Instance
|
|
13
|
-
def send_profiling_flush(env)
|
|
14
|
-
raise ProfilesNotSupportedError, spec unless spec.is_a?(Spec)
|
|
15
|
-
|
|
16
|
-
spec.send_profiling_flush(env) do |request_env|
|
|
17
|
-
call(request_env)
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# Raised when profiles sent to API that does not support profiles
|
|
22
|
-
class ProfilesNotSupportedError < StandardError
|
|
23
|
-
attr_reader :spec
|
|
24
|
-
|
|
25
|
-
def initialize(spec)
|
|
26
|
-
@spec = spec
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def message
|
|
30
|
-
'Profiles not supported for this API!'
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../../../../ddtrace/transport/http/api/spec'
|
|
4
|
-
|
|
5
|
-
module Datadog
|
|
6
|
-
module Profiling
|
|
7
|
-
module Transport
|
|
8
|
-
module HTTP
|
|
9
|
-
module API
|
|
10
|
-
# API specification for profiling
|
|
11
|
-
class Spec < Datadog::Transport::HTTP::API::Spec
|
|
12
|
-
attr_accessor \
|
|
13
|
-
:profiles
|
|
14
|
-
|
|
15
|
-
def send_profiling_flush(env, &block)
|
|
16
|
-
raise NoProfilesEndpointDefinedError, self if profiles.nil?
|
|
17
|
-
|
|
18
|
-
profiles.call(env, &block)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def encoder
|
|
22
|
-
profiles.encoder
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
# Raised when profiles sent but no profiles endpoint is defined
|
|
26
|
-
class NoProfilesEndpointDefinedError < StandardError
|
|
27
|
-
attr_reader :spec
|
|
28
|
-
|
|
29
|
-
def initialize(spec)
|
|
30
|
-
@spec = spec
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def message
|
|
34
|
-
'No profiles endpoint is defined for API specification!'
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../../../ddtrace/transport/http/api/map'
|
|
4
|
-
require_relative '../../encoding/profile'
|
|
5
|
-
require_relative 'api/spec'
|
|
6
|
-
require_relative 'api/instance'
|
|
7
|
-
require_relative 'api/endpoint'
|
|
8
|
-
|
|
9
|
-
module Datadog
|
|
10
|
-
module Profiling
|
|
11
|
-
module Transport
|
|
12
|
-
module HTTP
|
|
13
|
-
# Extensions for HTTP API Spec
|
|
14
|
-
module API
|
|
15
|
-
# Default API versions
|
|
16
|
-
V1 = 'v1'.freeze
|
|
17
|
-
|
|
18
|
-
module_function
|
|
19
|
-
|
|
20
|
-
def agent_defaults
|
|
21
|
-
@agent_defaults ||= Datadog::Transport::HTTP::API::Map[
|
|
22
|
-
V1 => Spec.new do |s|
|
|
23
|
-
s.profiles = Endpoint.new(
|
|
24
|
-
'/profiling/v1/input'.freeze,
|
|
25
|
-
Profiling::Encoding::Profile::Protobuf
|
|
26
|
-
)
|
|
27
|
-
end
|
|
28
|
-
]
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def api_defaults
|
|
32
|
-
@api_defaults ||= Datadog::Transport::HTTP::API::Map[
|
|
33
|
-
V1 => Spec.new do |s|
|
|
34
|
-
s.profiles = Endpoint.new(
|
|
35
|
-
'/v1/input'.freeze,
|
|
36
|
-
Profiling::Encoding::Profile::Protobuf
|
|
37
|
-
)
|
|
38
|
-
end
|
|
39
|
-
]
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../../../ddtrace/transport/http/builder'
|
|
4
|
-
|
|
5
|
-
require_relative 'api'
|
|
6
|
-
require_relative 'client'
|
|
7
|
-
|
|
8
|
-
module Datadog
|
|
9
|
-
module Profiling
|
|
10
|
-
module Transport
|
|
11
|
-
module HTTP
|
|
12
|
-
# Builds new instances of Transport::HTTP::Client
|
|
13
|
-
class Builder < Datadog::Transport::HTTP::Builder
|
|
14
|
-
def api_instance_class
|
|
15
|
-
API::Instance
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def to_transport
|
|
19
|
-
raise Datadog::Transport::HTTP::Builder::NoDefaultApiError if @default_api.nil?
|
|
20
|
-
|
|
21
|
-
# TODO: Profiling doesn't have multiple APIs yet.
|
|
22
|
-
# When it does, we should build it out with these APIs.
|
|
23
|
-
# Just use :default_api for now.
|
|
24
|
-
Client.new(to_api_instances[@default_api])
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
end
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../../../ddtrace/transport/http/client'
|
|
4
|
-
require_relative '../../../../ddtrace/transport/request'
|
|
5
|
-
|
|
6
|
-
module Datadog
|
|
7
|
-
module Profiling
|
|
8
|
-
module Transport
|
|
9
|
-
module HTTP
|
|
10
|
-
# Routes, encodes, and sends tracer data to the trace agent via HTTP.
|
|
11
|
-
class Client < Datadog::Transport::HTTP::Client
|
|
12
|
-
def export(flush)
|
|
13
|
-
send_profiling_flush(flush)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def send_profiling_flush(flush)
|
|
17
|
-
# Build a request
|
|
18
|
-
request = flush
|
|
19
|
-
send_payload(request).tap do |response|
|
|
20
|
-
if response.ok?
|
|
21
|
-
Datadog.logger.debug('Successfully reported profiling data')
|
|
22
|
-
else
|
|
23
|
-
Datadog.logger.debug { "Failed to report profiling data -- #{response.inspect}" }
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def send_payload(request)
|
|
29
|
-
send_request(request) do |api, env|
|
|
30
|
-
api.send_profiling_flush(env)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../../../ddtrace/transport/http/response'
|
|
4
|
-
|
|
5
|
-
module Datadog
|
|
6
|
-
module Profiling
|
|
7
|
-
module Transport
|
|
8
|
-
# HTTP transport behavior for profiling
|
|
9
|
-
module HTTP
|
|
10
|
-
# Response from HTTP transport for profiling
|
|
11
|
-
class Response
|
|
12
|
-
include Datadog::Transport::HTTP::Response
|
|
13
|
-
|
|
14
|
-
def initialize(http_response, options = {})
|
|
15
|
-
super(http_response)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
# typed: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../core/environment/ext'
|
|
4
|
-
require_relative '../../../ddtrace/transport/ext'
|
|
5
|
-
|
|
6
|
-
require_relative '../../core/environment/container'
|
|
7
|
-
require_relative '../../core/environment/variable_helpers'
|
|
8
|
-
|
|
9
|
-
require_relative 'http/builder'
|
|
10
|
-
require_relative 'http/api'
|
|
11
|
-
|
|
12
|
-
require_relative '../../../ddtrace/transport/http/adapters/net'
|
|
13
|
-
require_relative '../../../ddtrace/transport/http/adapters/test'
|
|
14
|
-
require_relative '../../../ddtrace/transport/http/adapters/unix_socket'
|
|
15
|
-
|
|
16
|
-
module Datadog
|
|
17
|
-
module Profiling
|
|
18
|
-
module Transport
|
|
19
|
-
# Namespace for HTTP transport components
|
|
20
|
-
module HTTP
|
|
21
|
-
# Builds a new Transport::HTTP::Client
|
|
22
|
-
def self.new(&block)
|
|
23
|
-
Builder.new(&block).to_transport
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Builds a new Transport::HTTP::Client with default settings
|
|
27
|
-
def self.default(
|
|
28
|
-
profiling_upload_timeout_seconds:,
|
|
29
|
-
agent_settings:,
|
|
30
|
-
site: nil,
|
|
31
|
-
api_key: nil,
|
|
32
|
-
agentless_allowed: agentless_allowed?
|
|
33
|
-
)
|
|
34
|
-
new do |transport|
|
|
35
|
-
transport.headers default_headers
|
|
36
|
-
|
|
37
|
-
# Configure adapter & API
|
|
38
|
-
if site && api_key && agentless_allowed
|
|
39
|
-
configure_for_agentless(
|
|
40
|
-
transport,
|
|
41
|
-
profiling_upload_timeout_seconds: profiling_upload_timeout_seconds,
|
|
42
|
-
site: site,
|
|
43
|
-
api_key: api_key
|
|
44
|
-
)
|
|
45
|
-
else
|
|
46
|
-
configure_for_agent(
|
|
47
|
-
transport,
|
|
48
|
-
profiling_upload_timeout_seconds: profiling_upload_timeout_seconds,
|
|
49
|
-
agent_settings: agent_settings
|
|
50
|
-
)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def self.default_headers
|
|
56
|
-
{
|
|
57
|
-
Datadog::Transport::Ext::HTTP::HEADER_META_LANG => Core::Environment::Ext::LANG,
|
|
58
|
-
Datadog::Transport::Ext::HTTP::HEADER_META_LANG_VERSION => Core::Environment::Ext::LANG_VERSION,
|
|
59
|
-
Datadog::Transport::Ext::HTTP::HEADER_META_LANG_INTERPRETER => Core::Environment::Ext::LANG_INTERPRETER,
|
|
60
|
-
Datadog::Transport::Ext::HTTP::HEADER_META_TRACER_VERSION => Core::Environment::Ext::TRACER_VERSION
|
|
61
|
-
}.tap do |headers|
|
|
62
|
-
# Add container ID, if present.
|
|
63
|
-
container_id = Core::Environment::Container.container_id
|
|
64
|
-
headers[Datadog::Transport::Ext::HTTP::HEADER_CONTAINER_ID] = container_id unless container_id.nil?
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
private_class_method def self.configure_for_agent(transport, profiling_upload_timeout_seconds:, agent_settings:)
|
|
69
|
-
apis = API.agent_defaults
|
|
70
|
-
|
|
71
|
-
transport.adapter(agent_settings.merge(timeout_seconds: profiling_upload_timeout_seconds))
|
|
72
|
-
transport.api(API::V1, apis[API::V1], default: true)
|
|
73
|
-
|
|
74
|
-
# NOTE: This proc, when it exists, usually overrides the transport specified above
|
|
75
|
-
if agent_settings.deprecated_for_removal_transport_configuration_proc
|
|
76
|
-
agent_settings.deprecated_for_removal_transport_configuration_proc.call(transport)
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
private_class_method def self.configure_for_agentless(transport, profiling_upload_timeout_seconds:, site:, api_key:)
|
|
81
|
-
apis = API.api_defaults
|
|
82
|
-
|
|
83
|
-
site_uri = URI(format(Profiling::OldExt::Transport::HTTP::URI_TEMPLATE_DD_API, site))
|
|
84
|
-
hostname = site_uri.host
|
|
85
|
-
port = site_uri.port
|
|
86
|
-
|
|
87
|
-
transport.adapter(
|
|
88
|
-
Datadog::Transport::Ext::HTTP::ADAPTER,
|
|
89
|
-
hostname,
|
|
90
|
-
port,
|
|
91
|
-
timeout: profiling_upload_timeout_seconds,
|
|
92
|
-
ssl: site_uri.scheme == 'https'
|
|
93
|
-
)
|
|
94
|
-
transport.api(API::V1, apis[API::V1], default: true)
|
|
95
|
-
transport.headers(Datadog::Transport::Ext::HTTP::HEADER_DD_API_KEY => api_key)
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
private_class_method def self.agentless_allowed?
|
|
99
|
-
Core::Environment::VariableHelpers.env_to_bool(Profiling::Ext::ENV_AGENTLESS, false)
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
# Add adapters to registry
|
|
103
|
-
Datadog::Transport::HTTP::Builder::REGISTRY.set(
|
|
104
|
-
Datadog::Transport::HTTP::Adapters::Net,
|
|
105
|
-
Datadog::Transport::Ext::HTTP::ADAPTER
|
|
106
|
-
)
|
|
107
|
-
Datadog::Transport::HTTP::Builder::REGISTRY.set(
|
|
108
|
-
Datadog::Transport::HTTP::Adapters::Test,
|
|
109
|
-
Datadog::Transport::Ext::Test::ADAPTER
|
|
110
|
-
)
|
|
111
|
-
Datadog::Transport::HTTP::Builder::REGISTRY.set(
|
|
112
|
-
Datadog::Transport::HTTP::Adapters::UnixSocket,
|
|
113
|
-
Datadog::Transport::Ext::UnixSocket::ADAPTER
|
|
114
|
-
)
|
|
115
|
-
end
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
end
|