scout_apm 2.5.2 → 2.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -0
- data/CHANGELOG.markdown +4 -0
- data/lib/scout_apm.rb +2 -0
- data/lib/scout_apm/background_job_integrations/que.rb +134 -0
- data/lib/scout_apm/environment.rb +1 -0
- data/lib/scout_apm/instrument_manager.rb +1 -0
- data/lib/scout_apm/instruments/memcached.rb +43 -0
- data/lib/scout_apm/version.rb +1 -1
- metadata +50 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ef6a530f826be85aee200f178152090c96dc8f2bab731c0f5220fa95a4662f56
|
4
|
+
data.tar.gz: e8ab6688fec666ff02c76a996dff3daf84fa1ca84be19b2666ba13b256f9fa92
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b8d53395a108407d445d1c386c1234ddbfa90e7105249ce357d288b92c5c9727a9c110a6e3510a111b6a4a9788f5e5f3a3eaedc532683cecbc09a8261c2f572
|
7
|
+
data.tar.gz: 3a35a76ed54a96df86948ad486d5a86a9dffed67271c5efae229b80a8106c00eb3830be469875cd301f7a262fba34672a8db52a25d4e82cba5105ce80af26dde
|
data/.travis.yml
CHANGED
data/CHANGELOG.markdown
CHANGED
data/lib/scout_apm.rb
CHANGED
@@ -62,6 +62,7 @@ require 'scout_apm/background_job_integrations/delayed_job'
|
|
62
62
|
require 'scout_apm/background_job_integrations/resque'
|
63
63
|
require 'scout_apm/background_job_integrations/shoryuken'
|
64
64
|
require 'scout_apm/background_job_integrations/sneakers'
|
65
|
+
require 'scout_apm/background_job_integrations/que'
|
65
66
|
|
66
67
|
require 'scout_apm/framework_integrations/rails_2'
|
67
68
|
require 'scout_apm/framework_integrations/rails_3_or_4'
|
@@ -78,6 +79,7 @@ require 'scout_apm/instruments/net_http'
|
|
78
79
|
require 'scout_apm/instruments/http_client'
|
79
80
|
require 'scout_apm/instruments/moped'
|
80
81
|
require 'scout_apm/instruments/mongoid'
|
82
|
+
require 'scout_apm/instruments/memcached'
|
81
83
|
require 'scout_apm/instruments/redis'
|
82
84
|
require 'scout_apm/instruments/influxdb'
|
83
85
|
require 'scout_apm/instruments/elasticsearch'
|
@@ -0,0 +1,134 @@
|
|
1
|
+
module ScoutApm
|
2
|
+
module BackgroundJobIntegrations
|
3
|
+
class Que
|
4
|
+
|
5
|
+
UNKNOWN_CLASS_PLACEHOLDER = 'UnknownJob'.freeze
|
6
|
+
ACTIVE_JOB_KLASS = 'ActiveJob::QueueAdapters::QueAdapter::JobWrapper'.freeze
|
7
|
+
UNKNOWN_QUEUE_PLACEHOLDER = 'UnknownQueue'.freeze
|
8
|
+
|
9
|
+
attr_reader :logger
|
10
|
+
|
11
|
+
def name
|
12
|
+
:que
|
13
|
+
end
|
14
|
+
|
15
|
+
def present?
|
16
|
+
if defined?(::Que) && File.basename($PROGRAM_NAME).start_with?('que')
|
17
|
+
# 0.x releases used "Version" constant.
|
18
|
+
# 1.x releases used "VERSION" constant.
|
19
|
+
return defined?(::Que::Version)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def forking?
|
24
|
+
false
|
25
|
+
end
|
26
|
+
|
27
|
+
def install
|
28
|
+
install_tracer
|
29
|
+
install_worker
|
30
|
+
install_job
|
31
|
+
end
|
32
|
+
|
33
|
+
def install_tracer
|
34
|
+
::Que::Job.class_eval do
|
35
|
+
include ScoutApm::Tracer
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def install_worker
|
40
|
+
::Que::Worker.class_eval do
|
41
|
+
def initialize_with_scout(*args)
|
42
|
+
agent = ::ScoutApm::Agent.instance
|
43
|
+
agent.start
|
44
|
+
initialize_without_scout(*args)
|
45
|
+
end
|
46
|
+
|
47
|
+
alias_method :initialize_without_scout, :initialize
|
48
|
+
alias_method :initialize, :initialize_with_scout
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def install_job
|
53
|
+
::Que::Job.class_eval do
|
54
|
+
# attrs = {
|
55
|
+
# "queue"=>"",
|
56
|
+
# "priority"=>100,
|
57
|
+
# "run_at"=>2018-12-19 15:12:32 -0700,
|
58
|
+
# "job_id"=>4,
|
59
|
+
# "job_class"=>"ExampleJob",
|
60
|
+
# "args"=>[{"key"=>"value"}],
|
61
|
+
# "error_count"=>0
|
62
|
+
# }
|
63
|
+
#
|
64
|
+
# With ActiveJob, v0.14.3:
|
65
|
+
# attrs = {
|
66
|
+
# "queue"=>"",
|
67
|
+
# "priority"=>100,
|
68
|
+
# "run_at"=>2018-12-19 15:29:18 -0700,
|
69
|
+
# "job_id"=>6,
|
70
|
+
# "job_class"=>"ActiveJob::QueueAdapters::QueAdapter::JobWrapper",
|
71
|
+
# "args"=> [{
|
72
|
+
# "job_class"=>"ExampleJob",
|
73
|
+
# "job_id"=>"60798b45-4b55-436e-806d-693939266c97",
|
74
|
+
# "provider_job_id"=>nil,
|
75
|
+
# "queue_name"=>"default",
|
76
|
+
# "priority"=>nil,
|
77
|
+
# "arguments"=>[],
|
78
|
+
# "executions"=>0,
|
79
|
+
# "locale"=>"en"
|
80
|
+
# }],
|
81
|
+
# "error_count"=>0
|
82
|
+
# }
|
83
|
+
#
|
84
|
+
# With ActiveJob, v1.0:
|
85
|
+
# There are changes here to make Que more compatible with ActiveJob
|
86
|
+
# and this probably needs to be revisited.
|
87
|
+
|
88
|
+
def _run_with_scout(*args)
|
89
|
+
# default queue unless specifed is a blank string
|
90
|
+
queue = attrs['queue'] || UNKNOWN_QUEUE_PLACEHOLDER
|
91
|
+
|
92
|
+
job_class = begin
|
93
|
+
if self.class == ActiveJob::QueueAdapters::QueAdapter::JobWrapper
|
94
|
+
Array(attrs['args']).first['job_class'] || UNKNOWN_CLASS_PLACEHOLDER
|
95
|
+
else
|
96
|
+
self.class.name
|
97
|
+
end
|
98
|
+
rescue => e
|
99
|
+
UNKNOWN_CLASS_PLACEHOLDER
|
100
|
+
end
|
101
|
+
|
102
|
+
latency = begin
|
103
|
+
Time.now - attrs['run_at']
|
104
|
+
rescue
|
105
|
+
0
|
106
|
+
end
|
107
|
+
|
108
|
+
req = ScoutApm::RequestManager.lookup
|
109
|
+
req.annotate_request(:queue_latency => latency)
|
110
|
+
|
111
|
+
begin
|
112
|
+
req.start_layer(ScoutApm::Layer.new('Queue', queue))
|
113
|
+
started_queue = true
|
114
|
+
req.start_layer(ScoutApm::Layer.new('Job', job_class))
|
115
|
+
started_job = true
|
116
|
+
|
117
|
+
_run_without_scout(*args)
|
118
|
+
rescue Exception => e
|
119
|
+
req.error!
|
120
|
+
raise
|
121
|
+
ensure
|
122
|
+
req.stop_layer if started_job
|
123
|
+
req.stop_layer if started_queue
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
alias_method :_run_without_scout, :_run
|
128
|
+
alias_method :_run, :_run_with_scout
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
end
|
@@ -29,6 +29,7 @@ module ScoutApm
|
|
29
29
|
ScoutApm::BackgroundJobIntegrations::Shoryuken.new,
|
30
30
|
ScoutApm::BackgroundJobIntegrations::Sneakers.new,
|
31
31
|
ScoutApm::BackgroundJobIntegrations::DelayedJob.new,
|
32
|
+
ScoutApm::BackgroundJobIntegrations::Que.new,
|
32
33
|
]
|
33
34
|
|
34
35
|
FRAMEWORK_INTEGRATIONS = [
|
@@ -31,6 +31,7 @@ module ScoutApm
|
|
31
31
|
install_instrument(ScoutApm::Instruments::Mongoid)
|
32
32
|
install_instrument(ScoutApm::Instruments::NetHttp)
|
33
33
|
install_instrument(ScoutApm::Instruments::HttpClient)
|
34
|
+
install_instrument(ScoutApm::Instruments::Memcached)
|
34
35
|
install_instrument(ScoutApm::Instruments::Redis)
|
35
36
|
install_instrument(ScoutApm::Instruments::InfluxDB)
|
36
37
|
install_instrument(ScoutApm::Instruments::Elasticsearch)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module ScoutApm
|
2
|
+
module Instruments
|
3
|
+
class Memcached
|
4
|
+
attr_reader :context
|
5
|
+
|
6
|
+
def initialize(context)
|
7
|
+
@context = context
|
8
|
+
@installed = false
|
9
|
+
end
|
10
|
+
|
11
|
+
def logger
|
12
|
+
context.logger
|
13
|
+
end
|
14
|
+
|
15
|
+
def installed?
|
16
|
+
@installed
|
17
|
+
end
|
18
|
+
|
19
|
+
def install
|
20
|
+
if defined?(::Dalli) && defined?(::Dalli::Client)
|
21
|
+
@installed = true
|
22
|
+
|
23
|
+
logger.info "Instrumenting Memcached"
|
24
|
+
|
25
|
+
::Dalli::Client.class_eval do
|
26
|
+
include ScoutApm::Tracer
|
27
|
+
|
28
|
+
def perform_with_scout_instruments(*args, &block)
|
29
|
+
command = args.first rescue "Unknown"
|
30
|
+
|
31
|
+
self.class.instrument("Memcached", command) do
|
32
|
+
perform_without_scout_instruments(*args, &block)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
alias_method :perform_without_scout_instruments, :perform
|
37
|
+
alias_method :perform, :perform_with_scout_instruments
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/scout_apm/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout_apm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.5.
|
4
|
+
version: 2.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derek Haynes
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-09-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -231,6 +231,7 @@ files:
|
|
231
231
|
- lib/scout_apm/app_server_load.rb
|
232
232
|
- lib/scout_apm/attribute_arranger.rb
|
233
233
|
- lib/scout_apm/background_job_integrations/delayed_job.rb
|
234
|
+
- lib/scout_apm/background_job_integrations/que.rb
|
234
235
|
- lib/scout_apm/background_job_integrations/resque.rb
|
235
236
|
- lib/scout_apm/background_job_integrations/shoryuken.rb
|
236
237
|
- lib/scout_apm/background_job_integrations/sidekiq.rb
|
@@ -269,6 +270,7 @@ files:
|
|
269
270
|
- lib/scout_apm/instruments/grape.rb
|
270
271
|
- lib/scout_apm/instruments/http_client.rb
|
271
272
|
- lib/scout_apm/instruments/influxdb.rb
|
273
|
+
- lib/scout_apm/instruments/memcached.rb
|
272
274
|
- lib/scout_apm/instruments/middleware_detailed.rb
|
273
275
|
- lib/scout_apm/instruments/middleware_summary.rb
|
274
276
|
- lib/scout_apm/instruments/mongoid.rb
|
@@ -428,9 +430,52 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
428
430
|
- !ruby/object:Gem::Version
|
429
431
|
version: '0'
|
430
432
|
requirements: []
|
431
|
-
|
432
|
-
rubygems_version: 2.7.6
|
433
|
+
rubygems_version: 3.0.4
|
433
434
|
signing_key:
|
434
435
|
specification_version: 4
|
435
436
|
summary: Ruby application performance monitoring
|
436
|
-
test_files:
|
437
|
+
test_files:
|
438
|
+
- test/data/config_test_1.yml
|
439
|
+
- test/test_helper.rb
|
440
|
+
- test/tmp/README.md
|
441
|
+
- test/unit/agent_test.rb
|
442
|
+
- test/unit/background_job_integrations/sidekiq_test.rb
|
443
|
+
- test/unit/config_test.rb
|
444
|
+
- test/unit/context_test.rb
|
445
|
+
- test/unit/db_query_metric_set_test.rb
|
446
|
+
- test/unit/db_query_metric_stats_test.rb
|
447
|
+
- test/unit/environment_test.rb
|
448
|
+
- test/unit/extensions/periodic_callbacks_test.rb
|
449
|
+
- test/unit/extensions/transaction_callbacks_test.rb
|
450
|
+
- test/unit/fake_store_test.rb
|
451
|
+
- test/unit/git_revision_test.rb
|
452
|
+
- test/unit/histogram_test.rb
|
453
|
+
- test/unit/ignored_uris_test.rb
|
454
|
+
- test/unit/instruments/active_record_test.rb
|
455
|
+
- test/unit/instruments/net_http_test.rb
|
456
|
+
- test/unit/instruments/percentile_sampler_test.rb
|
457
|
+
- test/unit/layaway_test.rb
|
458
|
+
- test/unit/layer_children_set_test.rb
|
459
|
+
- test/unit/layer_converters/depth_first_walker_test.rb
|
460
|
+
- test/unit/layer_converters/metric_converter_test.rb
|
461
|
+
- test/unit/layer_converters/stubs.rb
|
462
|
+
- test/unit/limited_layer_test.rb
|
463
|
+
- test/unit/logger_test.rb
|
464
|
+
- test/unit/metric_set_test.rb
|
465
|
+
- test/unit/remote/test_message.rb
|
466
|
+
- test/unit/remote/test_router.rb
|
467
|
+
- test/unit/remote/test_server.rb
|
468
|
+
- test/unit/scored_item_set_test.rb
|
469
|
+
- test/unit/serializers/payload_serializer_test.rb
|
470
|
+
- test/unit/slow_job_policy_test.rb
|
471
|
+
- test/unit/slow_request_policy_test.rb
|
472
|
+
- test/unit/sql_sanitizer_test.rb
|
473
|
+
- test/unit/store_test.rb
|
474
|
+
- test/unit/tracer_test.rb
|
475
|
+
- test/unit/tracked_request_test.rb
|
476
|
+
- test/unit/transaction_test.rb
|
477
|
+
- test/unit/transaction_time_consumed_test.rb
|
478
|
+
- test/unit/utils/active_record_metric_name_test.rb
|
479
|
+
- test/unit/utils/backtrace_parser_test.rb
|
480
|
+
- test/unit/utils/numbers_test.rb
|
481
|
+
- test/unit/utils/scm.rb
|