atatus 1.7.0 → 2.0.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 (103) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Gemfile +49 -13
  4. data/LICENSE +1 -1
  5. data/atatus.gemspec +3 -3
  6. data/lib/atatus/agent.rb +10 -7
  7. data/lib/atatus/central_config.rb +19 -8
  8. data/lib/atatus/collector/layer.rb +1 -1
  9. data/lib/atatus/{sql_summarizer.rb → config/log_level_map.rb} +22 -28
  10. data/lib/atatus/config/options.rb +2 -1
  11. data/lib/atatus/config/regexp_list.rb +1 -1
  12. data/lib/atatus/config/round_float.rb +31 -0
  13. data/lib/atatus/config/server_info.rb +50 -0
  14. data/lib/atatus/config/wildcard_pattern_list.rb +3 -1
  15. data/lib/atatus/config.rb +91 -70
  16. data/lib/atatus/context/request/socket.rb +1 -2
  17. data/lib/atatus/context/response.rb +1 -3
  18. data/lib/atatus/context.rb +3 -10
  19. data/lib/atatus/context_builder.rb +3 -3
  20. data/lib/atatus/error.rb +2 -1
  21. data/lib/atatus/error_builder.rb +1 -1
  22. data/lib/atatus/fields.rb +98 -0
  23. data/lib/atatus/graphql.rb +2 -0
  24. data/lib/atatus/grpc.rb +5 -7
  25. data/lib/atatus/instrumenter.rb +29 -25
  26. data/lib/atatus/metadata/cloud_info.rb +156 -0
  27. data/lib/atatus/metadata/service_info.rb +3 -3
  28. data/lib/atatus/metadata/system_info/container_info.rb +20 -8
  29. data/lib/atatus/metadata/system_info.rb +20 -5
  30. data/lib/atatus/metadata.rb +3 -1
  31. data/lib/atatus/metrics/cpu_mem_set.rb +10 -38
  32. data/lib/atatus/metrics/jvm_set.rb +88 -0
  33. data/lib/atatus/metrics/metric.rb +2 -0
  34. data/lib/atatus/metrics.rb +33 -16
  35. data/lib/atatus/middleware.rb +8 -3
  36. data/lib/atatus/naively_hashable.rb +1 -0
  37. data/lib/atatus/normalizers/rails/active_record.rb +25 -7
  38. data/lib/atatus/normalizers.rb +2 -2
  39. data/lib/atatus/opentracing.rb +5 -3
  40. data/lib/atatus/rails.rb +1 -1
  41. data/lib/atatus/span/context/db.rb +1 -1
  42. data/lib/atatus/span/context/destination.rb +58 -32
  43. data/lib/atatus/span/context/http.rb +2 -0
  44. data/lib/atatus/span/context/links.rb +32 -0
  45. data/lib/atatus/{sql.rb → span/context/message.rb} +16 -12
  46. data/lib/atatus/span/context/service.rb +55 -0
  47. data/lib/atatus/span/context.rb +28 -3
  48. data/lib/atatus/span.rb +35 -5
  49. data/lib/atatus/span_helpers.rb +12 -23
  50. data/lib/atatus/spies/action_dispatch.rb +10 -13
  51. data/lib/atatus/spies/azure_storage_table.rb +148 -0
  52. data/lib/atatus/spies/delayed_job.rb +19 -13
  53. data/lib/atatus/spies/dynamo_db.rb +56 -15
  54. data/lib/atatus/spies/elasticsearch.rb +54 -39
  55. data/lib/atatus/spies/faraday.rb +92 -58
  56. data/lib/atatus/spies/http.rb +33 -37
  57. data/lib/atatus/spies/json.rb +5 -9
  58. data/lib/atatus/spies/mongo.rb +26 -19
  59. data/lib/atatus/spies/net_http.rb +53 -51
  60. data/lib/atatus/spies/racecar.rb +77 -0
  61. data/lib/atatus/spies/rake.rb +27 -27
  62. data/lib/atatus/spies/redis.rb +11 -12
  63. data/lib/atatus/spies/resque.rb +18 -23
  64. data/lib/atatus/spies/s3.rb +132 -0
  65. data/lib/atatus/spies/sequel.rb +11 -2
  66. data/lib/atatus/spies/shoryuken.rb +4 -6
  67. data/lib/atatus/spies/sidekiq.rb +23 -31
  68. data/lib/atatus/spies/sinatra.rb +20 -28
  69. data/lib/atatus/spies/sneakers.rb +2 -0
  70. data/lib/atatus/spies/sns.rb +126 -0
  71. data/lib/atatus/spies/sqs.rb +231 -0
  72. data/lib/atatus/spies/sucker_punch.rb +20 -22
  73. data/lib/atatus/spies/tilt.rb +10 -13
  74. data/lib/atatus/spies.rb +20 -0
  75. data/lib/atatus/sql/signature.rb +4 -2
  76. data/lib/atatus/sql/tokenizer.rb +23 -7
  77. data/lib/atatus/stacktrace/frame.rb +1 -0
  78. data/lib/atatus/stacktrace_builder.rb +12 -16
  79. data/lib/atatus/subscriber.rb +1 -0
  80. data/lib/atatus/trace_context/traceparent.rb +5 -8
  81. data/lib/atatus/trace_context/tracestate.rb +16 -14
  82. data/lib/atatus/trace_context.rb +6 -16
  83. data/lib/atatus/transaction.rb +17 -4
  84. data/lib/atatus/transport/base.rb +1 -3
  85. data/lib/atatus/transport/connection/http.rb +11 -3
  86. data/lib/atatus/transport/connection/proxy_pipe.rb +1 -2
  87. data/lib/atatus/transport/connection.rb +3 -2
  88. data/lib/atatus/transport/filters/hash_sanitizer.rb +16 -34
  89. data/lib/atatus/transport/filters/secrets_filter.rb +35 -12
  90. data/lib/atatus/transport/serializers/context_serializer.rb +1 -2
  91. data/lib/atatus/transport/serializers/metadata_serializer.rb +54 -8
  92. data/lib/atatus/transport/serializers/metricset_serializer.rb +2 -2
  93. data/lib/atatus/transport/serializers/span_serializer.rb +55 -9
  94. data/lib/atatus/transport/serializers/transaction_serializer.rb +1 -0
  95. data/lib/atatus/transport/serializers.rb +9 -6
  96. data/lib/atatus/transport/user_agent.rb +16 -9
  97. data/lib/atatus/transport/worker.rb +2 -1
  98. data/lib/atatus/util/deep_dup.rb +65 -0
  99. data/lib/atatus/util/precision_validator.rb +46 -0
  100. data/lib/atatus/util.rb +2 -0
  101. data/lib/atatus/version.rb +1 -1
  102. data/lib/atatus.rb +32 -5
  103. metadata +40 -11
@@ -23,14 +23,19 @@ module Atatus
23
23
  # @api private
24
24
  class MetadataSerializer < Serializer
25
25
  def build(metadata)
26
- {
27
- metadata: {
26
+ base =
27
+ {
28
28
  service: build_service(metadata.service),
29
29
  process: build_process(metadata.process),
30
30
  system: build_system(metadata.system),
31
31
  labels: build_labels(metadata.labels)
32
32
  }
33
- }
33
+
34
+ if metadata.cloud.provider
35
+ base[:cloud] = build_cloud(metadata.cloud)
36
+ end
37
+
38
+ { metadata: base }
34
39
  end
35
40
 
36
41
  private
@@ -59,8 +64,8 @@ module Atatus
59
64
  }
60
65
  }
61
66
 
62
- if node_name = service.node_name
63
- base[:node] = { name: keyword_field(node_name) }
67
+ if (node_name = service.node_name)
68
+ base[:node] = { configured_name: keyword_field(node_name) }
64
69
  end
65
70
 
66
71
  base
@@ -75,17 +80,58 @@ module Atatus
75
80
  end
76
81
 
77
82
  def build_system(system)
78
- {
79
- hostname: keyword_field(system.hostname),
83
+ base = {
84
+ configured_hostname: keyword_field(system.configured_hostname),
80
85
  architecture: keyword_field(system.architecture),
81
86
  platform: keyword_field(system.platform),
82
- kubernetes: keyword_object(system.kubernetes)
87
+ kubernetes: keyword_object(system.kubernetes),
88
+ container: keyword_object(system.container)
83
89
  }
90
+ if system.detected_hostname
91
+ base[:detected_hostname] = keyword_field(system.detected_hostname)
92
+ end
93
+
94
+ base
95
+ end
96
+
97
+ def build_cloud(cloud)
98
+ strip_nulls!(
99
+ provider: cloud.provider,
100
+ account: {
101
+ id: keyword_field(cloud.account_id),
102
+ name: keyword_field(cloud.account_name)
103
+ },
104
+ availability_zone: keyword_field(cloud.availability_zone),
105
+ instance: {
106
+ id: keyword_field(cloud.instance_id),
107
+ name: keyword_field(cloud.instance_name)
108
+ },
109
+ machine: { type: keyword_field(cloud.machine_type) },
110
+ project: {
111
+ id: keyword_field(cloud.project_id),
112
+ name: keyword_field(cloud.project_name)
113
+ },
114
+ region: keyword_field(cloud.region)
115
+ )
84
116
  end
85
117
 
86
118
  def build_labels(labels)
87
119
  keyword_object(labels)
88
120
  end
121
+
122
+ # A bug in APM Server 7.9 disallows null values in `cloud`
123
+ def strip_nulls!(hash)
124
+ hash.each_key do |key|
125
+ case value = hash[key]
126
+ when Hash
127
+ strip_nulls!(value)
128
+ hash.delete(key) if value.empty?
129
+ when nil then hash.delete(key)
130
+ end
131
+ end
132
+
133
+ hash
134
+ end
89
135
  end
90
136
  end
91
137
  end
@@ -46,8 +46,8 @@ module Atatus
46
46
  private
47
47
 
48
48
  def build_samples(samples)
49
- samples.each_with_object({}) do |(key, value), hsh|
50
- hsh[key] = { value: value }
49
+ samples.transform_values do |value|
50
+ { value: value }
51
51
  end
52
52
  end
53
53
  end
@@ -43,14 +43,14 @@ module Atatus
43
43
  stacktrace: span.stacktrace.to_a,
44
44
  timestamp: span.timestamp,
45
45
  trace_id: span.trace_id,
46
- sample_rate: span.sample_rate
46
+ sample_rate: span.sample_rate,
47
+ outcome: keyword_field(span.outcome)
47
48
  }
48
49
  }
49
50
  end
50
51
 
51
52
  # @api private
52
53
  class ContextSerializer < Serializer
53
- # rubocop:disable Metrics/CyclomaticComplexity
54
54
  def build(context)
55
55
  return unless context
56
56
 
@@ -65,9 +65,20 @@ module Atatus
65
65
  base[:destination] = build_destination(context.destination)
66
66
  end
67
67
 
68
+ if context.message
69
+ base[:message] = build_message(context.message)
70
+ end
71
+
72
+ if context.service
73
+ base[:service] = build_service(context.service)
74
+ end
75
+
76
+ if context.links && !context.links.empty?
77
+ base[:links] = build_links(context.links)
78
+ end
79
+
68
80
  base
69
81
  end
70
- # rubocop:enable Metrics/CyclomaticComplexity
71
82
 
72
83
  private
73
84
 
@@ -90,15 +101,50 @@ module Atatus
90
101
  end
91
102
 
92
103
  def build_destination(destination)
93
- {
94
- service: {
95
- name: keyword_field(destination.name),
96
- resource: keyword_field(destination.resource),
97
- type: keyword_field(destination.type)
98
- },
104
+ return unless destination
105
+
106
+ base = {
99
107
  address: keyword_field(destination.address),
100
108
  port: destination.port
101
109
  }
110
+
111
+ if (service = destination.service) && !service.empty?
112
+ base[:service] = service.to_h
113
+ end
114
+
115
+ if (cloud = destination.cloud) && !cloud.empty?
116
+ base[:cloud] = cloud.to_h
117
+ end
118
+
119
+ base
120
+ end
121
+
122
+ def build_message(message)
123
+ {
124
+ queue: {
125
+ name: keyword_field(message.queue_name)
126
+ },
127
+ age: {
128
+ ms: message.age_ms.to_i
129
+ }
130
+ }
131
+ end
132
+
133
+ def build_service(service)
134
+ {
135
+ target: {
136
+ name: keyword_field(service.target&.name),
137
+ type: keyword_field(service.target&.type)
138
+ }
139
+ }
140
+ end
141
+
142
+ def build_links(links)
143
+ {
144
+ links: links.map do |link|
145
+ {"trace_id" => link.trace_id, "span_id" => link.span_id}
146
+ end
147
+ }
102
148
  end
103
149
  end
104
150
 
@@ -35,6 +35,7 @@ module Atatus
35
35
  name: keyword_field(transaction.name),
36
36
  type: keyword_field(transaction.type),
37
37
  result: keyword_field(transaction.result.to_s),
38
+ outcome: keyword_field(transaction.outcome),
38
39
  duration: ms(transaction.duration),
39
40
  timestamp: transaction.timestamp,
40
41
  sampled: transaction.sampled?,
@@ -45,18 +45,20 @@ module Atatus
45
45
  def keyword_object(hash)
46
46
  return unless hash
47
47
 
48
- hash.tap do |h|
49
- h.each { |k, v| hash[k] = keyword_field(v) }
48
+ hash.each do |k, v|
49
+ hash[k] =
50
+ case v
51
+ when Hash then keyword_object(v)
52
+ else keyword_field(v)
53
+ end
50
54
  end
51
55
  end
52
56
 
53
57
  def mixed_object(hash)
54
58
  return unless hash
55
59
 
56
- hash.tap do |h|
57
- h.each do |k, v|
58
- hash[k] = v.is_a?(String) ? keyword_field(v) : v
59
- end
60
+ hash.each do |k, v|
61
+ hash[k] = v.is_a?(String) ? keyword_field(v) : v
60
62
  end
61
63
  end
62
64
  end
@@ -72,6 +74,7 @@ module Atatus
72
74
  end
73
75
 
74
76
  attr_reader :transaction, :span, :error, :metadata, :metricset
77
+
75
78
  def serialize(resource)
76
79
  case resource
77
80
  when Transaction
@@ -21,7 +21,8 @@ module Atatus
21
21
  module Transport
22
22
  # @api private
23
23
  class UserAgent
24
- def initialize(config)
24
+ def initialize(config, version: VERSION)
25
+ @version = version
25
26
  @built = build(config)
26
27
  end
27
28
 
@@ -32,16 +33,22 @@ module Atatus
32
33
  private
33
34
 
34
35
  def build(config)
35
- metadata = Metadata.new(config)
36
+ service = Metadata::ServiceInfo.new(config)
36
37
 
37
38
  [
38
- "atatus-ruby/#{VERSION}",
39
- HTTP::Request::USER_AGENT,
40
- [
41
- metadata.service.runtime.name,
42
- metadata.service.runtime.version
43
- ].join('/')
44
- ].join(' ')
39
+ "atatus-ruby/#{@version}",
40
+ formatted_service_info(service)
41
+ ].compact.join(' ')
42
+ end
43
+
44
+ def formatted_service_info(service)
45
+ if service.name
46
+ "(#{[
47
+ service.name,
48
+ service.version
49
+ ].compact.join(' ')
50
+ })"
51
+ end
45
52
  end
46
53
  end
47
54
  end
@@ -53,11 +53,12 @@ module Atatus
53
53
  end
54
54
 
55
55
  attr_reader :queue, :filters, :name, :connection, :serializers
56
+
56
57
  def work_forever
57
58
  while (msg = queue.pop)
58
59
  case msg
59
60
  when StopMessage
60
- debug 'Stopping worker -- %s', self
61
+ debug 'Stopping worker [%s]', self
61
62
  connection.flush(:halt)
62
63
  break
63
64
  else
@@ -0,0 +1,65 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ module Atatus
21
+ module Util
22
+ # @api private
23
+ #
24
+ # Makes a deep copy of an Array or Hash
25
+ # NB: Not guaranteed to work well with complex objects, only simple Hash,
26
+ # Array, String, Number, etc.
27
+ class DeepDup
28
+ def initialize(obj)
29
+ @obj = obj
30
+ end
31
+
32
+ def dup
33
+ deep_dup(@obj)
34
+ end
35
+
36
+ def self.dup(obj)
37
+ new(obj).dup
38
+ end
39
+
40
+ private
41
+
42
+ def deep_dup(obj)
43
+ case obj
44
+ when Hash then hash(obj)
45
+ when Array then array(obj)
46
+ else obj.dup
47
+ end
48
+ end
49
+
50
+ def array(arr)
51
+ arr.map { |obj| deep_dup(obj) }
52
+ end
53
+
54
+ def hash(hsh)
55
+ result = hsh.dup
56
+
57
+ hsh.each_pair do |key, value|
58
+ result[key] = deep_dup(value)
59
+ end
60
+
61
+ result
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,46 @@
1
+ # Licensed to Elasticsearch B.V. under one or more contributor
2
+ # license agreements. See the NOTICE file distributed with
3
+ # this work for additional information regarding copyright
4
+ # ownership. Elasticsearch B.V. licenses this file to you under
5
+ # the Apache License, Version 2.0 (the "License"); you may
6
+ # not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing,
12
+ # software distributed under the License is distributed on an
13
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ # KIND, either express or implied. See the License for the
15
+ # specific language governing permissions and limitations
16
+ # under the License.
17
+
18
+ # frozen_string_literal: true
19
+
20
+ module Atatus
21
+ module Util
22
+ # @api private
23
+ # Rounds half away from zero.
24
+ # If `minimum` is provided, and the value rounds to 0 (but was not zero to
25
+ # begin with), use the minimum instead.
26
+ module PrecisionValidator
27
+ module_function
28
+
29
+ def validate(value, precision: 0, minimum: nil)
30
+ float = Float(value)
31
+ return nil unless (0.0..1.0).cover?(float)
32
+ return float if float == 0
33
+
34
+ multiplier = Float(10**precision)
35
+ rounded = (float * multiplier + 0.5).floor / multiplier
36
+ if rounded == 0 && minimum
37
+ minimum
38
+ else
39
+ rounded
40
+ end
41
+ rescue ArgumentError
42
+ nil
43
+ end
44
+ end
45
+ end
46
+ end
data/lib/atatus/util.rb CHANGED
@@ -55,6 +55,8 @@ module Atatus
55
55
 
56
56
  def self.truncate(value, max_length: 1024)
57
57
  return unless value
58
+
59
+ value = String(value)
58
60
  return value if value.length <= max_length
59
61
 
60
62
  value[0...(max_length - 1)] + '…'
@@ -19,5 +19,5 @@
19
19
 
20
20
  module Atatus
21
21
  AGENT_NAME = 'Ruby'
22
- VERSION = '1.7.0'
22
+ VERSION = '2.0.0'
23
23
  end
data/lib/atatus.rb CHANGED
@@ -26,12 +26,14 @@ require 'logger'
26
26
  require 'concurrent'
27
27
  require 'forwardable'
28
28
  require 'securerandom'
29
+ require 'ruby2_keywords'
29
30
 
30
31
  require 'atatus/version'
31
32
  require 'atatus/internal_error'
32
33
  require 'atatus/logging'
33
34
 
34
35
  # Core
36
+ require 'atatus/fields'
35
37
  require 'atatus/agent'
36
38
  require 'atatus/config'
37
39
  require 'atatus/context'
@@ -106,6 +108,7 @@ module Atatus
106
108
  # @yield [String|nil, String|nil, String|nil] The transaction, span,
107
109
  # and trace ids.
108
110
  # @return [String] Unless block given
111
+ # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
109
112
  def log_ids
110
113
  trace_id = (current_transaction || current_span)&.trace_id
111
114
  if block_given?
@@ -118,6 +121,7 @@ module Atatus
118
121
  ids << "trace.id=#{trace_id}" if trace_id
119
122
  ids.join(' ')
120
123
  end
124
+ # rubocop:enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
121
125
 
122
126
  # Start a new transaction
123
127
  #
@@ -183,7 +187,12 @@ module Atatus
183
187
  context: context,
184
188
  trace_context: trace_context
185
189
  )
186
- yield transaction
190
+ result = yield transaction
191
+ transaction&.outcome ||= Transaction::Outcome::SUCCESS
192
+ result
193
+ rescue
194
+ transaction&.outcome ||= Transaction::Outcome::FAILURE
195
+ raise
187
196
  ensure
188
197
  end_transaction
189
198
  end
@@ -235,9 +244,12 @@ module Atatus
235
244
 
236
245
  # Ends the current span
237
246
  #
247
+ # @param span [Span] Optional span to be ended instead of the last span
248
+ # created, useful for asynchronous environments where multiple spans are created in parallel
249
+ #
238
250
  # @return [Span]
239
- def end_span
240
- agent&.end_span
251
+ def end_span(span = nil)
252
+ agent&.end_span(span)
241
253
  end
242
254
 
243
255
  # rubocop:disable Metrics/ParameterLists
@@ -287,7 +299,12 @@ module Atatus
287
299
  parent: parent,
288
300
  sync: sync
289
301
  )
290
- yield span
302
+ result = yield span
303
+ span&.outcome ||= Span::Outcome::SUCCESS
304
+ result
305
+ rescue
306
+ span&.outcome ||= Span::Outcome::FAILURE
307
+ raise
291
308
  ensure
292
309
  end_span
293
310
  end
@@ -392,6 +409,16 @@ module Atatus
392
409
  agent&.set_response_body(response_body.to_s)
393
410
  end
394
411
 
412
+ # Provide a filter to transform payloads before sending them off
413
+ #
414
+ # @param address [String] Destination address
415
+ # @param address [String] Destination address
416
+ # @param address [Hash] Destination service
417
+ # @param address [Hash] Destination cloud
418
+ def set_destination(address: nil, port: nil, service: nil, cloud: nil)
419
+ agent&.set_destination(address: address, port: port, service: service, cloud: cloud)
420
+ end
421
+
395
422
  # Provide a filter to transform payloads before sending them off
396
423
  #
397
424
  # @param key [Symbol] Unique filter key
@@ -399,7 +426,7 @@ module Atatus
399
426
  # @yield [Hash] A filter. Used if provided. Otherwise using `callback`
400
427
  # @return [Bool] true
401
428
  def add_filter(key, callback = nil, &block)
402
- if callback.nil? && !block_given?
429
+ if callback.nil? && !block
403
430
  raise ArgumentError, '#add_filter needs either `callback\' or a block'
404
431
  end
405
432
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: atatus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Atatus
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-15 00:00:00.000000000 Z
11
+ date: 2024-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -38,8 +38,23 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.0'
41
- description:
42
- email: success@atatus.com
41
+ - !ruby/object:Gem::Dependency
42
+ name: ruby2_keywords
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
56
+ email:
57
+ - success@atatus.com
43
58
  executables: []
44
59
  extensions: []
45
60
  extra_rdoc_files:
@@ -70,8 +85,11 @@ files:
70
85
  - lib/atatus/config.rb
71
86
  - lib/atatus/config/bytes.rb
72
87
  - lib/atatus/config/duration.rb
88
+ - lib/atatus/config/log_level_map.rb
73
89
  - lib/atatus/config/options.rb
74
90
  - lib/atatus/config/regexp_list.rb
91
+ - lib/atatus/config/round_float.rb
92
+ - lib/atatus/config/server_info.rb
75
93
  - lib/atatus/config/wildcard_pattern_list.rb
76
94
  - lib/atatus/context.rb
77
95
  - lib/atatus/context/company.rb
@@ -86,6 +104,7 @@ files:
86
104
  - lib/atatus/error/exception.rb
87
105
  - lib/atatus/error/log.rb
88
106
  - lib/atatus/error_builder.rb
107
+ - lib/atatus/fields.rb
89
108
  - lib/atatus/grape.rb
90
109
  - lib/atatus/graphql.rb
91
110
  - lib/atatus/grpc.rb
@@ -93,6 +112,7 @@ files:
93
112
  - lib/atatus/internal_error.rb
94
113
  - lib/atatus/logging.rb
95
114
  - lib/atatus/metadata.rb
115
+ - lib/atatus/metadata/cloud_info.rb
96
116
  - lib/atatus/metadata/process_info.rb
97
117
  - lib/atatus/metadata/service_info.rb
98
118
  - lib/atatus/metadata/system_info.rb
@@ -102,6 +122,7 @@ files:
102
122
  - lib/atatus/metrics.rb
103
123
  - lib/atatus/metrics/breakdown_set.rb
104
124
  - lib/atatus/metrics/cpu_mem_set.rb
125
+ - lib/atatus/metrics/jvm_set.rb
105
126
  - lib/atatus/metrics/metric.rb
106
127
  - lib/atatus/metrics/set.rb
107
128
  - lib/atatus/metrics/span_scoped_set.rb
@@ -128,9 +149,13 @@ files:
128
149
  - lib/atatus/span/context/db.rb
129
150
  - lib/atatus/span/context/destination.rb
130
151
  - lib/atatus/span/context/http.rb
152
+ - lib/atatus/span/context/links.rb
153
+ - lib/atatus/span/context/message.rb
154
+ - lib/atatus/span/context/service.rb
131
155
  - lib/atatus/span_helpers.rb
132
156
  - lib/atatus/spies.rb
133
157
  - lib/atatus/spies/action_dispatch.rb
158
+ - lib/atatus/spies/azure_storage_table.rb
134
159
  - lib/atatus/spies/delayed_job.rb
135
160
  - lib/atatus/spies/dynamo_db.rb
136
161
  - lib/atatus/spies/elasticsearch.rb
@@ -139,21 +164,23 @@ files:
139
164
  - lib/atatus/spies/json.rb
140
165
  - lib/atatus/spies/mongo.rb
141
166
  - lib/atatus/spies/net_http.rb
167
+ - lib/atatus/spies/racecar.rb
142
168
  - lib/atatus/spies/rake.rb
143
169
  - lib/atatus/spies/redis.rb
144
170
  - lib/atatus/spies/resque.rb
171
+ - lib/atatus/spies/s3.rb
145
172
  - lib/atatus/spies/sequel.rb
146
173
  - lib/atatus/spies/shoryuken.rb
147
174
  - lib/atatus/spies/sidekiq.rb
148
175
  - lib/atatus/spies/sinatra.rb
149
176
  - lib/atatus/spies/sneakers.rb
177
+ - lib/atatus/spies/sns.rb
178
+ - lib/atatus/spies/sqs.rb
150
179
  - lib/atatus/spies/sucker_punch.rb
151
180
  - lib/atatus/spies/tilt.rb
152
- - lib/atatus/sql.rb
153
181
  - lib/atatus/sql/signature.rb
154
182
  - lib/atatus/sql/tokenizer.rb
155
183
  - lib/atatus/sql/tokens.rb
156
- - lib/atatus/sql_summarizer.rb
157
184
  - lib/atatus/stacktrace.rb
158
185
  - lib/atatus/stacktrace/frame.rb
159
186
  - lib/atatus/stacktrace_builder.rb
@@ -180,17 +207,19 @@ files:
180
207
  - lib/atatus/transport/user_agent.rb
181
208
  - lib/atatus/transport/worker.rb
182
209
  - lib/atatus/util.rb
210
+ - lib/atatus/util/deep_dup.rb
183
211
  - lib/atatus/util/inflector.rb
184
212
  - lib/atatus/util/lru_cache.rb
213
+ - lib/atatus/util/precision_validator.rb
185
214
  - lib/atatus/util/throttle.rb
186
215
  - lib/atatus/version.rb
187
216
  homepage: https://www.atatus.com
188
217
  licenses:
189
- - Atatus
218
+ - Apache-2.0
190
219
  metadata:
191
220
  changelog_uri: https://docs.atatus.com/docs/release-notes/ruby.html
192
221
  documentation_uri: https://docs.atatus.com/docs/application-monitoring/ruby-agent/overview.html
193
- post_install_message:
222
+ post_install_message:
194
223
  rdoc_options: []
195
224
  require_paths:
196
225
  - lib
@@ -205,8 +234,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
234
  - !ruby/object:Gem::Version
206
235
  version: '0'
207
236
  requirements: []
208
- rubygems_version: 3.0.4
209
- signing_key:
237
+ rubygems_version: 3.0.3.1
238
+ signing_key:
210
239
  specification_version: 4
211
240
  summary: Atatus Ruby Agent
212
241
  test_files: []