newrelic-infinite_tracing 6.11.0.365

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ # The SuspendedStreamingBuffer class discards pushed segments and records
7
+ # the seen metric. This buffer is installed when the gRPC server returns
8
+ # UNIMPLEMENTED (status 12) code as a signal to not reconnect to the server.
9
+ module NewRelic::Agent
10
+ module InfiniteTracing
11
+ class SuspendedStreamingBuffer
12
+ include Constants
13
+ extend Forwardable
14
+ def_delegators :@empty_buffer, :empty?, :push
15
+
16
+ def initialize max_size = DEFAULT_QUEUE_SIZE
17
+ @empty_buffer = NewRelic::EMPTY_ARRAY
18
+ end
19
+
20
+ # updates the seen metric and discards the segment
21
+ def << segment
22
+ NewRelic::Agent.increment_metric SPANS_SEEN_METRIC
23
+ end
24
+
25
+ def transfer new_buffer
26
+ # NOOP
27
+ end
28
+
29
+ def close_queue
30
+ # NOOP
31
+ end
32
+ alias :flush_queue :close_queue
33
+
34
+ def enumerator
35
+ @empty_buffer
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ module NewRelic::Agent
7
+ module InfiniteTracing
8
+ module Transformer
9
+ extend self
10
+
11
+ def transform span_event
12
+ intrinsics, user_attributes, agent_attributes = span_event
13
+ {
14
+ "trace_id" => intrinsics[NewRelic::Agent::SpanEventPrimitive::TRACE_ID_KEY],
15
+ "intrinsics" => hash_to_attributes(intrinsics),
16
+ "user_attributes" => hash_to_attributes(user_attributes),
17
+ "agent_attributes" => hash_to_attributes(agent_attributes)
18
+ }
19
+ end
20
+
21
+ private
22
+
23
+ KLASS_TO_ARG = {
24
+ String => :string_value,
25
+ TrueClass => :bool_value,
26
+ FalseClass => :bool_value,
27
+ Integer => :int_value,
28
+ Float => :double_value,
29
+ }
30
+ if RUBY_VERSION < '2.4.0'
31
+ KLASS_TO_ARG[Fixnum] = :int_value
32
+ end
33
+ if defined? BigDecimal
34
+ KLASS_TO_ARG[BigDecimal] = :double_value
35
+ end
36
+
37
+ def safe_param_name value
38
+ KLASS_TO_ARG[value.class] || raise("Unhandled class #{value.class.name}")
39
+ end
40
+
41
+ def hash_to_attributes values
42
+ values.map do |key, value|
43
+ begin
44
+ [key, AttributeValue.new(safe_param_name(value) => value)]
45
+ rescue => e
46
+ puts e.inspect
47
+ puts [key, value].inspect
48
+ nil
49
+ end
50
+ end.to_h
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ module NewRelic
7
+ module Agent
8
+ module InfiniteTracing
9
+ VERSION = NewRelic::VERSION
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,74 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ # The Worker class makes it easy to stop and start a thread at will.
7
+ # Some basic error handling/capture is wrapped around the Thread to help
8
+ # propagate the exceptions arising from the threaded processes to the main process
9
+ # where the main agent code lives.
10
+ module NewRelic::Agent
11
+ module InfiniteTracing
12
+
13
+ class Worker
14
+ attr_reader :name, :error
15
+
16
+ def initialize name, &job
17
+ @name = name
18
+ @job = job
19
+ @error = nil
20
+ @worker_thread = nil
21
+ @lock = Mutex.new
22
+ @lock.synchronize { start_thread }
23
+ end
24
+
25
+ def status
26
+ return "error" if error?
27
+ @lock.synchronize do
28
+ return "stopped" if @worker_thread.nil?
29
+ @worker_thread.status || "idle"
30
+ end
31
+ end
32
+
33
+ def error?
34
+ !!@error
35
+ end
36
+
37
+ def join timeout=nil
38
+ return unless @worker_thread
39
+ NewRelic::Agent.logger.debug "joining worker #{@name} thread..."
40
+ @worker_thread.join timeout
41
+ end
42
+
43
+ def stop
44
+ @lock.synchronize do
45
+ return unless @worker_thread
46
+ NewRelic::Agent.logger.debug "stopping worker #{@name} thread..."
47
+ @worker_thread.kill
48
+ @worker_thread = nil
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def start_thread
55
+ NewRelic::Agent.logger.debug "starting worker #{@name} thread..."
56
+ @worker_thread = Thread.new do
57
+ catch(:exit) do
58
+ begin
59
+ @job.call
60
+ rescue => err
61
+ @error = err
62
+ raise
63
+ end
64
+ end
65
+ end
66
+ @worker_thread.abort_on_exception = true
67
+ if @worker_thread.respond_to? :report_on_exception
68
+ @worker_thread.report_on_exception = NewRelic::Agent.config[:log_level] == "debug"
69
+ end
70
+ end
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ require 'uri'
7
+
8
+ require 'newrelic_rpm'
9
+
10
+ NewRelic::Agent.logger.debug "Detected New Relic Infinite Tracing Gem"
11
+
12
+ require 'new_relic/infinite_tracing/version'
13
+ require 'new_relic/infinite_tracing/config'
14
+
15
+ DependencyDetection.defer do
16
+ named :infinite_tracing
17
+
18
+ depends_on do
19
+ NewRelic::Agent::InfiniteTracing::Config.should_load?
20
+ end
21
+
22
+ executes do
23
+ NewRelic::Agent.logger.debug "Loading New Relic Infinite Tracing Library"
24
+
25
+ require 'new_relic/infinite_tracing/proto'
26
+
27
+ require 'new_relic/infinite_tracing/constants'
28
+ require 'new_relic/infinite_tracing/worker'
29
+ require 'new_relic/infinite_tracing/record_status_handler'
30
+
31
+ require 'new_relic/infinite_tracing/transformer'
32
+ require 'new_relic/infinite_tracing/streaming_buffer'
33
+ require 'new_relic/infinite_tracing/suspended_streaming_buffer'
34
+ require 'new_relic/infinite_tracing/channel'
35
+ require 'new_relic/infinite_tracing/connection'
36
+ require 'new_relic/infinite_tracing/client'
37
+
38
+ require 'new_relic/infinite_tracing/agent_integrations'
39
+ end
40
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+ # frozen_string_literal: true
5
+
6
+ unless defined? NewRelic::Agent::InfiniteTracing
7
+ require_relative '../infinite_tracing'
8
+ end
@@ -0,0 +1,42 @@
1
+ // encoding: utf-8
2
+ // This file is distributed under New Relic's license terms.
3
+ // See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+
5
+ syntax = "proto3";
6
+
7
+ package com.newrelic.trace.v1;
8
+
9
+ service IngestService {
10
+ // Accepts a stream of Span messages, and returns an irregular stream of
11
+ // RecordStatus messages.
12
+ rpc RecordSpan(stream Span) returns (stream RecordStatus) {}
13
+
14
+ // Accepts a stream of SpanBatch messages, and returns an irregular
15
+ // stream of RecordStatus messages. This endpoint can be used to improve
16
+ // throughput when Span messages are small
17
+ rpc RecordSpanBatch(stream SpanBatch) returns (stream RecordStatus) {}
18
+ }
19
+
20
+ message SpanBatch {
21
+ repeated Span spans = 1;
22
+ }
23
+
24
+ message Span {
25
+ string trace_id = 1;
26
+ map<string, AttributeValue> intrinsics = 2;
27
+ map<string, AttributeValue> user_attributes = 3;
28
+ map<string, AttributeValue> agent_attributes = 4;
29
+ }
30
+
31
+ message AttributeValue {
32
+ oneof value {
33
+ string string_value = 1;
34
+ bool bool_value = 2;
35
+ int64 int_value = 3;
36
+ double double_value = 4;
37
+ }
38
+ }
39
+
40
+ message RecordStatus {
41
+ uint64 messages_seen = 1;
42
+ }
@@ -0,0 +1,91 @@
1
+ #-*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
4
+ agent_lib = File.expand_path('../../lib', __FILE__)
5
+ $LOAD_PATH.unshift(agent_lib) unless $LOAD_PATH.include?(agent_lib)
6
+
7
+ lib = File.expand_path('../lib', __FILE__)
8
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
9
+
10
+ require 'new_relic/version'
11
+
12
+ Gem::Specification.new do |s|
13
+
14
+ def self.copy_files filelist
15
+ subfolder = File.expand_path File.dirname(__FILE__)
16
+
17
+ filelist.each do |filename|
18
+ source_full_filename = File.expand_path(filename)
19
+ dest_full_filename = File.join(subfolder, File.basename(filename))
20
+ FileUtils.cp source_full_filename, dest_full_filename
21
+ end
22
+ end
23
+
24
+ shared_files = [
25
+ "../LICENSE",
26
+ "../CONTRIBUTING.md",
27
+ ]
28
+
29
+ self.copy_files shared_files
30
+
31
+ s.name = "newrelic-infinite_tracing"
32
+ s.version = NewRelic::VERSION::STRING
33
+ s.required_ruby_version = '>= 2.3.0'
34
+ s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
35
+ s.authors = [ "Rachel Klein", "Tanna McClure", "Michael Lang" ]
36
+ s.date = Time.now.strftime('%Y-%m-%d')
37
+ s.licenses = ['New Relic']
38
+ s.description = <<-EOS
39
+ The New Relic Ruby agent requires the gem newrelic_rpm, and it includes distributed
40
+ tracing that uses head-based sampling (standard distributed tracing).
41
+
42
+ If you want distributed tracing to use tail-based sampling (Infinite Tracing),
43
+ you need to add both newrelic_rpm and newrelic-infinite_tracing to your application's
44
+ Gemfile. For more information, see: https://docs.newrelic.com/docs/understand-dependencies/distributed-tracing/get-started/introduction-distributed-tracing
45
+
46
+ New Relic is a performance management system, developed by New Relic,
47
+ Inc (http://www.newrelic.com). New Relic provides you with deep
48
+ information about the performance of your web application as it runs
49
+ in production. The New Relic Ruby Agent is dual-purposed as a either a
50
+ Gem or plugin, hosted on https://github.com/newrelic/rpm/
51
+ EOS
52
+
53
+ s.email = "support@newrelic.com"
54
+ s.executables = []
55
+ s.extra_rdoc_files = [
56
+ "CHANGELOG.md",
57
+ "LICENSE"
58
+ ]
59
+
60
+ s.metadata = {
61
+ 'bug_tracker_uri' => 'https://support.newrelic.com/',
62
+ 'changelog_uri' => 'https://github.com/newrelic/rpm/blob/master/infinite_tracing/CHANGELOG.md',
63
+ 'documentation_uri' => 'https://docs.newrelic.com/docs/agents/ruby-agent',
64
+ 'source_code_uri' => 'https://github.com/newrelic/rpm'
65
+ }
66
+
67
+ file_list = `git ls-files . -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/(?!agent_helper.rb)}) }
68
+ s.files = file_list
69
+
70
+ s.homepage = "https://github.com/newrelic/rpm/tree/master/infinite_tracing"
71
+ s.require_paths = ["lib", "infinite_tracing"]
72
+ s.rubygems_version = Gem::VERSION
73
+ s.summary = "New Relic Infinite Tracing for the Ruby agent"
74
+
75
+ s.add_dependency 'newrelic_rpm', NewRelic::VERSION::STRING
76
+ s.add_dependency 'grpc', '~> 1.28.0'
77
+
78
+ s.add_development_dependency 'rake', '12.3.3'
79
+ s.add_development_dependency 'rb-inotify', '0.9.10' # locked to support < Ruby 2.3 (and listen 3.0.8)
80
+ s.add_development_dependency 'listen', '3.0.8' # locked to support < Ruby 2.3
81
+ s.add_development_dependency 'minitest', '~> 5.14.0'
82
+ s.add_development_dependency 'mocha', '~> 1.9.0'
83
+ s.add_development_dependency 'pry-nav', '~> 0.3.0'
84
+ s.add_development_dependency 'pry-stack_explorer', '~> 0.4.9'
85
+ s.add_development_dependency 'guard', '~> 2.16.0'
86
+ s.add_development_dependency 'guard-minitest', '~> 2.4.0'
87
+ s.add_development_dependency 'hometown', '~> 0.2.5'
88
+ s.add_development_dependency 'bundler'
89
+
90
+ s.add_development_dependency 'grpc-tools', "~> 1.14.0"
91
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+
5
+ # This is required to load in task definitions from merb
6
+ Dir.glob(File.join(File.dirname(__FILE__),'*.rake')) do |file|
7
+ load file
8
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+
5
+ namespace :proto do
6
+ desc "Generate proto files"
7
+
8
+ task :generate do
9
+ def extract_license_terms file_contents
10
+ text = []
11
+ text << file_contents.shift while !file_contents.empty? && file_contents[0] =~ /^#/
12
+ text << ""
13
+ text
14
+ end
15
+
16
+ # adds the NewRelic License notice to the top of the generated files
17
+ # Removes require lines since these are replicated in the proto.rb file.
18
+ def add_license_preamble_and_remove_requires output_path
19
+ gemspec_path = File.expand_path(File.join(output_path, '..', '..', '..', '..', '..'))
20
+ license_terms = extract_license_terms File.readlines(File.join(gemspec_path, "Gemfile"))
21
+ Dir.glob(File.join output_path, "*.rb") do |filename|
22
+ contents = File.readlines filename
23
+ contents.reject!{|r| r =~ /^\s*require\s.*$/}
24
+ File.open(filename, 'w') do |output|
25
+ output.puts license_terms
26
+ output.puts contents
27
+ end
28
+ end
29
+ end
30
+
31
+ gem_folder = File.expand_path File.join(File.dirname(__FILE__), "..")
32
+ proto_filename = File.join gem_folder, "lib", "new_relic", "proto", "infinite_tracing.proto"
33
+ output_path = File.join gem_folder, "lib", "new_relic", "infinite_tracing", "proto"
34
+
35
+ FileUtils.mkdir_p output_path
36
+ cmd = [
37
+ "grpc_tools_ruby_protoc",
38
+ "-I#{gem_folder}/lib/new_relic/proto",
39
+ "--ruby_out=#{output_path}",
40
+ "--grpc_out=#{output_path} #{proto_filename}"
41
+ ].join(" ")
42
+
43
+ if system cmd
44
+ puts "Proto file generated!"
45
+ add_license_preamble_and_remove_requires output_path
46
+ else
47
+ puts "Failed to generate proto file."
48
+ end
49
+ end
50
+
51
+ end
metadata ADDED
@@ -0,0 +1,290 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: newrelic-infinite_tracing
3
+ version: !ruby/object:Gem::Version
4
+ version: 6.11.0.365
5
+ platform: ruby
6
+ authors:
7
+ - Rachel Klein
8
+ - Tanna McClure
9
+ - Michael Lang
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2020-05-28 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: newrelic_rpm
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '='
20
+ - !ruby/object:Gem::Version
21
+ version: 6.11.0.365
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '='
27
+ - !ruby/object:Gem::Version
28
+ version: 6.11.0.365
29
+ - !ruby/object:Gem::Dependency
30
+ name: grpc
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: 1.28.0
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: 1.28.0
43
+ - !ruby/object:Gem::Dependency
44
+ name: rake
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '='
48
+ - !ruby/object:Gem::Version
49
+ version: 12.3.3
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '='
55
+ - !ruby/object:Gem::Version
56
+ version: 12.3.3
57
+ - !ruby/object:Gem::Dependency
58
+ name: rb-inotify
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - '='
62
+ - !ruby/object:Gem::Version
63
+ version: 0.9.10
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '='
69
+ - !ruby/object:Gem::Version
70
+ version: 0.9.10
71
+ - !ruby/object:Gem::Dependency
72
+ name: listen
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '='
76
+ - !ruby/object:Gem::Version
77
+ version: 3.0.8
78
+ type: :development
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '='
83
+ - !ruby/object:Gem::Version
84
+ version: 3.0.8
85
+ - !ruby/object:Gem::Dependency
86
+ name: minitest
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: 5.14.0
92
+ type: :development
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: 5.14.0
99
+ - !ruby/object:Gem::Dependency
100
+ name: mocha
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: 1.9.0
106
+ type: :development
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: 1.9.0
113
+ - !ruby/object:Gem::Dependency
114
+ name: pry-nav
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: 0.3.0
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: 0.3.0
127
+ - !ruby/object:Gem::Dependency
128
+ name: pry-stack_explorer
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: 0.4.9
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: 0.4.9
141
+ - !ruby/object:Gem::Dependency
142
+ name: guard
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: 2.16.0
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: 2.16.0
155
+ - !ruby/object:Gem::Dependency
156
+ name: guard-minitest
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: 2.4.0
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: 2.4.0
169
+ - !ruby/object:Gem::Dependency
170
+ name: hometown
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: 0.2.5
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: 0.2.5
183
+ - !ruby/object:Gem::Dependency
184
+ name: bundler
185
+ requirement: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - ">="
188
+ - !ruby/object:Gem::Version
189
+ version: '0'
190
+ type: :development
191
+ prerelease: false
192
+ version_requirements: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ - !ruby/object:Gem::Dependency
198
+ name: grpc-tools
199
+ requirement: !ruby/object:Gem::Requirement
200
+ requirements:
201
+ - - "~>"
202
+ - !ruby/object:Gem::Version
203
+ version: 1.14.0
204
+ type: :development
205
+ prerelease: false
206
+ version_requirements: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - "~>"
209
+ - !ruby/object:Gem::Version
210
+ version: 1.14.0
211
+ description: |
212
+ The New Relic Ruby agent requires the gem newrelic_rpm, and it includes distributed
213
+ tracing that uses head-based sampling (standard distributed tracing).
214
+
215
+ If you want distributed tracing to use tail-based sampling (Infinite Tracing),
216
+ you need to add both newrelic_rpm and newrelic-infinite_tracing to your application's
217
+ Gemfile. For more information, see: https://docs.newrelic.com/docs/understand-dependencies/distributed-tracing/get-started/introduction-distributed-tracing
218
+
219
+ New Relic is a performance management system, developed by New Relic,
220
+ Inc (http://www.newrelic.com). New Relic provides you with deep
221
+ information about the performance of your web application as it runs
222
+ in production. The New Relic Ruby Agent is dual-purposed as a either a
223
+ Gem or plugin, hosted on https://github.com/newrelic/rpm/
224
+ email: support@newrelic.com
225
+ executables: []
226
+ extensions: []
227
+ extra_rdoc_files:
228
+ - CHANGELOG.md
229
+ - LICENSE
230
+ files:
231
+ - ".gitignore"
232
+ - CHANGELOG.md
233
+ - Gemfile
234
+ - LICENSE
235
+ - Rakefile
236
+ - lib/infinite_tracing.rb
237
+ - lib/infinite_tracing/agent_integrations.rb
238
+ - lib/infinite_tracing/agent_integrations/agent.rb
239
+ - lib/infinite_tracing/agent_integrations/datastore_segment.rb
240
+ - lib/infinite_tracing/agent_integrations/external_request_segment.rb
241
+ - lib/infinite_tracing/agent_integrations/segment.rb
242
+ - lib/infinite_tracing/channel.rb
243
+ - lib/infinite_tracing/client.rb
244
+ - lib/infinite_tracing/config.rb
245
+ - lib/infinite_tracing/connection.rb
246
+ - lib/infinite_tracing/constants.rb
247
+ - lib/infinite_tracing/proto.rb
248
+ - lib/infinite_tracing/proto/infinite_tracing_pb.rb
249
+ - lib/infinite_tracing/proto/infinite_tracing_services_pb.rb
250
+ - lib/infinite_tracing/record_status_handler.rb
251
+ - lib/infinite_tracing/streaming_buffer.rb
252
+ - lib/infinite_tracing/suspended_streaming_buffer.rb
253
+ - lib/infinite_tracing/transformer.rb
254
+ - lib/infinite_tracing/version.rb
255
+ - lib/infinite_tracing/worker.rb
256
+ - lib/new_relic/infinite_tracing.rb
257
+ - lib/newrelic/infinite_tracing.rb
258
+ - lib/proto/infinite_tracing.proto
259
+ - newrelic-infinite_tracing.gemspec
260
+ - tasks/all.rb
261
+ - tasks/proto.rake
262
+ homepage: https://github.com/newrelic/rpm/tree/master/infinite_tracing
263
+ licenses:
264
+ - New Relic
265
+ metadata:
266
+ bug_tracker_uri: https://support.newrelic.com/
267
+ changelog_uri: https://github.com/newrelic/rpm/blob/master/infinite_tracing/CHANGELOG.md
268
+ documentation_uri: https://docs.newrelic.com/docs/agents/ruby-agent
269
+ source_code_uri: https://github.com/newrelic/rpm
270
+ post_install_message:
271
+ rdoc_options: []
272
+ require_paths:
273
+ - lib
274
+ - infinite_tracing
275
+ required_ruby_version: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - ">="
278
+ - !ruby/object:Gem::Version
279
+ version: 2.3.0
280
+ required_rubygems_version: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - ">"
283
+ - !ruby/object:Gem::Version
284
+ version: 1.3.1
285
+ requirements: []
286
+ rubygems_version: 3.0.6
287
+ signing_key:
288
+ specification_version: 4
289
+ summary: New Relic Infinite Tracing for the Ruby agent
290
+ test_files: []