stackify-ruby-apm 1.15.3.beta1 → 1.16.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/stackify_apm/agent.rb +5 -4
- data/lib/stackify_apm/config.rb +9 -1
- data/lib/stackify_apm/instrumenter.rb +4 -4
- data/lib/stackify_apm/instrumenter_helper.rb +12 -12
- data/lib/stackify_apm/logger/log_device.rb +2 -1
- data/lib/stackify_apm/normalizers/active_record.rb +17 -3
- data/lib/stackify_apm/span/context.rb +1 -1
- data/lib/stackify_apm/spies/action_dispatch.rb +26 -0
- data/lib/stackify_apm/spies/curb/easy.rb +16 -16
- data/lib/stackify_apm/spies/delayed_job.rb +2 -2
- data/lib/stackify_apm/spies/httpclient.rb +4 -4
- data/lib/stackify_apm/spies/sequel.rb +2 -2
- data/lib/stackify_apm/spies/sidekiq.rb +2 -2
- data/lib/stackify_apm/spies/sinatra.rb +6 -6
- data/lib/stackify_apm/spies/sucker_punch.rb +2 -2
- data/lib/stackify_apm/spies/tilt.rb +2 -2
- data/lib/stackify_apm/util.rb +34 -0
- data/lib/stackify_apm/version.rb +2 -2
- data/stackify-ruby-apm.gemspec +47 -16
- metadata +68 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ebb6c26f4eef249448035790df567d74b2c81915d42dcba72a4d8dfa83649f0
|
4
|
+
data.tar.gz: d4a30f83de5976fbacab28c544b27c5d8afb26b13db4af484570e666f4424717
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af4ef9861dfdeb3eaa8e721ed92f55d752c8687f53aa818596b7688e0a909e1971e35b0aab90c7a37569eb2930c3e07a17697795b932ffee3e4cecc95e92ba67
|
7
|
+
data.tar.gz: 8df99628de54aadbe98674602da416dfde21d637f879ea70d540ad4ce830dc740f449da68f390a595893f4ac3665f1b0f8d03edc5d6512e9049cabf5af483585
|
data/lib/stackify_apm/agent.rb
CHANGED
@@ -40,6 +40,7 @@ module StackifyRubyAPM
|
|
40
40
|
date_now = Time.now
|
41
41
|
current_trace_file = config.log_trace_path + squish(host_name) + '#' + squish(pid.to_s)
|
42
42
|
if ENV['STACKIFY_RUBY_ENV'] != 'rspec'
|
43
|
+
Util.checkOrCreateFolder(config.log_trace_path)
|
43
44
|
config.tracer_logger = StackifyLogger.new(current_trace_file, config.filenum_rotate, config.logger_byte_size)
|
44
45
|
config.debug_logger
|
45
46
|
config.logtime_created = date_now.strftime('%H:%M')
|
@@ -148,12 +149,12 @@ module StackifyRubyAPM
|
|
148
149
|
|
149
150
|
# Loads transaction
|
150
151
|
#
|
151
|
-
def transaction(*args, &block)
|
152
|
-
instrumenter.transaction(*args, &block)
|
152
|
+
def transaction(*args, **kwargs, &block)
|
153
|
+
instrumenter.transaction(*args, **kwargs, &block)
|
153
154
|
end
|
154
155
|
|
155
|
-
def span(*args, &block)
|
156
|
-
instrumenter.span(*args, &block)
|
156
|
+
def span(*args, **kwargs, &block)
|
157
|
+
instrumenter.span(*args, **kwargs, &block)
|
157
158
|
end
|
158
159
|
|
159
160
|
# Responsible for building the transaction's context
|
data/lib/stackify_apm/config.rb
CHANGED
@@ -32,7 +32,7 @@ module StackifyRubyAPM
|
|
32
32
|
transport: StackifyRubyAPM::TRACE_LOG,
|
33
33
|
instrument: true,
|
34
34
|
debug_logging: false,
|
35
|
-
log_path: StackifyRubyAPM::Util.host_os == 'WINDOWS' ? 'C:\ProgramData\Stackify\Ruby\
|
35
|
+
log_path: StackifyRubyAPM::Util.host_os == 'WINDOWS' ? 'C:\ProgramData\Stackify\Ruby\debug\stackify-ruby-apm-1.log' : '/usr/local/stackify/stackify-ruby-apm/debug/stackify-ruby-apm-1.log',
|
36
36
|
log_level: Logger::INFO,
|
37
37
|
log_trace_path: StackifyRubyAPM::Util.host_os == 'WINDOWS' ? 'C:\ProgramData\Stackify\Ruby\log\\' : '/usr/local/stackify/stackify-ruby-apm/log/',
|
38
38
|
|
@@ -269,6 +269,10 @@ module StackifyRubyAPM
|
|
269
269
|
# For unix socket we don't create a trace log file
|
270
270
|
when StackifyRubyAPM::TRACE_LOG
|
271
271
|
debugger_logpath = log_path == '-' ? $stdout : log_path
|
272
|
+
if (debugger_logpath == log_path)
|
273
|
+
dir_name = File.dirname(debugger_logpath)
|
274
|
+
Util.checkOrCreateFolder(dir_name)
|
275
|
+
end
|
272
276
|
logger = StackifyLogger.new(debugger_logpath, debugger_filenum_rotate, debugger_byte_size)
|
273
277
|
logger.level = log_level
|
274
278
|
self.logger = logger
|
@@ -344,6 +348,10 @@ module StackifyRubyAPM
|
|
344
348
|
|
345
349
|
def build_logger
|
346
350
|
debugger_logpath = log_path == '-' ? $stdout : log_path
|
351
|
+
if (debugger_logpath == log_path)
|
352
|
+
dir_name = File.dirname(debugger_logpath)
|
353
|
+
Util.checkOrCreateFolder(dir_name)
|
354
|
+
end
|
347
355
|
logger = StackifyLogger.new(debugger_logpath, debugger_filenum_rotate, debugger_byte_size)
|
348
356
|
logger.level = log_level
|
349
357
|
self.logger = logger
|
@@ -56,7 +56,7 @@ module StackifyRubyAPM
|
|
56
56
|
|
57
57
|
# Creates a new transaction or return the currently running
|
58
58
|
#
|
59
|
-
def transaction(*args)
|
59
|
+
def transaction(*args, **kwargs)
|
60
60
|
unless config.instrument
|
61
61
|
yield if block_given?
|
62
62
|
return
|
@@ -67,7 +67,7 @@ module StackifyRubyAPM
|
|
67
67
|
return transaction
|
68
68
|
end
|
69
69
|
|
70
|
-
transaction = Transaction.new self, *args
|
70
|
+
transaction = Transaction.new self, *args, **kwargs
|
71
71
|
|
72
72
|
self.current_transaction = transaction
|
73
73
|
return transaction unless block_given?
|
@@ -82,14 +82,14 @@ module StackifyRubyAPM
|
|
82
82
|
transaction
|
83
83
|
end
|
84
84
|
|
85
|
-
def span(*args, &block)
|
85
|
+
def span(*args, **kwargs, &block)
|
86
86
|
unless current_transaction
|
87
87
|
return yield if block_given?
|
88
88
|
|
89
89
|
return
|
90
90
|
end
|
91
91
|
|
92
|
-
current_transaction.span(*args, &block)
|
92
|
+
current_transaction.span(*args, **kwargs, &block)
|
93
93
|
end
|
94
94
|
|
95
95
|
# Once the transaction is submitted it will be stored temporarily in queue
|
@@ -73,11 +73,11 @@ module StackifyRubyAPM
|
|
73
73
|
then "protected"
|
74
74
|
end
|
75
75
|
}
|
76
|
-
def #{current_method}(*args, &block)
|
76
|
+
def #{current_method}(*args, **kwargs, &block)
|
77
77
|
if StackifyRubyAPM.current_transaction.nil? && #{!transaction.nil?}
|
78
78
|
t = StackifyRubyAPM.transaction("custom.#{current_class}.#{current_method}", TRACETYPE)
|
79
79
|
begin
|
80
|
-
req = #{current_method_without}(*args, &block)
|
80
|
+
req = #{current_method_without}(*args, **kwargs, &block)
|
81
81
|
rescue Exception => e
|
82
82
|
StackifyRubyAPM.report(e)
|
83
83
|
raise e
|
@@ -100,10 +100,10 @@ module StackifyRubyAPM
|
|
100
100
|
end
|
101
101
|
|
102
102
|
StackifyRubyAPM.span name, type, context: ctx do
|
103
|
-
#{current_method_without}(*args, &block)
|
103
|
+
#{current_method_without}(*args, **kwargs, &block)
|
104
104
|
end
|
105
105
|
else
|
106
|
-
return #{current_method_without}(*args, &block)
|
106
|
+
return #{current_method_without}(*args, **kwargs, &block)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
end
|
@@ -152,11 +152,11 @@ module StackifyRubyAPM
|
|
152
152
|
#{current_class}.class_eval do
|
153
153
|
singleton_class.send(:alias_method, :"_self_without_apm_#{current_method}", :"#{current_method}")
|
154
154
|
|
155
|
-
def self.#{current_method}(*args, &block)
|
155
|
+
def self.#{current_method}(*args, **kwargs, &block)
|
156
156
|
if StackifyRubyAPM.current_transaction.nil? && #{!transaction.nil?}
|
157
157
|
t = StackifyRubyAPM.transaction("custom.#{current_class}.#{current_method}", TRACETYPE)
|
158
158
|
begin
|
159
|
-
req = _self_without_apm_#{current_method}(*args, &block)
|
159
|
+
req = _self_without_apm_#{current_method}(*args, **kwargs, &block)
|
160
160
|
rescue Exception => e
|
161
161
|
StackifyRubyAPM.report(e)
|
162
162
|
raise e
|
@@ -179,10 +179,10 @@ module StackifyRubyAPM
|
|
179
179
|
end
|
180
180
|
|
181
181
|
StackifyRubyAPM.span name, type, context: ctx do
|
182
|
-
_self_without_apm_#{current_method}(*args, &block)
|
182
|
+
_self_without_apm_#{current_method}(*args, **kwargs, &block)
|
183
183
|
end
|
184
184
|
else
|
185
|
-
return _self_without_apm_#{current_method}(*args, &block)
|
185
|
+
return _self_without_apm_#{current_method}(*args, **kwargs, &block)
|
186
186
|
end
|
187
187
|
end
|
188
188
|
|
@@ -240,11 +240,11 @@ module StackifyRubyAPM
|
|
240
240
|
class<< self
|
241
241
|
alias_method "#{current_method}_without_apm", "#{current_method}"
|
242
242
|
|
243
|
-
def #{current_method}(*args, &block)
|
243
|
+
def #{current_method}(*args, **kwargs, &block)
|
244
244
|
if StackifyRubyAPM.current_transaction.nil? && #{!transaction.nil?}
|
245
245
|
t = StackifyRubyAPM.transaction("custom.#{current_module}.#{current_method}", TRACETYPE)
|
246
246
|
begin
|
247
|
-
req = #{current_method}_without_apm(*args, &block)
|
247
|
+
req = #{current_method}_without_apm(*args, **kwargs, &block)
|
248
248
|
rescue Exception => e
|
249
249
|
StackifyRubyAPM.report(e)
|
250
250
|
raise e
|
@@ -267,10 +267,10 @@ module StackifyRubyAPM
|
|
267
267
|
end
|
268
268
|
|
269
269
|
StackifyRubyAPM.span name, type, context: ctx do
|
270
|
-
#{current_method}_without_apm(*args, &block)
|
270
|
+
#{current_method}_without_apm(*args, **kwargs, &block)
|
271
271
|
end
|
272
272
|
else
|
273
|
-
return #{current_method}_without_apm(*args, &block)
|
273
|
+
return #{current_method}_without_apm(*args, **kwargs, &block)
|
274
274
|
end
|
275
275
|
end
|
276
276
|
end
|
@@ -84,10 +84,11 @@ module StackifyRubyAPM
|
|
84
84
|
# Override create_logfile of core LogDevice class where we set File.chmod to 0o777
|
85
85
|
def create_logfile(filename)
|
86
86
|
logdev = super
|
87
|
-
File.chmod(0o777, filename)
|
88
87
|
|
89
88
|
begin
|
90
89
|
dir_name = File.dirname(filename)
|
90
|
+
StackifyRubyAPM::Util.checkOrCreateFolder(dir_name)
|
91
|
+
File.chmod(0o777, filename)
|
91
92
|
# repath current file due to windows separator \\ doesn't work with Dir.glob
|
92
93
|
dir_name = dir_name.split(File::ALT_SEPARATOR).join(File::SEPARATOR)
|
93
94
|
search_files = File.join("#{dir_name}", "{[!stackify-ruby-apm]*}.log")
|
@@ -3,6 +3,7 @@
|
|
3
3
|
# Possible use of ActiveSupport.on_load(:active_record)
|
4
4
|
|
5
5
|
require 'stackify_apm/helper/database_helper'
|
6
|
+
require 'rails'
|
6
7
|
|
7
8
|
module StackifyRubyAPM
|
8
9
|
module Normalizers
|
@@ -79,17 +80,30 @@ module StackifyRubyAPM
|
|
79
80
|
end
|
80
81
|
|
81
82
|
if (connection.nil?)
|
82
|
-
|
83
|
+
if ::ActiveRecord::Base.respond_to?(:connection)
|
84
|
+
return ::ActiveRecord::Base.connection.adapter_name.downcase
|
85
|
+
else
|
86
|
+
return 'generic'
|
87
|
+
end
|
83
88
|
end
|
84
89
|
|
85
90
|
if (connection.respond_to?(:adapter_name) && connection.adapter_name.nil?)
|
86
|
-
|
91
|
+
if ::ActiveRecord::Base.respond_to?(:connection)
|
92
|
+
return ::ActiveRecord::Base.connection.adapter_name.downcase
|
93
|
+
else
|
94
|
+
return 'generic'
|
95
|
+
end
|
87
96
|
end
|
88
97
|
|
89
98
|
connection.adapter_name.downcase
|
90
99
|
rescue StandardError => error
|
91
100
|
debug '[SqlNormalizer] lookup_adapter err: ' + error.inspect.to_s
|
92
|
-
nil
|
101
|
+
# do a last fail safe check before returning nil
|
102
|
+
if ::ActiveRecord::Base.respond_to?(:connection)
|
103
|
+
::ActiveRecord::Base.connection.adapter_name.downcase
|
104
|
+
else
|
105
|
+
nil
|
106
|
+
end
|
93
107
|
end
|
94
108
|
|
95
109
|
def lookup_adapter_config
|
@@ -26,6 +26,26 @@ module StackifyRubyAPM
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
class ActionDispatchDebugExceptionsSpy
|
30
|
+
def install
|
31
|
+
::ActionDispatch::DebugExceptions.class_eval do
|
32
|
+
alias_method 'render_exception_without_apm', 'render_exception'
|
33
|
+
|
34
|
+
def render_exception(env, exception)
|
35
|
+
# Creates exception log report
|
36
|
+
#
|
37
|
+
begin
|
38
|
+
StackifyRubyAPM.report(exception)
|
39
|
+
rescue Exception => e
|
40
|
+
StackifyRubyAPM.agent.error '[ActionDispatchDebugExceptionsSpy] Error: repoting exception.'
|
41
|
+
StackifyRubyAPM.agent.error "[ActionDispatchDebugExceptionsSpy] #{e.inspect}"
|
42
|
+
end
|
43
|
+
render_exception_without_apm env, exception
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
29
49
|
# Registers ActionDispatch spy, go to: /stackify_apm/spies.rb
|
30
50
|
#
|
31
51
|
register(
|
@@ -33,5 +53,11 @@ module StackifyRubyAPM
|
|
33
53
|
'action_dispatch/show_exception',
|
34
54
|
ActionDispatchSpy.new
|
35
55
|
)
|
56
|
+
|
57
|
+
register(
|
58
|
+
'ActionDispatch::DebugExceptions',
|
59
|
+
'action_dispatch/debug_exceptions',
|
60
|
+
ActionDispatchDebugExceptionsSpy.new
|
61
|
+
)
|
36
62
|
end
|
37
63
|
end
|
@@ -16,9 +16,9 @@ module StackifyRubyAPM
|
|
16
16
|
singleton_class.send(:alias_method, :http_put_without_apm, :http_put)
|
17
17
|
singleton_class.send(:alias_method, :http_get_without_apm, :http_get)
|
18
18
|
singleton_class.send(:alias_method, :http_delete_without_apm, :http_delete)
|
19
|
-
def self.perform(*args)
|
19
|
+
def self.perform(*args, **kwargs)
|
20
20
|
req = nil
|
21
|
-
return perform_without_apm(*args) unless StackifyRubyAPM.current_transaction
|
21
|
+
return perform_without_apm(*args, **kwargs) unless StackifyRubyAPM.current_transaction
|
22
22
|
|
23
23
|
begin
|
24
24
|
# Data configuration
|
@@ -40,14 +40,14 @@ module StackifyRubyAPM
|
|
40
40
|
rescue Exception => e
|
41
41
|
StackifyRubyAPM.agent.error "[CurbEasySpy] Error: creating span context."
|
42
42
|
StackifyRubyAPM.agent.error "[CurbEasySpy] #{e.inspect}"
|
43
|
-
return perform_without_apm(*args)
|
43
|
+
return perform_without_apm(*args, **kwargs)
|
44
44
|
end
|
45
45
|
|
46
46
|
# Creates new span from HTTP result
|
47
47
|
StackifyRubyAPM.span name, type, context: ctx do
|
48
48
|
# Submits HTTP request
|
49
49
|
#
|
50
|
-
res = perform_without_apm(*args)
|
50
|
+
res = perform_without_apm(*args, **kwargs)
|
51
51
|
|
52
52
|
begin
|
53
53
|
status_code = res.status.sub(/^0-9/, '').to_i
|
@@ -67,9 +67,9 @@ module StackifyRubyAPM
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
-
def self.http_post(*args)
|
70
|
+
def self.http_post(*args, **kwargs)
|
71
71
|
req = nil
|
72
|
-
return http_post_without_apm(*args) unless StackifyRubyAPM.current_transaction
|
72
|
+
return http_post_without_apm(*args, **kwargs) unless StackifyRubyAPM.current_transaction
|
73
73
|
|
74
74
|
begin
|
75
75
|
# Data configuration
|
@@ -90,12 +90,12 @@ module StackifyRubyAPM
|
|
90
90
|
rescue Exception => e
|
91
91
|
StackifyRubyAPM.agent.error "[CurbEasySpy] Error: creating span context."
|
92
92
|
StackifyRubyAPM.agent.error "[CurbEasySpy] #{e.inspect}"
|
93
|
-
return http_post_without_apm(*args)
|
93
|
+
return http_post_without_apm(*args, **kwargs)
|
94
94
|
end
|
95
95
|
|
96
96
|
# Creates new span from HTTP result
|
97
97
|
StackifyRubyAPM.span name, type, context: ctx do
|
98
|
-
res = http_post_without_apm(*args)
|
98
|
+
res = http_post_without_apm(*args, **kwargs)
|
99
99
|
|
100
100
|
begin
|
101
101
|
status_code = res.status.sub(/^0-9/, '').to_i
|
@@ -178,9 +178,9 @@ module StackifyRubyAPM
|
|
178
178
|
end
|
179
179
|
end
|
180
180
|
|
181
|
-
def self.http_get(*args)
|
181
|
+
def self.http_get(*args, **kwargs)
|
182
182
|
req = nil
|
183
|
-
return http_get_without_apm(*args) unless StackifyRubyAPM.current_transaction
|
183
|
+
return http_get_without_apm(*args, **kwargs) unless StackifyRubyAPM.current_transaction
|
184
184
|
|
185
185
|
begin
|
186
186
|
# Data configuration
|
@@ -201,12 +201,12 @@ module StackifyRubyAPM
|
|
201
201
|
rescue Exception => e
|
202
202
|
StackifyRubyAPM.agent.error "[CurbEasySpy] Error: creating span context."
|
203
203
|
StackifyRubyAPM.agent.error "[CurbEasySpy] #{e.inspect}"
|
204
|
-
return http_get_without_apm(*args)
|
204
|
+
return http_get_without_apm(*args, **kwargs)
|
205
205
|
end
|
206
206
|
|
207
207
|
# Creates new span from HTTP result
|
208
208
|
StackifyRubyAPM.span name, type, context: ctx do
|
209
|
-
res = http_get_without_apm(*args)
|
209
|
+
res = http_get_without_apm(*args, **kwargs)
|
210
210
|
|
211
211
|
begin
|
212
212
|
status_code = res.status.sub(/^0-9/, '').to_i
|
@@ -227,9 +227,9 @@ module StackifyRubyAPM
|
|
227
227
|
end
|
228
228
|
end
|
229
229
|
|
230
|
-
def self.http_delete(*args)
|
230
|
+
def self.http_delete(*args, **kwargs)
|
231
231
|
req = nil
|
232
|
-
return http_delete_without_apm(*args) unless StackifyRubyAPM.current_transaction
|
232
|
+
return http_delete_without_apm(*args, **kwargs) unless StackifyRubyAPM.current_transaction
|
233
233
|
|
234
234
|
begin
|
235
235
|
# Data configuration
|
@@ -250,12 +250,12 @@ module StackifyRubyAPM
|
|
250
250
|
rescue Exception => e
|
251
251
|
StackifyRubyAPM.agent.error "[CurbEasySpy] Error: creating span context."
|
252
252
|
StackifyRubyAPM.agent.error "[CurbEasySpy] #{e.inspect}"
|
253
|
-
return http_delete_without_apm(*args)
|
253
|
+
return http_delete_without_apm(*args, **kwargs)
|
254
254
|
end
|
255
255
|
|
256
256
|
# Creates new span from HTTP result
|
257
257
|
StackifyRubyAPM.span name, type, context: ctx do
|
258
|
-
res = http_delete_without_apm(*args)
|
258
|
+
res = http_delete_without_apm(*args, **kwargs)
|
259
259
|
|
260
260
|
begin
|
261
261
|
status_code = res.status.sub(/^0-9/, '').to_i
|
@@ -12,7 +12,7 @@ module StackifyRubyAPM
|
|
12
12
|
Delayed::Backend::Base.class_eval do
|
13
13
|
alias_method 'invoke_job_without_apm', 'invoke_job'
|
14
14
|
|
15
|
-
def invoke_job(*args, &block)
|
15
|
+
def invoke_job(*args, **kwargs, &block)
|
16
16
|
ret = nil
|
17
17
|
begin
|
18
18
|
name = nil
|
@@ -29,7 +29,7 @@ module StackifyRubyAPM
|
|
29
29
|
ctx = StackifyRubyAPM::Context.new
|
30
30
|
ctx.category = 'Delayed::Job'
|
31
31
|
transaction = StackifyRubyAPM.transaction name, 'TASK', context: ctx
|
32
|
-
ret = invoke_job_without_apm(*args, &block)
|
32
|
+
ret = invoke_job_without_apm(*args, **kwargs, &block)
|
33
33
|
rescue StackifyRubyAPM::InternalError
|
34
34
|
raise # Don't report StackifyRubyAPM errors
|
35
35
|
rescue StandardError => e
|
@@ -12,9 +12,9 @@ module StackifyRubyAPM
|
|
12
12
|
HTTPClient.class_eval do
|
13
13
|
alias_method 'request_without_apm', 'request'
|
14
14
|
|
15
|
-
def request(method, uri, *args, &block)
|
15
|
+
def request(method, uri, *args, **kwargs, &block)
|
16
16
|
req = nil
|
17
|
-
return request_without_apm(method, uri, *args, &block) unless StackifyRubyAPM.current_transaction
|
17
|
+
return request_without_apm(method, uri, *args, **kwargs, &block) unless StackifyRubyAPM.current_transaction
|
18
18
|
|
19
19
|
begin
|
20
20
|
# Data configuration
|
@@ -36,7 +36,7 @@ module StackifyRubyAPM
|
|
36
36
|
rescue Exception => e
|
37
37
|
StackifyRubyAPM.agent.error "[HTTPClientSpy] Error: creating span context."
|
38
38
|
StackifyRubyAPM.agent.error "[HTTPClientSpy] #{e.inspect}"
|
39
|
-
return request_without_apm(method, uri, *args, &block)
|
39
|
+
return request_without_apm(method, uri, *args, **kwargs, &block)
|
40
40
|
end
|
41
41
|
|
42
42
|
# Creates new span from HTTP result
|
@@ -44,7 +44,7 @@ module StackifyRubyAPM
|
|
44
44
|
StackifyRubyAPM.span name, type, context: ctx do
|
45
45
|
# Submits HTTP request
|
46
46
|
#
|
47
|
-
res = request_without_apm(method, uri, *args, &block)
|
47
|
+
res = request_without_apm(method, uri, *args, **kwargs, &block)
|
48
48
|
|
49
49
|
begin
|
50
50
|
ctx.update_status(res.status_code)
|
@@ -29,8 +29,8 @@ module StackifyRubyAPM
|
|
29
29
|
::Sequel::Database.class_eval do
|
30
30
|
alias_method 'log_connection_yield_without_apm', 'log_connection_yield'
|
31
31
|
|
32
|
-
def log_connection_yield(sql, *args, &block)
|
33
|
-
return log_connection_yield_without_apm(sql, *args, &block) unless StackifyRubyAPM.current_transaction
|
32
|
+
def log_connection_yield(sql, *args, **kwargs, &block)
|
33
|
+
return log_connection_yield_without_apm(sql, *args, **kwargs, &block) unless StackifyRubyAPM.current_transaction
|
34
34
|
|
35
35
|
name = summarize sql
|
36
36
|
db_adapter = ''
|
@@ -12,7 +12,7 @@ module StackifyRubyAPM
|
|
12
12
|
Sidekiq::Processor.class_eval do
|
13
13
|
alias_method 'process_without_apm', 'process'
|
14
14
|
|
15
|
-
def process(work, *args, &block)
|
15
|
+
def process(work, *args, **kwargs, &block)
|
16
16
|
ret = nil
|
17
17
|
begin
|
18
18
|
job = nil
|
@@ -24,7 +24,7 @@ module StackifyRubyAPM
|
|
24
24
|
job_hash = JSON.parse job
|
25
25
|
name = job_hash["class"]
|
26
26
|
transaction = StackifyRubyAPM.transaction name, 'TASK'
|
27
|
-
ret = process_without_apm(work, *args, &block)
|
27
|
+
ret = process_without_apm(work, *args, **kwargs, &block)
|
28
28
|
rescue StackifyRubyAPM::InternalError
|
29
29
|
raise # Don't report StackifyRubyAPM errors
|
30
30
|
rescue StandardError => e
|
@@ -15,8 +15,8 @@ module StackifyRubyAPM
|
|
15
15
|
|
16
16
|
# Sets transaction name from Sinatra env's route name
|
17
17
|
#
|
18
|
-
def dispatch!(*args, &block)
|
19
|
-
dispatch_without_apm!(*args, &block).tap do
|
18
|
+
def dispatch!(*args, **kwargs, &block)
|
19
|
+
dispatch_without_apm!(*args, **kwargs, &block).tap do
|
20
20
|
next unless (transaction = StackifyRubyAPM.current_transaction)
|
21
21
|
next unless (route = env['sinatra.route'])
|
22
22
|
|
@@ -26,23 +26,23 @@ module StackifyRubyAPM
|
|
26
26
|
|
27
27
|
# Tilt engine template
|
28
28
|
#
|
29
|
-
def compile_template(engine, data, opts, *args, &block)
|
29
|
+
def compile_template(engine, data, opts, *args, **kwargs, &block)
|
30
30
|
opts[:__stackify_apm_template_name] =
|
31
31
|
case data
|
32
32
|
when Symbol then data.to_s
|
33
33
|
else format('Inline %s', engine)
|
34
34
|
end
|
35
35
|
|
36
|
-
compile_template_without_apm(engine, data, opts, *args, &block)
|
36
|
+
compile_template_without_apm(engine, data, opts, *args, **kwargs, &block)
|
37
37
|
end
|
38
38
|
|
39
|
-
def route_eval(*args, &block)
|
39
|
+
def route_eval(*args, **kwargs, &block)
|
40
40
|
if defined?(StackifyRubyAPM.current_transaction)
|
41
41
|
if env.key?('sinatra.route')
|
42
42
|
StackifyRubyAPM.current_transaction.name = env['sinatra.route']
|
43
43
|
end
|
44
44
|
end
|
45
|
-
route_eval_without_apm(*args, &block)
|
45
|
+
route_eval_without_apm(*args, **kwargs, &block)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
@@ -12,14 +12,14 @@ module StackifyRubyAPM
|
|
12
12
|
SuckerPunch::Job::ClassMethods.class_eval do
|
13
13
|
alias_method '__run_perform_without_elastic_apm', '__run_perform'
|
14
14
|
|
15
|
-
def __run_perform(*args)
|
15
|
+
def __run_perform(*args, **kwargs)
|
16
16
|
ret = nil
|
17
17
|
begin
|
18
18
|
name = "#{to_s}.perform"
|
19
19
|
ctx = StackifyRubyAPM::Context.new
|
20
20
|
ctx.category = 'SuckerPunch::Job'
|
21
21
|
transaction = StackifyRubyAPM.transaction name, 'TASK', context: ctx
|
22
|
-
ret = __run_perform_without_elastic_apm(*args)
|
22
|
+
ret = __run_perform_without_elastic_apm(*args, **kwargs)
|
23
23
|
rescue StackifyRubyAPM::InternalError
|
24
24
|
raise # Don't report StackifyRubyAPM errors
|
25
25
|
rescue StandardError => e
|
@@ -15,13 +15,13 @@ module StackifyRubyAPM
|
|
15
15
|
::Tilt::Template.class_eval do
|
16
16
|
alias_method 'render_without_apm', 'render'
|
17
17
|
|
18
|
-
def render(*args, &block)
|
18
|
+
def render(*args, **kwargs, &block)
|
19
19
|
name = options[:__stackify_apm_template_name] || 'Unknown template'
|
20
20
|
|
21
21
|
# Creates new span for Tilt templating
|
22
22
|
#
|
23
23
|
StackifyRubyAPM.span name, TYPE do
|
24
|
-
render_without_apm(*args, &block)
|
24
|
+
render_without_apm(*args, **kwargs, &block)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
data/lib/stackify_apm/util.rb
CHANGED
@@ -87,6 +87,40 @@ module StackifyRubyAPM
|
|
87
87
|
string
|
88
88
|
end
|
89
89
|
|
90
|
+
def self.fileExists?(dir_name)
|
91
|
+
# Ruby 3.2 changed File.exists to File.exist.
|
92
|
+
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3.2")
|
93
|
+
return File.exists?(dir_name)
|
94
|
+
else
|
95
|
+
return File.exist?(dir_name)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.checkOrCreateFolder(dir_name)
|
100
|
+
if (dir_name.to_s.empty?)
|
101
|
+
return false
|
102
|
+
end
|
103
|
+
|
104
|
+
if (!fileExists?(dir_name))
|
105
|
+
umask = File.umask
|
106
|
+
File.umask(0)
|
107
|
+
FileUtils.mkdir_p(dir_name)
|
108
|
+
File.chmod(0777, dir_name)
|
109
|
+
File.umask(umask)
|
110
|
+
end
|
111
|
+
|
112
|
+
if (!fileExists?(dir_name))
|
113
|
+
puts "Util::Stackify Profiler unable to find [" + dir_name + "]"
|
114
|
+
return false
|
115
|
+
end
|
116
|
+
|
117
|
+
if (!File.writable?(dir_name))
|
118
|
+
puts "Util::Stackify Profiler unable to access/write [" + dir_name + "]"
|
119
|
+
return false
|
120
|
+
end
|
121
|
+
|
122
|
+
return true
|
123
|
+
end
|
90
124
|
end
|
91
125
|
end
|
92
126
|
require 'stackify_apm/util/inspector'
|
data/lib/stackify_apm/version.rb
CHANGED
data/stackify-ruby-apm.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
lib = File.expand_path('lib',
|
3
|
+
lib = File.expand_path('lib', File.dirname(__FILE__))
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
require 'stackify_apm/version'
|
6
6
|
|
@@ -13,6 +13,9 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = 'http://www.stackify.com'
|
14
14
|
spec.license = 'Stackify'
|
15
15
|
|
16
|
+
# Set the minimum Ruby version required
|
17
|
+
spec.required_ruby_version = '>= 3.0.0'
|
18
|
+
|
16
19
|
git_tracked_files = `git ls-files -z`.split("\x0")
|
17
20
|
gem_ignored_files = `git ls-files -i -X .gemignore -z`.split("\x0")
|
18
21
|
spec.files = git_tracked_files - gem_ignored_files
|
@@ -22,49 +25,77 @@ Gem::Specification.new do |spec|
|
|
22
25
|
spec.require_paths = ['lib']
|
23
26
|
|
24
27
|
# rails
|
25
|
-
if RUBY_VERSION > '2.
|
28
|
+
if RUBY_VERSION > '2.9'
|
29
|
+
spec.add_development_dependency 'rails', '~> 6.1'
|
30
|
+
elsif RUBY_VERSION > '2.5'
|
26
31
|
spec.add_development_dependency 'rails', '~> 5.0'
|
27
32
|
else
|
28
33
|
spec.add_development_dependency 'rails', '~> 4.0'
|
34
|
+
spec.add_development_dependency 'sprockets', '~> 3.0'
|
29
35
|
end
|
30
36
|
|
31
37
|
# bigdecimal
|
32
38
|
if RUBY_VERSION > '2.5'
|
33
39
|
spec.add_development_dependency 'bigdecimal'
|
34
40
|
end
|
35
|
-
|
41
|
+
|
36
42
|
if RUBY_PLATFORM == 'i386-mingw32'
|
37
43
|
spec.add_development_dependency 'tzinfo-data'
|
44
|
+
end
|
45
|
+
|
46
|
+
if RUBY_VERSION > '2.9'
|
47
|
+
spec.add_development_dependency 'bundler', '~> 2.4.12'
|
48
|
+
else
|
49
|
+
spec.add_development_dependency 'bundler', '~> 1.16'
|
50
|
+
end
|
51
|
+
|
52
|
+
if RUBY_VERSION > '2.9'
|
53
|
+
spec.add_development_dependency 'rake'
|
54
|
+
spec.add_development_dependency 'rspec', '3.9.0'
|
55
|
+
spec.add_development_dependency 'curb', '1.0.3'
|
56
|
+
spec.add_development_dependency 'pg'
|
57
|
+
spec.add_development_dependency 'sqlite3'
|
38
58
|
else
|
39
|
-
spec.add_development_dependency '
|
59
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
60
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
40
61
|
spec.add_development_dependency 'curb', '0.9.8'
|
62
|
+
spec.add_development_dependency 'pg', '~> 0.20'
|
63
|
+
spec.add_development_dependency 'sqlite3', '1.3.13'
|
64
|
+
spec.add_development_dependency('delegate_matcher', '~> 0.4') # for testing
|
41
65
|
end
|
42
66
|
|
43
|
-
|
44
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
45
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
67
|
+
|
46
68
|
spec.add_development_dependency 'activerecord'
|
47
|
-
|
48
69
|
spec.add_development_dependency 'fakeredis'
|
49
70
|
spec.add_development_dependency 'http'
|
50
71
|
spec.add_development_dependency 'httpclient'
|
72
|
+
spec.add_development_dependency 'mongo'
|
51
73
|
spec.add_development_dependency 'mysql2'
|
52
|
-
|
74
|
+
|
53
75
|
spec.add_development_dependency 'rack-test'
|
54
76
|
spec.add_development_dependency 'rubocop'
|
55
77
|
spec.add_development_dependency 'sequel'
|
56
78
|
spec.add_development_dependency 'sinatra'
|
57
79
|
spec.add_development_dependency 'sinatra-activerecord'
|
58
|
-
|
80
|
+
|
59
81
|
spec.add_development_dependency 'stackify-api-ruby'
|
60
82
|
spec.add_development_dependency 'timecop'
|
61
83
|
spec.add_development_dependency 'to_bool'
|
62
84
|
spec.add_development_dependency 'webmock'
|
63
85
|
spec.add_development_dependency 'delayed_job'
|
64
|
-
spec.add_development_dependency('delegate_matcher', '~> 0.4') # for testing
|
65
86
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
87
|
+
if RUBY_VERSION > '2.9'
|
88
|
+
spec.add_dependency('concurrent-ruby')
|
89
|
+
spec.add_dependency('delegate_matcher')
|
90
|
+
spec.add_dependency('faraday')
|
91
|
+
spec.add_dependency('net_http_unix')
|
92
|
+
spec.add_dependency('rufus-scheduler')
|
93
|
+
else
|
94
|
+
spec.add_dependency('concurrent-ruby', '~> 1.0')
|
95
|
+
spec.add_dependency('delegate_matcher', '~> 0.4')
|
96
|
+
spec.add_dependency('faraday', '~> 0.8')
|
97
|
+
spec.add_dependency('net_http_unix', '~> 0.2')
|
98
|
+
spec.add_dependency('rufus-scheduler', '~> 3.0')
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stackify-ruby-apm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.16.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stackify
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '6.1'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '6.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bigdecimal
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +39,21 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.4.12
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.4.12
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - ">="
|
@@ -53,61 +67,61 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: rspec
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - '='
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
75
|
+
version: 3.9.0
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - '='
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
82
|
+
version: 3.9.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: curb
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - '='
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
89
|
+
version: 1.0.3
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - '='
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
96
|
+
version: 1.0.3
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: pg
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
103
|
+
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - "
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: sqlite3
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- - "
|
115
|
+
- - ">="
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
117
|
+
version: '0'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- - "
|
122
|
+
- - ">="
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: activerecord
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -165,7 +179,7 @@ dependencies:
|
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: '0'
|
167
181
|
- !ruby/object:Gem::Dependency
|
168
|
-
name:
|
182
|
+
name: mongo
|
169
183
|
requirement: !ruby/object:Gem::Requirement
|
170
184
|
requirements:
|
171
185
|
- - ">="
|
@@ -179,19 +193,19 @@ dependencies:
|
|
179
193
|
- !ruby/object:Gem::Version
|
180
194
|
version: '0'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
196
|
+
name: mysql2
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
184
198
|
requirements:
|
185
|
-
- - "
|
199
|
+
- - ">="
|
186
200
|
- !ruby/object:Gem::Version
|
187
|
-
version: '0
|
201
|
+
version: '0'
|
188
202
|
type: :development
|
189
203
|
prerelease: false
|
190
204
|
version_requirements: !ruby/object:Gem::Requirement
|
191
205
|
requirements:
|
192
|
-
- - "
|
206
|
+
- - ">="
|
193
207
|
- !ruby/object:Gem::Version
|
194
|
-
version: '0
|
208
|
+
version: '0'
|
195
209
|
- !ruby/object:Gem::Dependency
|
196
210
|
name: rack-test
|
197
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -262,20 +276,6 @@ dependencies:
|
|
262
276
|
- - ">="
|
263
277
|
- !ruby/object:Gem::Version
|
264
278
|
version: '0'
|
265
|
-
- !ruby/object:Gem::Dependency
|
266
|
-
name: sqlite3
|
267
|
-
requirement: !ruby/object:Gem::Requirement
|
268
|
-
requirements:
|
269
|
-
- - '='
|
270
|
-
- !ruby/object:Gem::Version
|
271
|
-
version: 1.3.13
|
272
|
-
type: :development
|
273
|
-
prerelease: false
|
274
|
-
version_requirements: !ruby/object:Gem::Requirement
|
275
|
-
requirements:
|
276
|
-
- - '='
|
277
|
-
- !ruby/object:Gem::Version
|
278
|
-
version: 1.3.13
|
279
279
|
- !ruby/object:Gem::Dependency
|
280
280
|
name: stackify-api-ruby
|
281
281
|
requirement: !ruby/object:Gem::Requirement
|
@@ -347,75 +347,75 @@ dependencies:
|
|
347
347
|
- !ruby/object:Gem::Version
|
348
348
|
version: '0'
|
349
349
|
- !ruby/object:Gem::Dependency
|
350
|
-
name:
|
350
|
+
name: concurrent-ruby
|
351
351
|
requirement: !ruby/object:Gem::Requirement
|
352
352
|
requirements:
|
353
|
-
- - "
|
353
|
+
- - ">="
|
354
354
|
- !ruby/object:Gem::Version
|
355
|
-
version: '0
|
356
|
-
type: :
|
355
|
+
version: '0'
|
356
|
+
type: :runtime
|
357
357
|
prerelease: false
|
358
358
|
version_requirements: !ruby/object:Gem::Requirement
|
359
359
|
requirements:
|
360
|
-
- - "
|
360
|
+
- - ">="
|
361
361
|
- !ruby/object:Gem::Version
|
362
|
-
version: '0
|
362
|
+
version: '0'
|
363
363
|
- !ruby/object:Gem::Dependency
|
364
|
-
name:
|
364
|
+
name: delegate_matcher
|
365
365
|
requirement: !ruby/object:Gem::Requirement
|
366
366
|
requirements:
|
367
|
-
- - "
|
367
|
+
- - ">="
|
368
368
|
- !ruby/object:Gem::Version
|
369
|
-
version: '
|
369
|
+
version: '0'
|
370
370
|
type: :runtime
|
371
371
|
prerelease: false
|
372
372
|
version_requirements: !ruby/object:Gem::Requirement
|
373
373
|
requirements:
|
374
|
-
- - "
|
374
|
+
- - ">="
|
375
375
|
- !ruby/object:Gem::Version
|
376
|
-
version: '
|
376
|
+
version: '0'
|
377
377
|
- !ruby/object:Gem::Dependency
|
378
378
|
name: faraday
|
379
379
|
requirement: !ruby/object:Gem::Requirement
|
380
380
|
requirements:
|
381
|
-
- - "
|
381
|
+
- - ">="
|
382
382
|
- !ruby/object:Gem::Version
|
383
|
-
version: '0
|
383
|
+
version: '0'
|
384
384
|
type: :runtime
|
385
385
|
prerelease: false
|
386
386
|
version_requirements: !ruby/object:Gem::Requirement
|
387
387
|
requirements:
|
388
|
-
- - "
|
388
|
+
- - ">="
|
389
389
|
- !ruby/object:Gem::Version
|
390
|
-
version: '0
|
390
|
+
version: '0'
|
391
391
|
- !ruby/object:Gem::Dependency
|
392
392
|
name: net_http_unix
|
393
393
|
requirement: !ruby/object:Gem::Requirement
|
394
394
|
requirements:
|
395
|
-
- - "
|
395
|
+
- - ">="
|
396
396
|
- !ruby/object:Gem::Version
|
397
|
-
version: '0
|
397
|
+
version: '0'
|
398
398
|
type: :runtime
|
399
399
|
prerelease: false
|
400
400
|
version_requirements: !ruby/object:Gem::Requirement
|
401
401
|
requirements:
|
402
|
-
- - "
|
402
|
+
- - ">="
|
403
403
|
- !ruby/object:Gem::Version
|
404
|
-
version: '0
|
404
|
+
version: '0'
|
405
405
|
- !ruby/object:Gem::Dependency
|
406
406
|
name: rufus-scheduler
|
407
407
|
requirement: !ruby/object:Gem::Requirement
|
408
408
|
requirements:
|
409
|
-
- - "
|
409
|
+
- - ">="
|
410
410
|
- !ruby/object:Gem::Version
|
411
|
-
version: '
|
411
|
+
version: '0'
|
412
412
|
type: :runtime
|
413
413
|
prerelease: false
|
414
414
|
version_requirements: !ruby/object:Gem::Requirement
|
415
415
|
requirements:
|
416
|
-
- - "
|
416
|
+
- - ">="
|
417
417
|
- !ruby/object:Gem::Version
|
418
|
-
version: '
|
418
|
+
version: '0'
|
419
419
|
description:
|
420
420
|
email:
|
421
421
|
- support@stackify.com
|
@@ -530,14 +530,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
530
530
|
requirements:
|
531
531
|
- - ">="
|
532
532
|
- !ruby/object:Gem::Version
|
533
|
-
version:
|
533
|
+
version: 3.0.0
|
534
534
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
535
535
|
requirements:
|
536
536
|
- - ">"
|
537
537
|
- !ruby/object:Gem::Version
|
538
538
|
version: 1.3.1
|
539
539
|
requirements: []
|
540
|
-
rubygems_version: 3.
|
540
|
+
rubygems_version: 3.4.10
|
541
541
|
signing_key:
|
542
542
|
specification_version: 4
|
543
543
|
summary: Stackify APM for Ruby
|