ddtrace 1.1.0 → 1.2.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.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +59 -1
  3. data/CONTRIBUTING.md +1 -1
  4. data/README.md +7 -2
  5. data/ddtrace.gemspec +5 -2
  6. data/docs/GettingStarted.md +27 -3
  7. data/docs/ProfilingDevelopment.md +27 -28
  8. data/docs/UpgradeGuide.md +1 -1
  9. data/ext/ddtrace_profiling_loader/ddtrace_profiling_loader.c +1 -1
  10. data/ext/ddtrace_profiling_loader/extconf.rb +1 -0
  11. data/ext/ddtrace_profiling_native_extension/NativeExtensionDesign.md +6 -5
  12. data/ext/ddtrace_profiling_native_extension/clock_id.h +1 -1
  13. data/ext/ddtrace_profiling_native_extension/clock_id_from_pthread.c +1 -1
  14. data/ext/ddtrace_profiling_native_extension/clock_id_noop.c +1 -1
  15. data/ext/ddtrace_profiling_native_extension/collectors_cpu_and_wall_time.c +269 -0
  16. data/ext/ddtrace_profiling_native_extension/collectors_stack.c +12 -12
  17. data/ext/ddtrace_profiling_native_extension/collectors_stack.h +9 -0
  18. data/ext/ddtrace_profiling_native_extension/extconf.rb +44 -3
  19. data/ext/ddtrace_profiling_native_extension/http_transport.c +341 -0
  20. data/ext/ddtrace_profiling_native_extension/native_extension_helpers.rb +92 -4
  21. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.c +76 -1
  22. data/ext/ddtrace_profiling_native_extension/private_vm_api_access.h +3 -0
  23. data/ext/ddtrace_profiling_native_extension/profiling.c +4 -0
  24. data/ext/ddtrace_profiling_native_extension/ruby_helpers.h +33 -0
  25. data/ext/ddtrace_profiling_native_extension/stack_recorder.c +18 -10
  26. data/ext/ddtrace_profiling_native_extension/stack_recorder.h +10 -1
  27. data/lib/datadog/core/configuration/components.rb +39 -24
  28. data/lib/datadog/core/configuration/settings.rb +8 -1
  29. data/lib/datadog/core/environment/platform.rb +40 -0
  30. data/lib/datadog/core/utils.rb +1 -1
  31. data/lib/datadog/opentracer/thread_local_scope_manager.rb +26 -3
  32. data/lib/datadog/profiling/collectors/code_provenance.rb +1 -0
  33. data/lib/datadog/profiling/collectors/cpu_and_wall_time.rb +42 -0
  34. data/lib/datadog/profiling/collectors/stack.rb +2 -0
  35. data/lib/datadog/profiling/encoding/profile.rb +7 -11
  36. data/lib/datadog/profiling/exporter.rb +58 -9
  37. data/lib/datadog/profiling/ext/forking.rb +8 -8
  38. data/lib/datadog/profiling/ext.rb +2 -15
  39. data/lib/datadog/profiling/flush.rb +25 -53
  40. data/lib/datadog/profiling/http_transport.rb +131 -0
  41. data/lib/datadog/profiling/old_ext.rb +42 -0
  42. data/lib/datadog/profiling/{recorder.rb → old_recorder.rb} +20 -31
  43. data/lib/datadog/profiling/scheduler.rb +24 -43
  44. data/lib/datadog/profiling/transport/http/api/endpoint.rb +9 -31
  45. data/lib/datadog/profiling/transport/http/client.rb +5 -3
  46. data/lib/datadog/profiling/transport/http/response.rb +0 -2
  47. data/lib/datadog/profiling/transport/http.rb +1 -1
  48. data/lib/datadog/profiling.rb +3 -3
  49. data/lib/datadog/tracing/context_provider.rb +17 -1
  50. data/lib/datadog/tracing/contrib/action_pack/action_controller/instrumentation.rb +4 -0
  51. data/lib/datadog/tracing/contrib/grpc/configuration/settings.rb +1 -0
  52. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor/client.rb +1 -1
  53. data/lib/datadog/tracing/contrib/grpc/datadog_interceptor.rb +4 -0
  54. data/lib/datadog/tracing/contrib/pg/configuration/settings.rb +35 -0
  55. data/lib/datadog/tracing/contrib/pg/ext.rb +31 -0
  56. data/lib/datadog/tracing/contrib/pg/instrumentation.rb +129 -0
  57. data/lib/datadog/tracing/contrib/pg/integration.rb +43 -0
  58. data/lib/datadog/tracing/contrib/pg/patcher.rb +31 -0
  59. data/lib/datadog/tracing/contrib/rails/configuration/settings.rb +3 -0
  60. data/lib/datadog/tracing/contrib/rails/framework.rb +2 -1
  61. data/lib/datadog/tracing/contrib/rest_client/configuration/settings.rb +1 -0
  62. data/lib/datadog/tracing/contrib/rest_client/request_patch.rb +1 -1
  63. data/lib/datadog/tracing/contrib.rb +1 -0
  64. data/lib/datadog/tracing/distributed/headers/b3.rb +1 -1
  65. data/lib/datadog/tracing/distributed/headers/b3_single.rb +4 -4
  66. data/lib/datadog/tracing/distributed/headers/datadog.rb +1 -1
  67. data/lib/datadog/tracing/distributed/headers/parser.rb +37 -0
  68. data/lib/datadog/tracing/distributed/helpers.rb +34 -0
  69. data/lib/datadog/tracing/distributed/metadata/b3.rb +55 -0
  70. data/lib/datadog/tracing/distributed/metadata/b3_single.rb +66 -0
  71. data/lib/datadog/tracing/distributed/metadata/datadog.rb +73 -0
  72. data/lib/datadog/tracing/distributed/metadata/parser.rb +34 -0
  73. data/lib/datadog/tracing/metadata/ext.rb +25 -0
  74. data/lib/datadog/tracing/metadata/tagging.rb +6 -0
  75. data/lib/datadog/tracing/propagation/grpc.rb +65 -55
  76. data/lib/datadog/tracing/sampling/rate_sampler.rb +2 -2
  77. data/lib/datadog/tracing/sampling/span/matcher.rb +80 -0
  78. data/lib/datadog/tracing/span.rb +21 -1
  79. data/lib/datadog/tracing/span_operation.rb +2 -1
  80. data/lib/ddtrace/version.rb +1 -1
  81. metadata +24 -13
  82. data/lib/datadog/profiling/transport/client.rb +0 -16
  83. data/lib/datadog/profiling/transport/io/client.rb +0 -29
  84. data/lib/datadog/profiling/transport/io/response.rb +0 -18
  85. data/lib/datadog/profiling/transport/io.rb +0 -32
  86. data/lib/datadog/profiling/transport/parcel.rb +0 -19
  87. data/lib/datadog/profiling/transport/request.rb +0 -17
  88. data/lib/datadog/profiling/transport/response.rb +0 -10
  89. data/lib/datadog/tracing/distributed/parser.rb +0 -70
@@ -1,18 +0,0 @@
1
- # typed: strict
2
-
3
- require 'ddtrace/transport/io/response'
4
- require 'datadog/profiling/transport/response'
5
-
6
- module Datadog
7
- module Profiling
8
- module Transport
9
- # IO transport behavior for profiling
10
- module IO
11
- # Response from IO transport for profiling
12
- class Response < Datadog::Transport::IO::Response
13
- include Profiling::Transport::Response
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,32 +0,0 @@
1
- # typed: true
2
-
3
- require 'datadog/profiling/transport/io/client'
4
- require 'datadog/profiling/encoding/profile'
5
-
6
- module Datadog
7
- module Profiling
8
- module Transport
9
- # Namespace for profiling IO transport components
10
- module IO
11
- module_function
12
-
13
- # Builds a new Profiling::Transport::IO::Client
14
- def new(out, encoder, options = {})
15
- Client.new(out, encoder, options)
16
- end
17
-
18
- # Builds a new Profiling::Transport::IO::Client with default settings
19
- # Pass options to override any settings.
20
- def default(options = {})
21
- options = options.dup
22
-
23
- new(
24
- options.delete(:out) || $stdout,
25
- options.delete(:encoder) || Profiling::Encoding::Profile::Protobuf,
26
- options
27
- )
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,19 +0,0 @@
1
- # typed: true
2
-
3
- require 'ddtrace/transport/parcel'
4
-
5
- module Datadog
6
- module Profiling
7
- module Transport
8
- # Data transfer object for profiling data
9
- class Parcel
10
- include Datadog::Transport::Parcel
11
-
12
- def encode_with(encoder)
13
- # TODO: Determine encoding behavior
14
- encoder.encode(data)
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,17 +0,0 @@
1
- # typed: true
2
-
3
- require 'ddtrace/transport/request'
4
- require 'datadog/profiling/transport/parcel'
5
-
6
- module Datadog
7
- module Profiling
8
- module Transport
9
- # Profiling request
10
- class Request < Datadog::Transport::Request
11
- def initialize(flush)
12
- super(Parcel.new(flush))
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,10 +0,0 @@
1
- # typed: strict
2
-
3
- module Datadog
4
- module Profiling
5
- module Transport
6
- # Profiling response
7
- module Response; end
8
- end
9
- end
10
- end
@@ -1,70 +0,0 @@
1
- # typed: false
2
-
3
- require 'datadog/tracing/span'
4
- require 'datadog/tracing/distributed/helpers'
5
-
6
- module Datadog
7
- module Tracing
8
- module Distributed
9
- # Parser provides easy access and validation methods for Rack headers
10
- class Parser
11
- def initialize(env)
12
- @env = env
13
- end
14
-
15
- # TODO: Don't assume Rack format.
16
- # Make distributed tracing headers apathetic.
17
- def header(name)
18
- rack_header = "http-#{name}".upcase!.tr('-', '_')
19
-
20
- hdr = @env[rack_header]
21
-
22
- # Only return the value if it is not an empty string
23
- hdr if hdr != ''
24
- end
25
-
26
- def id(hdr, base = 10)
27
- value_to_id(header(hdr), base)
28
- end
29
-
30
- def value_to_id(value, base = 10)
31
- id = value_to_number(value, base)
32
-
33
- # Return early if we could not parse a number
34
- return if id.nil?
35
-
36
- # Zero or greater than max allowed value of 2**64
37
- return if id.zero? || id > Span::EXTERNAL_MAX_ID
38
-
39
- id < 0 ? id + (2**64) : id
40
- end
41
-
42
- def number(hdr, base = 10)
43
- value_to_number(header(hdr), base)
44
- end
45
-
46
- def value_to_number(value, base = 10)
47
- # It's important to make a difference between no header,
48
- # and a header defined to zero.
49
- return if value.nil?
50
-
51
- # Be sure we have a string
52
- value = value.to_s
53
-
54
- # If we are parsing base16 number then truncate to 64-bit
55
- value = Helpers.truncate_base16_number(value) if base == 16
56
-
57
- # Convert header to an integer
58
- # DEV: Ruby `.to_i` will return `0` if a number could not be parsed
59
- num = value.to_i(base)
60
-
61
- # Ensure the parsed number is the same as the original string value
62
- # e.g. We want to make sure to throw away `'nan'.to_i == 0`
63
- return unless num.to_s(base) == value
64
-
65
- num
66
- end
67
- end
68
- end
69
- end
70
- end