atatus 1.3.0 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/Gemfile +72 -22
  4. data/LICENSE +1 -1
  5. data/atatus.gemspec +2 -2
  6. data/lib/atatus/agent.rb +78 -29
  7. data/lib/atatus/central_config/cache_control.rb +18 -1
  8. data/lib/atatus/central_config.rb +72 -27
  9. data/lib/atatus/child_durations.rb +64 -0
  10. data/lib/atatus/collector/base.rb +102 -43
  11. data/lib/atatus/collector/builder.rb +134 -4
  12. data/lib/atatus/collector/hist.rb +54 -0
  13. data/lib/atatus/collector/layer.rb +1 -0
  14. data/lib/atatus/collector/transport.rb +41 -11
  15. data/lib/atatus/config/bytes.rb +17 -0
  16. data/lib/atatus/config/duration.rb +17 -0
  17. data/lib/atatus/config/options.rb +29 -9
  18. data/lib/atatus/config/regexp_list.rb +17 -0
  19. data/lib/atatus/config/wildcard_pattern_list.rb +64 -0
  20. data/lib/atatus/config.rb +129 -28
  21. data/lib/atatus/context/request/socket.rb +18 -1
  22. data/lib/atatus/context/request/url.rb +17 -0
  23. data/lib/atatus/context/request.rb +17 -0
  24. data/lib/atatus/context/response.rb +27 -2
  25. data/lib/atatus/context/user.rb +17 -0
  26. data/lib/atatus/context.rb +32 -1
  27. data/lib/atatus/context_builder.rb +19 -4
  28. data/lib/atatus/deprecations.rb +17 -0
  29. data/lib/atatus/error/exception.rb +24 -0
  30. data/lib/atatus/error/log.rb +17 -0
  31. data/lib/atatus/error.rb +27 -0
  32. data/lib/atatus/error_builder.rb +21 -2
  33. data/lib/atatus/grape.rb +62 -0
  34. data/lib/atatus/graphql.rb +91 -0
  35. data/lib/atatus/grpc.rb +99 -0
  36. data/lib/atatus/instrumenter.rb +135 -30
  37. data/lib/atatus/internal_error.rb +17 -0
  38. data/lib/atatus/logging.rb +17 -2
  39. data/lib/atatus/metadata/process_info.rb +17 -0
  40. data/lib/atatus/metadata/service_info.rb +21 -6
  41. data/lib/atatus/metadata/system_info/container_info.rb +49 -10
  42. data/lib/atatus/metadata/system_info/hw_info.rb +1 -1
  43. data/lib/atatus/metadata/system_info.rb +22 -3
  44. data/lib/atatus/metadata.rb +17 -0
  45. data/lib/atatus/metrics/breakdown_set.rb +31 -0
  46. data/lib/atatus/metrics/{cpu_mem.rb → cpu_mem_set.rb} +110 -63
  47. data/lib/atatus/metrics/metric.rb +140 -0
  48. data/lib/atatus/metrics/set.rb +123 -0
  49. data/lib/atatus/metrics/span_scoped_set.rb +56 -0
  50. data/lib/atatus/metrics/transaction_set.rb +26 -0
  51. data/lib/atatus/metrics/vm_set.rb +58 -0
  52. data/lib/atatus/metrics.rb +69 -27
  53. data/lib/atatus/metricset.rb +48 -4
  54. data/lib/atatus/middleware.rb +28 -8
  55. data/lib/atatus/naively_hashable.rb +17 -0
  56. data/lib/atatus/normalizers/grape/endpoint_run.rb +65 -0
  57. data/lib/atatus/normalizers/grape.rb +22 -0
  58. data/lib/atatus/normalizers/rails/action_controller.rb +44 -0
  59. data/lib/atatus/normalizers/rails/action_mailer.rb +43 -0
  60. data/lib/atatus/normalizers/{action_view.rb → rails/action_view.rb} +17 -0
  61. data/lib/atatus/normalizers/rails/active_record.rb +80 -0
  62. data/lib/atatus/normalizers/rails.rb +27 -0
  63. data/lib/atatus/normalizers.rb +23 -9
  64. data/lib/atatus/opentracing.rb +75 -42
  65. data/lib/atatus/rails.rb +29 -13
  66. data/lib/atatus/railtie.rb +19 -6
  67. data/lib/atatus/resque.rb +29 -0
  68. data/lib/atatus/sinatra.rb +53 -0
  69. data/lib/atatus/span/context/db.rb +43 -0
  70. data/lib/atatus/span/context/destination.rb +77 -0
  71. data/lib/atatus/span/context/http.rb +43 -0
  72. data/lib/atatus/span/context.rb +43 -28
  73. data/lib/atatus/span.rb +44 -15
  74. data/lib/atatus/span_helpers.rb +18 -1
  75. data/lib/atatus/spies/action_dispatch.rb +27 -6
  76. data/lib/atatus/spies/delayed_job.rb +26 -5
  77. data/lib/atatus/spies/dynamo_db.rb +62 -0
  78. data/lib/atatus/spies/elasticsearch.rb +53 -7
  79. data/lib/atatus/spies/faraday.rb +54 -20
  80. data/lib/atatus/spies/http.rb +36 -6
  81. data/lib/atatus/spies/json.rb +18 -0
  82. data/lib/atatus/spies/mongo.rb +41 -10
  83. data/lib/atatus/spies/net_http.rb +52 -11
  84. data/lib/atatus/spies/rake.rb +42 -23
  85. data/lib/atatus/spies/redis.rb +17 -0
  86. data/lib/atatus/spies/resque.rb +57 -0
  87. data/lib/atatus/spies/sequel.rb +54 -17
  88. data/lib/atatus/spies/shoryuken.rb +69 -0
  89. data/lib/atatus/spies/sidekiq.rb +46 -25
  90. data/lib/atatus/spies/sinatra.rb +20 -4
  91. data/lib/atatus/spies/sneakers.rb +74 -0
  92. data/lib/atatus/spies/sucker_punch.rb +58 -0
  93. data/lib/atatus/spies/tilt.rb +20 -1
  94. data/lib/atatus/spies.rb +33 -15
  95. data/lib/atatus/sql/signature.rb +169 -0
  96. data/lib/atatus/sql/tokenizer.rb +264 -0
  97. data/lib/atatus/sql/tokens.rb +63 -0
  98. data/lib/atatus/sql.rb +36 -0
  99. data/lib/atatus/sql_summarizer.rb +24 -6
  100. data/lib/atatus/stacktrace/frame.rb +17 -3
  101. data/lib/atatus/stacktrace.rb +17 -0
  102. data/lib/atatus/stacktrace_builder.rb +23 -3
  103. data/lib/atatus/subscriber.rb +23 -4
  104. data/lib/atatus/trace_context/traceparent.rb +111 -0
  105. data/lib/atatus/trace_context/tracestate.rb +148 -0
  106. data/lib/atatus/trace_context.rb +84 -51
  107. data/lib/atatus/transaction.rb +74 -18
  108. data/lib/atatus/transport/base.rb +44 -27
  109. data/lib/atatus/transport/connection/http.rb +58 -35
  110. data/lib/atatus/transport/connection/proxy_pipe.rb +24 -5
  111. data/lib/atatus/transport/connection.rb +28 -72
  112. data/lib/atatus/transport/filters/hash_sanitizer.rb +77 -0
  113. data/lib/atatus/transport/filters/secrets_filter.rb +30 -55
  114. data/lib/atatus/transport/filters.rb +18 -1
  115. data/lib/atatus/transport/headers.rb +83 -0
  116. data/lib/atatus/transport/serializers/context_serializer.rb +30 -3
  117. data/lib/atatus/transport/serializers/error_serializer.rb +17 -2
  118. data/lib/atatus/transport/serializers/metadata_serializer.rb +44 -22
  119. data/lib/atatus/transport/serializers/metricset_serializer.rb +34 -6
  120. data/lib/atatus/transport/serializers/span_serializer.rb +47 -12
  121. data/lib/atatus/transport/serializers/transaction_serializer.rb +18 -2
  122. data/lib/atatus/transport/serializers.rb +17 -5
  123. data/lib/atatus/transport/user_agent.rb +48 -0
  124. data/lib/atatus/transport/worker.rb +31 -7
  125. data/lib/atatus/util/inflector.rb +17 -0
  126. data/lib/atatus/util/lru_cache.rb +17 -0
  127. data/lib/atatus/util/throttle.rb +17 -0
  128. data/lib/atatus/util.rb +18 -1
  129. data/lib/atatus/version.rb +19 -1
  130. data/lib/atatus.rb +84 -16
  131. metadata +46 -26
  132. data/Rakefile +0 -19
  133. data/bench/.gitignore +0 -2
  134. data/bench/app.rb +0 -53
  135. data/bench/benchmark.rb +0 -36
  136. data/bench/report.rb +0 -55
  137. data/bench/rubyprof.rb +0 -39
  138. data/bench/stackprof.rb +0 -23
  139. data/bin/build_docs +0 -5
  140. data/bin/console +0 -15
  141. data/bin/setup +0 -8
  142. data/bin/with_framework +0 -7
  143. data/lib/atatus/metrics/vm.rb +0 -60
  144. data/lib/atatus/normalizers/action_controller.rb +0 -27
  145. data/lib/atatus/normalizers/action_mailer.rb +0 -26
  146. data/lib/atatus/normalizers/active_record.rb +0 -45
  147. data/lib/atatus/util/prefixed_logger.rb +0 -18
  148. data/vendor/.gitkeep +0 -0
data/lib/atatus.rb CHANGED
@@ -1,5 +1,32 @@
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
+
1
18
  # frozen_string_literal: true
2
19
 
20
+ require 'erb'
21
+ require 'http'
22
+ require 'json'
23
+ require 'yaml'
24
+ require 'zlib'
25
+ require 'logger'
26
+ require 'concurrent'
27
+ require 'forwardable'
28
+ require 'securerandom'
29
+
3
30
  require 'atatus/version'
4
31
  require 'atatus/internal_error'
5
32
  require 'atatus/logging'
@@ -12,11 +39,15 @@ require 'atatus/instrumenter'
12
39
  require 'atatus/util'
13
40
 
14
41
  require 'atatus/middleware'
42
+ require 'atatus/graphql'
15
43
 
16
- require 'atatus/railtie' if defined?(::Rails::Railtie)
44
+ require 'atatus/rails' if defined?(::Rails::Railtie)
45
+ require 'atatus/sinatra' if defined?(::Sinatra)
46
+ require 'atatus/grape' if defined?(::Grape)
47
+ require 'atatus/grpc' if defined?(::GRPC)
17
48
 
18
49
  # Atatus
19
- module Atatus # rubocop:disable Metrics/ModuleLength
50
+ module Atatus
20
51
  class << self
21
52
  ### Life cycle
22
53
 
@@ -33,6 +64,16 @@ module Atatus # rubocop:disable Metrics/ModuleLength
33
64
  Agent.stop
34
65
  end
35
66
 
67
+ # Restarts the Atatus Agent using the same config or a new
68
+ # one, if it is provided.
69
+ # Starts the agent if it is not running.
70
+ # Stops and starts the agent if it is running.
71
+ def restart(config = nil)
72
+ config ||= agent&.config
73
+ stop if running?
74
+ start(config)
75
+ end
76
+
36
77
  # @return [Boolean] Whether there's an [Agent] running
37
78
  def running?
38
79
  Agent.running?
@@ -59,7 +100,6 @@ module Atatus # rubocop:disable Metrics/ModuleLength
59
100
  agent&.current_span
60
101
  end
61
102
 
62
- # rubocop:disable Metrics/AbcSize
63
103
  # Get a formatted string containing transaction, span, and trace ids.
64
104
  # If a block is provided, the ids are yielded.
65
105
  #
@@ -78,9 +118,7 @@ module Atatus # rubocop:disable Metrics/ModuleLength
78
118
  ids << "trace.id=#{trace_id}" if trace_id
79
119
  ids.join(' ')
80
120
  end
81
- # rubocop:enable Metrics/AbcSize
82
121
 
83
- # rubocop:disable Metrics/MethodLength
84
122
  # Start a new transaction
85
123
  #
86
124
  # @param name [String] A description of the transaction, eg
@@ -88,6 +126,8 @@ module Atatus # rubocop:disable Metrics/ModuleLength
88
126
  # @param type [String] The kind of the transaction, eg `app.request.get` or
89
127
  # `db.mysql2.query`
90
128
  # @param context [Context] An optional [Context]
129
+ # @param trace_context [TraceContext] An optional [TraceContext] object for
130
+ # Distributed Tracing.
91
131
  # @return [Transaction]
92
132
  def start_transaction(
93
133
  name = nil,
@@ -102,7 +142,6 @@ module Atatus # rubocop:disable Metrics/ModuleLength
102
142
  trace_context: trace_context
103
143
  )
104
144
  end
105
- # rubocop:enable Metrics/MethodLength
106
145
 
107
146
  # Ends the current transaction with `result`
108
147
  #
@@ -112,7 +151,6 @@ module Atatus # rubocop:disable Metrics/ModuleLength
112
151
  agent&.end_transaction(result)
113
152
  end
114
153
 
115
- # rubocop:disable Metrics/MethodLength
116
154
  # Wrap a block in a Transaction, ending it after the block
117
155
  #
118
156
  # @param name [String] A description of the transaction, eg
@@ -120,6 +158,8 @@ module Atatus # rubocop:disable Metrics/ModuleLength
120
158
  # @param type [String] The kind of the transaction, eg `app.request.get` or
121
159
  # `db.mysql2.query`
122
160
  # @param context [Context] An optional [Context]
161
+ # @param trace_context [TraceContext] An optional [TraceContext] object for
162
+ # Distributed Tracing.
123
163
  # @yield [Transaction]
124
164
  # @return result of block
125
165
  def with_transaction(
@@ -148,8 +188,8 @@ module Atatus # rubocop:disable Metrics/ModuleLength
148
188
  end_transaction
149
189
  end
150
190
  end
151
- # rubocop:enable Metrics/MethodLength
152
191
 
192
+ # rubocop:disable Metrics/ParameterLists
153
193
  # Start a new span
154
194
  #
155
195
  # @param name [String] A description of the span, eq `SELECT FROM "users"`
@@ -158,6 +198,11 @@ module Atatus # rubocop:disable Metrics/ModuleLength
158
198
  # @param action [String] The span action type, eq `connect` or `query`
159
199
  # @param context [Span::Context] Context information about the span
160
200
  # @param include_stacktrace [Boolean] Whether or not to capture a stacktrace
201
+ # @param trace_context [TraceContext] An optional [TraceContext] object for
202
+ # Distributed Tracing.
203
+ # @param parent [Transaction,Span] The parent transaction or span.
204
+ # Relevant when the span is created in another thread.
205
+ # @param sync [Boolean] Whether the span is created synchronously or not.
161
206
  # @return [Span]
162
207
  def start_span(
163
208
  name,
@@ -166,7 +211,9 @@ module Atatus # rubocop:disable Metrics/ModuleLength
166
211
  action: nil,
167
212
  context: nil,
168
213
  include_stacktrace: true,
169
- trace_context: nil
214
+ trace_context: nil,
215
+ parent: nil,
216
+ sync: nil
170
217
  )
171
218
  agent&.start_span(
172
219
  name,
@@ -174,7 +221,9 @@ module Atatus # rubocop:disable Metrics/ModuleLength
174
221
  subtype: subtype,
175
222
  action: action,
176
223
  context: context,
177
- trace_context: trace_context
224
+ trace_context: trace_context,
225
+ parent: parent,
226
+ sync: sync
178
227
  ).tap do |span|
179
228
  break unless span && include_stacktrace
180
229
  break unless agent.config.span_frames_min_duration?
@@ -182,7 +231,7 @@ module Atatus # rubocop:disable Metrics/ModuleLength
182
231
  span.original_backtrace ||= caller
183
232
  end
184
233
  end
185
- # rubocop:enable Metrics/MethodLength, Metrics/ParameterLists
234
+ # rubocop:enable Metrics/ParameterLists
186
235
 
187
236
  # Ends the current span
188
237
  #
@@ -191,13 +240,20 @@ module Atatus # rubocop:disable Metrics/ModuleLength
191
240
  agent&.end_span
192
241
  end
193
242
 
194
- # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
243
+ # rubocop:disable Metrics/ParameterLists
195
244
  # Wrap a block in a Span, ending it after the block
196
245
  #
197
246
  # @param name [String] A description of the span, eq `SELECT FROM "users"`
198
- # @param type [String] The kind of span, eq `db.mysql2.query`
247
+ # @param type [String] The kind of span, eq `db`
248
+ # @param subtype [String] The subtype of span eg. `postgresql`.
249
+ # @param action [String] The action type of span eg. `connect` or `query`.
199
250
  # @param context [Span::Context] Context information about the span
200
251
  # @param include_stacktrace [Boolean] Whether or not to capture a stacktrace
252
+ # @param trace_context [TraceContext] An optional [TraceContext] object for
253
+ # Distributed Tracing.
254
+ # @param parent [Transaction,Span] The parent transaction or span.
255
+ # Relevant when the span is created in another thread.
256
+ # @param sync [Boolean] Whether the span is created synchronously or not.
201
257
  # @yield [Span]
202
258
  # @return Result of block
203
259
  def with_span(
@@ -207,7 +263,9 @@ module Atatus # rubocop:disable Metrics/ModuleLength
207
263
  action: nil,
208
264
  context: nil,
209
265
  include_stacktrace: true,
210
- trace_context: nil
266
+ trace_context: nil,
267
+ parent: nil,
268
+ sync: nil
211
269
  )
212
270
  unless block_given?
213
271
  raise ArgumentError,
@@ -225,14 +283,16 @@ module Atatus # rubocop:disable Metrics/ModuleLength
225
283
  action: action,
226
284
  context: context,
227
285
  include_stacktrace: include_stacktrace,
228
- trace_context: trace_context
286
+ trace_context: trace_context,
287
+ parent: parent,
288
+ sync: sync
229
289
  )
230
290
  yield span
231
291
  ensure
232
292
  end_span
233
293
  end
234
294
  end
235
- # rubocop:enable Metrics/MethodLength, Metrics/ParameterLists
295
+ # rubocop:enable Metrics/ParameterLists
236
296
 
237
297
  # Build a [Context] from a Rack `env`. The context may include information
238
298
  # about the request, response, current user and more
@@ -292,6 +352,14 @@ module Atatus # rubocop:disable Metrics/ModuleLength
292
352
  end
293
353
  end
294
354
 
355
+ # Provide further context for the current transaction
356
+ #
357
+ # @param custom [Hash] A hash with custom information. Can be nested.
358
+ # @return [Hash] The current custom context
359
+ def set_custom_data(custom)
360
+ agent&.set_custom_context(custom)
361
+ end
362
+
295
363
  # Provide further context for the current transaction
296
364
  #
297
365
  # @param custom [Hash] A hash with custom information. Can be nested.
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.3.0
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Atatus
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-18 00:00:00.000000000 Z
11
+ date: 2021-12-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -38,7 +38,7 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.0'
41
- description:
41
+ description:
42
42
  email: success@atatus.com
43
43
  executables: []
44
44
  extensions: []
@@ -55,25 +55,16 @@ files:
55
55
  - LICENSE
56
56
  - LICENSE-THIRD-PARTY
57
57
  - README.md
58
- - Rakefile
59
58
  - atatus.gemspec
60
59
  - atatus.yml
61
- - bench/.gitignore
62
- - bench/app.rb
63
- - bench/benchmark.rb
64
- - bench/report.rb
65
- - bench/rubyprof.rb
66
- - bench/stackprof.rb
67
- - bin/build_docs
68
- - bin/console
69
- - bin/setup
70
- - bin/with_framework
71
60
  - lib/atatus.rb
72
61
  - lib/atatus/agent.rb
73
62
  - lib/atatus/central_config.rb
74
63
  - lib/atatus/central_config/cache_control.rb
64
+ - lib/atatus/child_durations.rb
75
65
  - lib/atatus/collector/base.rb
76
66
  - lib/atatus/collector/builder.rb
67
+ - lib/atatus/collector/hist.rb
77
68
  - lib/atatus/collector/layer.rb
78
69
  - lib/atatus/collector/transport.rb
79
70
  - lib/atatus/config.rb
@@ -81,6 +72,7 @@ files:
81
72
  - lib/atatus/config/duration.rb
82
73
  - lib/atatus/config/options.rb
83
74
  - lib/atatus/config/regexp_list.rb
75
+ - lib/atatus/config/wildcard_pattern_list.rb
84
76
  - lib/atatus/context.rb
85
77
  - lib/atatus/context/request.rb
86
78
  - lib/atatus/context/request/socket.rb
@@ -93,6 +85,9 @@ files:
93
85
  - lib/atatus/error/exception.rb
94
86
  - lib/atatus/error/log.rb
95
87
  - lib/atatus/error_builder.rb
88
+ - lib/atatus/grape.rb
89
+ - lib/atatus/graphql.rb
90
+ - lib/atatus/grpc.rb
96
91
  - lib/atatus/instrumenter.rb
97
92
  - lib/atatus/internal_error.rb
98
93
  - lib/atatus/logging.rb
@@ -104,25 +99,39 @@ files:
104
99
  - lib/atatus/metadata/system_info/hw_info.rb
105
100
  - lib/atatus/metadata/system_info/os_info.rb
106
101
  - lib/atatus/metrics.rb
107
- - lib/atatus/metrics/cpu_mem.rb
108
- - lib/atatus/metrics/vm.rb
102
+ - lib/atatus/metrics/breakdown_set.rb
103
+ - lib/atatus/metrics/cpu_mem_set.rb
104
+ - lib/atatus/metrics/metric.rb
105
+ - lib/atatus/metrics/set.rb
106
+ - lib/atatus/metrics/span_scoped_set.rb
107
+ - lib/atatus/metrics/transaction_set.rb
108
+ - lib/atatus/metrics/vm_set.rb
109
109
  - lib/atatus/metricset.rb
110
110
  - lib/atatus/middleware.rb
111
111
  - lib/atatus/naively_hashable.rb
112
112
  - lib/atatus/normalizers.rb
113
- - lib/atatus/normalizers/action_controller.rb
114
- - lib/atatus/normalizers/action_mailer.rb
115
- - lib/atatus/normalizers/action_view.rb
116
- - lib/atatus/normalizers/active_record.rb
113
+ - lib/atatus/normalizers/grape.rb
114
+ - lib/atatus/normalizers/grape/endpoint_run.rb
115
+ - lib/atatus/normalizers/rails.rb
116
+ - lib/atatus/normalizers/rails/action_controller.rb
117
+ - lib/atatus/normalizers/rails/action_mailer.rb
118
+ - lib/atatus/normalizers/rails/action_view.rb
119
+ - lib/atatus/normalizers/rails/active_record.rb
117
120
  - lib/atatus/opentracing.rb
118
121
  - lib/atatus/rails.rb
119
122
  - lib/atatus/railtie.rb
123
+ - lib/atatus/resque.rb
124
+ - lib/atatus/sinatra.rb
120
125
  - lib/atatus/span.rb
121
126
  - lib/atatus/span/context.rb
127
+ - lib/atatus/span/context/db.rb
128
+ - lib/atatus/span/context/destination.rb
129
+ - lib/atatus/span/context/http.rb
122
130
  - lib/atatus/span_helpers.rb
123
131
  - lib/atatus/spies.rb
124
132
  - lib/atatus/spies/action_dispatch.rb
125
133
  - lib/atatus/spies/delayed_job.rb
134
+ - lib/atatus/spies/dynamo_db.rb
126
135
  - lib/atatus/spies/elasticsearch.rb
127
136
  - lib/atatus/spies/faraday.rb
128
137
  - lib/atatus/spies/http.rb
@@ -131,23 +140,35 @@ files:
131
140
  - lib/atatus/spies/net_http.rb
132
141
  - lib/atatus/spies/rake.rb
133
142
  - lib/atatus/spies/redis.rb
143
+ - lib/atatus/spies/resque.rb
134
144
  - lib/atatus/spies/sequel.rb
145
+ - lib/atatus/spies/shoryuken.rb
135
146
  - lib/atatus/spies/sidekiq.rb
136
147
  - lib/atatus/spies/sinatra.rb
148
+ - lib/atatus/spies/sneakers.rb
149
+ - lib/atatus/spies/sucker_punch.rb
137
150
  - lib/atatus/spies/tilt.rb
151
+ - lib/atatus/sql.rb
152
+ - lib/atatus/sql/signature.rb
153
+ - lib/atatus/sql/tokenizer.rb
154
+ - lib/atatus/sql/tokens.rb
138
155
  - lib/atatus/sql_summarizer.rb
139
156
  - lib/atatus/stacktrace.rb
140
157
  - lib/atatus/stacktrace/frame.rb
141
158
  - lib/atatus/stacktrace_builder.rb
142
159
  - lib/atatus/subscriber.rb
143
160
  - lib/atatus/trace_context.rb
161
+ - lib/atatus/trace_context/traceparent.rb
162
+ - lib/atatus/trace_context/tracestate.rb
144
163
  - lib/atatus/transaction.rb
145
164
  - lib/atatus/transport/base.rb
146
165
  - lib/atatus/transport/connection.rb
147
166
  - lib/atatus/transport/connection/http.rb
148
167
  - lib/atatus/transport/connection/proxy_pipe.rb
149
168
  - lib/atatus/transport/filters.rb
169
+ - lib/atatus/transport/filters/hash_sanitizer.rb
150
170
  - lib/atatus/transport/filters/secrets_filter.rb
171
+ - lib/atatus/transport/headers.rb
151
172
  - lib/atatus/transport/serializers.rb
152
173
  - lib/atatus/transport/serializers/context_serializer.rb
153
174
  - lib/atatus/transport/serializers/error_serializer.rb
@@ -155,21 +176,20 @@ files:
155
176
  - lib/atatus/transport/serializers/metricset_serializer.rb
156
177
  - lib/atatus/transport/serializers/span_serializer.rb
157
178
  - lib/atatus/transport/serializers/transaction_serializer.rb
179
+ - lib/atatus/transport/user_agent.rb
158
180
  - lib/atatus/transport/worker.rb
159
181
  - lib/atatus/util.rb
160
182
  - lib/atatus/util/inflector.rb
161
183
  - lib/atatus/util/lru_cache.rb
162
- - lib/atatus/util/prefixed_logger.rb
163
184
  - lib/atatus/util/throttle.rb
164
185
  - lib/atatus/version.rb
165
- - vendor/.gitkeep
166
186
  homepage: https://www.atatus.com
167
187
  licenses:
168
188
  - Atatus
169
189
  metadata:
170
190
  changelog_uri: https://docs.atatus.com/docs/release-notes/ruby.html
171
- documentation_uri: https://docs.atatus.com/docs/application-monitoring/ruby-agent/rails.html
172
- post_install_message:
191
+ documentation_uri: https://docs.atatus.com/docs/application-monitoring/ruby-agent/overview.html
192
+ post_install_message:
173
193
  rdoc_options: []
174
194
  require_paths:
175
195
  - lib
@@ -185,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
205
  version: '0'
186
206
  requirements: []
187
207
  rubygems_version: 3.0.4
188
- signing_key:
208
+ signing_key:
189
209
  specification_version: 4
190
210
  summary: Atatus Ruby Agent
191
211
  test_files: []
data/Rakefile DELETED
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
4
-
5
- Rake::Task[:release].enhance do
6
- `git checkout 2.x &&
7
- git rebase master &&
8
- git push origin 2.x &&
9
- git checkout master`
10
- end
11
-
12
- require 'rspec/core/rake_task'
13
- RSpec::Core::RakeTask.new(:spec)
14
-
15
- require 'yard'
16
- YARD::Rake::YardocTask.new
17
- task docs: :yard
18
-
19
- task default: :spec
data/bench/.gitignore DELETED
@@ -1,2 +0,0 @@
1
- tmp/*
2
- db/*
data/bench/app.rb DELETED
@@ -1,53 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
5
- require 'active_record'
6
- require 'action_controller/railtie'
7
- require 'atatus'
8
- require 'atatus/railtie'
9
-
10
- $log = Logger.new('/tmp/bench.log')
11
-
12
- ActiveRecord::Base.logger = $log
13
-
14
- ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: '/tmp/bench.sqlite3')
15
-
16
- ActiveRecord::Schema.define do
17
- create_table :posts, force: true do |t|
18
- t.string :title
19
- t.timestamps
20
- end
21
- end
22
-
23
- class Post < ActiveRecord::Base
24
- end
25
-
26
- 10.times { |i| Post.create! title: "Post #{i}" }
27
-
28
- class ApplicationController < ActionController::Base
29
- def index
30
- render inline: '<%= Post.pluck(:title).join(", ") %>'
31
- end
32
-
33
- def favicon
34
- render nothing: true
35
- end
36
- end
37
-
38
- class App < Rails::Application
39
- config.secret_key_base = '__secret'
40
- config.logger = $log
41
- config.eager_load = false
42
-
43
- config.atatus.disable_send = true
44
- config.atatus.logger = $log
45
- config.atatus.log_level = Logger::DEBUG
46
- end
47
-
48
- App.initialize!
49
-
50
- App.routes.draw do
51
- get '/favicon.ico', to: 'application#favicon'
52
- root to: 'application#index'
53
- end
data/bench/benchmark.rb DELETED
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- ENV['RAILS_ENV'] = 'production'
5
-
6
- require 'bundler'
7
- require 'bundler/setup'
8
-
9
- require 'benchmark'
10
- include Benchmark
11
- require 'rack/test'
12
-
13
- require './bench/app'
14
-
15
- def app
16
- App
17
- end
18
-
19
- include Rack::Test::Methods
20
-
21
- def perform
22
- 10_000.times do
23
- get '/'
24
- end
25
- end
26
-
27
- bench = Benchmark.benchmark(CAPTION, 15, FORMAT) do |b|
28
- perform # warm up
29
-
30
- b.report('with agent:') { perform }
31
-
32
- Atatus.stop
33
- perform # warm up
34
-
35
- b.report('without agent:') { perform }
36
- end
data/bench/report.rb DELETED
@@ -1,55 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'time'
5
- require 'json'
6
-
7
- input = STDIN.read.split("\n")
8
-
9
- git_sha, git_msg = `git log -n 1 --pretty="format:%H|||%s"`.split('|||')
10
- git_date = `git log -n 1 --pretty="format:%ai"`
11
- platform = Gem::Platform.local
12
-
13
- def doc(payload)
14
- puts({ index: { _index: "benchmark-ruby", _type: "_doc" } }.to_json)
15
- puts(payload.to_json)
16
- end
17
-
18
- meta = {
19
- executed_at: Time.new.iso8601,
20
- 'git.commit' => git_sha,
21
- 'git.date' => String(git_date).strip != '' && Time.parse(git_date).iso8601,
22
- 'git.subject' => git_msg,
23
- hostname: `hostname`.chomp,
24
- engine: RUBY_ENGINE,
25
- arch: platform.cpu,
26
- os: platform.os,
27
- ruby_version: "#{RUBY_ENGINE == 'jruby' ? 'j' : ''}#{RUBY_VERSION}"
28
- }
29
-
30
- results =
31
- input
32
- .grep(/^with/)
33
- .map do |line|
34
- title = line.match(/^(.*):/) { |m| m[1] }
35
- user, system, total, real = line.scan(/[0-9\.]+/).map(&:to_f)
36
- meta.merge(
37
- title: title,
38
- user: user,
39
- system: system,
40
- total: total,
41
- real: real,
42
- )
43
- end
44
-
45
- results.each { |result| doc result }
46
-
47
- overhead =
48
- (results[0][:total] - results[1][:total]) *
49
- 1000 / # milliseconds
50
- 10_000 # transactions
51
-
52
- doc meta.merge(
53
- title: 'overhead',
54
- overhead: overhead
55
- )
data/bench/rubyprof.rb DELETED
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'ruby-prof'
4
- require 'rack/test'
5
-
6
- $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
7
- require 'atatus'
8
-
9
- require './bench/app'
10
- include App::Helpers
11
-
12
- def perform(app, count: 1000)
13
- app.start
14
-
15
- transactions = count.times.map do |i|
16
- Atatus.transaction "Transaction##{i}",
17
- context: Atatus.build_context(app.mock_env) do
18
- Atatus.span('Number one') { 'ok 1' }
19
- Atatus.span('Number two') { 'ok 2' }
20
- Atatus.span('Number three') { 'ok 3' }
21
- end
22
- end
23
-
24
- app.stop
25
- end
26
-
27
- def do_bench(transaction_count: 1000, **config)
28
- with_app(config) do |app|
29
- profile = RubyProf::Profile.new
30
- profile.exclude_common_methods!
31
- profile.start
32
- perform(app, count: transaction_count)
33
- profile.stop
34
- printer = RubyProf::GraphHtmlPrinter.new(profile)
35
- printer.print(File.open('bench/tmp/out.html', 'w'))
36
- end
37
- end
38
-
39
- do_bench(transaction_count: 10_000)
data/bench/stackprof.rb DELETED
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'stackprof'
5
- require 'rack/test'
6
-
7
- require './bench/app'
8
-
9
- def app
10
- App
11
- end
12
-
13
- include Rack::Test::Methods
14
-
15
- puts 'Running '
16
- profile = StackProf.run(mode: :cpu) do
17
- 10_000.times do
18
- get '/'
19
- end
20
- end
21
- puts ''
22
-
23
- StackProf::Report.new(profile).print_text
data/bin/build_docs DELETED
@@ -1,5 +0,0 @@
1
- #!/bin/bash
2
- set -ex
3
-
4
- # Requires atatus/docs to be checked out at ../docs
5
- ../docs/build_docs.pl --doc docs/index.asciidoc --chunk 1
data/bin/console DELETED
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'bundler/setup'
5
- require 'atatus'
6
-
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
-
10
- # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
13
-
14
- require 'irb'
15
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
data/bin/with_framework DELETED
@@ -1,7 +0,0 @@
1
- #!/bin/bash -x
2
- set -e
3
-
4
- framework=$1
5
-
6
- FRAMEWORK=$framework bundle update
7
- FRAMEWORK=$framework ${@:2}