atatus 1.3.0 → 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/Gemfile +72 -22
- data/LICENSE +1 -1
- data/atatus.gemspec +2 -2
- data/lib/atatus/agent.rb +78 -29
- data/lib/atatus/central_config/cache_control.rb +18 -1
- data/lib/atatus/central_config.rb +72 -27
- data/lib/atatus/child_durations.rb +64 -0
- data/lib/atatus/collector/base.rb +102 -43
- data/lib/atatus/collector/builder.rb +134 -4
- data/lib/atatus/collector/hist.rb +54 -0
- data/lib/atatus/collector/layer.rb +1 -0
- data/lib/atatus/collector/transport.rb +41 -11
- data/lib/atatus/config/bytes.rb +17 -0
- data/lib/atatus/config/duration.rb +17 -0
- data/lib/atatus/config/options.rb +29 -9
- data/lib/atatus/config/regexp_list.rb +17 -0
- data/lib/atatus/config/wildcard_pattern_list.rb +64 -0
- data/lib/atatus/config.rb +129 -28
- data/lib/atatus/context/request/socket.rb +18 -1
- data/lib/atatus/context/request/url.rb +17 -0
- data/lib/atatus/context/request.rb +17 -0
- data/lib/atatus/context/response.rb +27 -2
- data/lib/atatus/context/user.rb +17 -0
- data/lib/atatus/context.rb +32 -1
- data/lib/atatus/context_builder.rb +19 -4
- data/lib/atatus/deprecations.rb +17 -0
- data/lib/atatus/error/exception.rb +24 -0
- data/lib/atatus/error/log.rb +17 -0
- data/lib/atatus/error.rb +27 -0
- data/lib/atatus/error_builder.rb +21 -2
- data/lib/atatus/grape.rb +62 -0
- data/lib/atatus/graphql.rb +91 -0
- data/lib/atatus/grpc.rb +99 -0
- data/lib/atatus/instrumenter.rb +135 -30
- data/lib/atatus/internal_error.rb +17 -0
- data/lib/atatus/logging.rb +17 -2
- data/lib/atatus/metadata/process_info.rb +17 -0
- data/lib/atatus/metadata/service_info.rb +21 -6
- data/lib/atatus/metadata/system_info/container_info.rb +49 -10
- data/lib/atatus/metadata/system_info/hw_info.rb +1 -1
- data/lib/atatus/metadata/system_info.rb +22 -3
- data/lib/atatus/metadata.rb +17 -0
- data/lib/atatus/metrics/breakdown_set.rb +31 -0
- data/lib/atatus/metrics/{cpu_mem.rb → cpu_mem_set.rb} +110 -63
- data/lib/atatus/metrics/metric.rb +140 -0
- data/lib/atatus/metrics/set.rb +123 -0
- data/lib/atatus/metrics/span_scoped_set.rb +56 -0
- data/lib/atatus/metrics/transaction_set.rb +26 -0
- data/lib/atatus/metrics/vm_set.rb +58 -0
- data/lib/atatus/metrics.rb +69 -27
- data/lib/atatus/metricset.rb +48 -4
- data/lib/atatus/middleware.rb +28 -8
- data/lib/atatus/naively_hashable.rb +17 -0
- data/lib/atatus/normalizers/grape/endpoint_run.rb +65 -0
- data/lib/atatus/normalizers/grape.rb +22 -0
- data/lib/atatus/normalizers/rails/action_controller.rb +44 -0
- data/lib/atatus/normalizers/rails/action_mailer.rb +43 -0
- data/lib/atatus/normalizers/{action_view.rb → rails/action_view.rb} +17 -0
- data/lib/atatus/normalizers/rails/active_record.rb +80 -0
- data/lib/atatus/normalizers/rails.rb +27 -0
- data/lib/atatus/normalizers.rb +23 -9
- data/lib/atatus/opentracing.rb +75 -42
- data/lib/atatus/rails.rb +29 -13
- data/lib/atatus/railtie.rb +19 -6
- data/lib/atatus/resque.rb +29 -0
- data/lib/atatus/sinatra.rb +53 -0
- data/lib/atatus/span/context/db.rb +43 -0
- data/lib/atatus/span/context/destination.rb +77 -0
- data/lib/atatus/span/context/http.rb +43 -0
- data/lib/atatus/span/context.rb +43 -28
- data/lib/atatus/span.rb +44 -15
- data/lib/atatus/span_helpers.rb +18 -1
- data/lib/atatus/spies/action_dispatch.rb +27 -6
- data/lib/atatus/spies/delayed_job.rb +26 -5
- data/lib/atatus/spies/dynamo_db.rb +62 -0
- data/lib/atatus/spies/elasticsearch.rb +53 -7
- data/lib/atatus/spies/faraday.rb +54 -20
- data/lib/atatus/spies/http.rb +36 -6
- data/lib/atatus/spies/json.rb +18 -0
- data/lib/atatus/spies/mongo.rb +41 -10
- data/lib/atatus/spies/net_http.rb +52 -11
- data/lib/atatus/spies/rake.rb +42 -23
- data/lib/atatus/spies/redis.rb +17 -0
- data/lib/atatus/spies/resque.rb +57 -0
- data/lib/atatus/spies/sequel.rb +54 -17
- data/lib/atatus/spies/shoryuken.rb +69 -0
- data/lib/atatus/spies/sidekiq.rb +46 -25
- data/lib/atatus/spies/sinatra.rb +20 -4
- data/lib/atatus/spies/sneakers.rb +74 -0
- data/lib/atatus/spies/sucker_punch.rb +58 -0
- data/lib/atatus/spies/tilt.rb +20 -1
- data/lib/atatus/spies.rb +33 -15
- data/lib/atatus/sql/signature.rb +169 -0
- data/lib/atatus/sql/tokenizer.rb +264 -0
- data/lib/atatus/sql/tokens.rb +63 -0
- data/lib/atatus/sql.rb +36 -0
- data/lib/atatus/sql_summarizer.rb +24 -6
- data/lib/atatus/stacktrace/frame.rb +17 -3
- data/lib/atatus/stacktrace.rb +17 -0
- data/lib/atatus/stacktrace_builder.rb +23 -3
- data/lib/atatus/subscriber.rb +23 -4
- data/lib/atatus/trace_context/traceparent.rb +111 -0
- data/lib/atatus/trace_context/tracestate.rb +148 -0
- data/lib/atatus/trace_context.rb +84 -51
- data/lib/atatus/transaction.rb +74 -18
- data/lib/atatus/transport/base.rb +44 -27
- data/lib/atatus/transport/connection/http.rb +58 -35
- data/lib/atatus/transport/connection/proxy_pipe.rb +24 -5
- data/lib/atatus/transport/connection.rb +28 -72
- data/lib/atatus/transport/filters/hash_sanitizer.rb +77 -0
- data/lib/atatus/transport/filters/secrets_filter.rb +30 -55
- data/lib/atatus/transport/filters.rb +18 -1
- data/lib/atatus/transport/headers.rb +83 -0
- data/lib/atatus/transport/serializers/context_serializer.rb +30 -3
- data/lib/atatus/transport/serializers/error_serializer.rb +17 -2
- data/lib/atatus/transport/serializers/metadata_serializer.rb +44 -22
- data/lib/atatus/transport/serializers/metricset_serializer.rb +34 -6
- data/lib/atatus/transport/serializers/span_serializer.rb +47 -12
- data/lib/atatus/transport/serializers/transaction_serializer.rb +18 -2
- data/lib/atatus/transport/serializers.rb +17 -5
- data/lib/atatus/transport/user_agent.rb +48 -0
- data/lib/atatus/transport/worker.rb +31 -7
- data/lib/atatus/util/inflector.rb +17 -0
- data/lib/atatus/util/lru_cache.rb +17 -0
- data/lib/atatus/util/throttle.rb +17 -0
- data/lib/atatus/util.rb +18 -1
- data/lib/atatus/version.rb +19 -1
- data/lib/atatus.rb +84 -16
- metadata +46 -26
- data/Rakefile +0 -19
- data/bench/.gitignore +0 -2
- data/bench/app.rb +0 -53
- data/bench/benchmark.rb +0 -36
- data/bench/report.rb +0 -55
- data/bench/rubyprof.rb +0 -39
- data/bench/stackprof.rb +0 -23
- data/bin/build_docs +0 -5
- data/bin/console +0 -15
- data/bin/setup +0 -8
- data/bin/with_framework +0 -7
- data/lib/atatus/metrics/vm.rb +0 -60
- data/lib/atatus/normalizers/action_controller.rb +0 -27
- data/lib/atatus/normalizers/action_mailer.rb +0 -26
- data/lib/atatus/normalizers/active_record.rb +0 -45
- data/lib/atatus/util/prefixed_logger.rb +0 -18
- 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/
|
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
|
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/
|
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/
|
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
|
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/
|
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.
|
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:
|
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/
|
108
|
-
- lib/atatus/metrics/
|
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/
|
114
|
-
- lib/atatus/normalizers/
|
115
|
-
- lib/atatus/normalizers/
|
116
|
-
- lib/atatus/normalizers/
|
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/
|
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
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
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