elastic-apm 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of elastic-apm might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c00a8dd4ed640c7c98fa3b32f0a252920237e549a10d6592de58d6d4b281ab48
4
- data.tar.gz: 3fc4f34aab25ace89c0b689747316245b667bc77b348c4d9d2b08605681179ff
3
+ metadata.gz: 61f733d62bd857f1f2b7e505d7bc2007422b8bd35219eff02c9c3b8c27c5264c
4
+ data.tar.gz: e5626d4e88f9aef2ca50a285530872f7a1cd6f2935135a196de51a90dd6b7aa8
5
5
  SHA512:
6
- metadata.gz: 6062baf5ed08855d53781d589ff7266b784af1b231511327b527619229743d570868e319be7cb060770bd436a92df24955807e6c8cfcbdb80151d29ac7e7b9fb
7
- data.tar.gz: 9516bd876fbfd8c6061b189b603923bb37f740492904d40c10180603f09b0d86a0f97e198962a66570b59851c1fa8e666066f3e4cf51a469ccaa04dfbf5e6955
6
+ metadata.gz: cc95fa28fe7acb5d81f3bc41c4b424b0732fcb9e8c79bf1b9687ba8a4ea153fdf9eef346f058ed6fa0e40de845a107fb7004c4abbfebaf34ea9f0d182bda4246
7
+ data.tar.gz: 91f2bc3ab67a4ccbd66c8423c2c65f88701ba99e0048479263555aa63188c2c009744c1393fd54d6230df6e20ecfa8dd7f26e24da2fdbc4bae6fea6b065048c1
data/lib/elastic_apm.rb CHANGED
@@ -62,9 +62,7 @@ module ElasticAPM
62
62
  # @yield [Transaction] Optional block encapsulating transaction
63
63
  # @return [Transaction] Unless block given
64
64
  def self.transaction(name, type = nil, context: nil, &block)
65
- unless agent
66
- return block_given? ? yield : nil
67
- end
65
+ return (block_given? ? yield : nil) unless agent
68
66
 
69
67
  agent.transaction(name, type, context: context, &block)
70
68
  end
@@ -78,9 +76,7 @@ module ElasticAPM
78
76
  # @return [Span] Unless block given
79
77
  def self.span(name, type = nil, context: nil, include_stacktrace: true,
80
78
  &block)
81
- unless agent
82
- return block_given? ? yield : nil
83
- end
79
+ return (block_given? ? yield : nil) unless agent
84
80
 
85
81
  agent.span(
86
82
  name,
@@ -23,15 +23,26 @@ module ElasticAPM
23
23
  @instance
24
24
  end
25
25
 
26
+ # rubocop:disable Metrics/MethodLength
26
27
  def self.start(config)
27
28
  return @instance if @instance
28
29
 
30
+ config = Config.new(config) if config.is_a?(Hash)
31
+
32
+ unless config.enabled_environments.include?(config.environment)
33
+ config.logger && config.logger.info(
34
+ format('Not tracking anything in "%s" env', config.environment)
35
+ )
36
+ return
37
+ end
38
+
29
39
  LOCK.synchronize do
30
40
  return @instance if @instance
31
41
 
32
42
  @instance = new(config.freeze).start
33
43
  end
34
44
  end
45
+ # rubocop:enable Metrics/MethodLength
35
46
 
36
47
  def self.stop
37
48
  LOCK.synchronize do
@@ -46,10 +57,7 @@ module ElasticAPM
46
57
  !!@instance
47
58
  end
48
59
 
49
- # rubocop:disable Metrics/MethodLength
50
60
  def initialize(config)
51
- config = Config.new(config) if config.is_a?(Hash)
52
-
53
61
  @config = config
54
62
 
55
63
  @http = Http.new(config)
@@ -64,17 +72,14 @@ module ElasticAPM
64
72
  Serializers::Errors.new(config)
65
73
  )
66
74
  end
67
- # rubocop:enable Metrics/MethodLength
68
75
 
69
76
  attr_reader :config, :queue, :instrumenter, :context_builder, :http
70
77
 
71
78
  def start
72
- debug 'Starting agent reporting to %s', config.server_url
79
+ debug '[%s] Starting agent, reporting to %s', VERSION, config.server_url
73
80
 
74
81
  @instrumenter.start
75
82
 
76
- boot_worker
77
-
78
83
  config.enabled_injectors.each do |lib|
79
84
  require "elastic_apm/injectors/#{lib}"
80
85
  end
@@ -83,8 +88,6 @@ module ElasticAPM
83
88
  end
84
89
 
85
90
  def stop
86
- debug 'Stopping agent'
87
-
88
91
  @instrumenter.stop
89
92
 
90
93
  kill_worker
@@ -97,12 +100,16 @@ module ElasticAPM
97
100
  end
98
101
 
99
102
  def enqueue_transactions(transactions)
103
+ boot_worker unless worker_running?
104
+
100
105
  data = @serializers.transactions.build_all(transactions)
101
106
  @queue << Worker::Request.new('/v1/transactions', data)
102
107
  transactions
103
108
  end
104
109
 
105
110
  def enqueue_errors(errors)
111
+ boot_worker unless worker_running?
112
+
106
113
  data = @serializers.errors.build_all(errors)
107
114
  @queue << Worker::Request.new('/v1/errors', data)
108
115
  errors
@@ -129,6 +136,8 @@ module ElasticAPM
129
136
  # errors
130
137
 
131
138
  def report(exception, handled: true)
139
+ return if config.filter_exception_types.include?(exception.class.to_s)
140
+
132
141
  error = @error_builder.build_exception(
133
142
  exception,
134
143
  handled: handled
@@ -170,7 +179,7 @@ module ElasticAPM
170
179
  private
171
180
 
172
181
  def boot_worker
173
- debug 'Booting worker in thread'
182
+ debug 'Booting worker'
174
183
 
175
184
  @worker_thread = Thread.new do
176
185
  Worker.new(@config, @queue, @http).run_forever
@@ -180,13 +189,15 @@ module ElasticAPM
180
189
  def kill_worker
181
190
  @queue << Worker::StopMessage.new
182
191
 
183
- unless @worker_thread.join(5) # 5 secs
192
+ if @worker_thread && !@worker_thread.join(5) # 5 secs
184
193
  raise 'Failed to wait for worker, not all messages sent'
185
194
  end
186
195
 
187
196
  @worker_thread = nil
197
+ end
188
198
 
189
- debug 'Killed worker'
199
+ def worker_running?
200
+ @worker_thread && @worker_thread.alive?
190
201
  end
191
202
  end
192
203
  # rubocop:enable Metrics/ClassLength
@@ -13,6 +13,7 @@ module ElasticAPM
13
13
  service_name: nil,
14
14
  service_version: nil,
15
15
  environment: ENV['RAILS_ENV'] || ENV['RACK_ENV'],
16
+ enabled_environments: %w[production],
16
17
  framework_name: nil,
17
18
  framework_version: nil,
18
19
  hostname: nil,
@@ -25,6 +26,7 @@ module ElasticAPM
25
26
  flush_interval: 10,
26
27
  transaction_sample_rate: 1.0,
27
28
  transaction_max_spans: 500,
29
+ filter_exception_types: [],
28
30
 
29
31
  http_timeout: 10,
30
32
  http_open_timeout: 10,
@@ -54,6 +56,7 @@ module ElasticAPM
54
56
  'ELASTIC_APM_SERVICE_NAME' => 'service_name',
55
57
  'ELASTIC_APM_SERVICE_VERSION' => 'service_version',
56
58
  'ELASTIC_APM_ENVIRONMENT' => 'environment',
59
+ 'ELASTIC_APM_ENABLED_ENVIRONMENTS' => [:list, 'enabled_environments'],
57
60
  'ELASTIC_APM_FRAMEWORK_NAME' => 'framework_name',
58
61
  'ELASTIC_APM_FRAMEWORK_VERSION' => 'framework_version',
59
62
  'ELASTIC_APM_HOSTNAME' => 'hostname',
@@ -94,6 +97,7 @@ module ElasticAPM
94
97
  attr_accessor :framework_name
95
98
  attr_accessor :framework_version
96
99
  attr_accessor :hostname
100
+ attr_accessor :enabled_environments
97
101
 
98
102
  attr_accessor :log_path
99
103
  attr_accessor :log_level
@@ -103,6 +107,7 @@ module ElasticAPM
103
107
  attr_accessor :transaction_sample_rate
104
108
  attr_accessor :transaction_max_spans
105
109
  attr_accessor :verify_server_cert
110
+ attr_accessor :filter_exception_types
106
111
 
107
112
  attr_accessor :http_timeout
108
113
  attr_accessor :http_open_timeout
@@ -168,7 +173,7 @@ module ElasticAPM
168
173
  end
169
174
  end
170
175
 
171
- # rubocop:disable Metrics/MethodLength
176
+ # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity
172
177
  def set_from_env
173
178
  ENV_TO_KEY.each do |env_key, key|
174
179
  next unless (value = ENV[env_key])
@@ -180,13 +185,14 @@ module ElasticAPM
180
185
  when :int then value.to_i
181
186
  when :float then value.to_f
182
187
  when :bool then !%w[0 false].include?(value.strip.downcase)
188
+ when :list then value.split(/[ ,]/)
183
189
  else value
184
190
  end
185
191
 
186
192
  send("#{key}=", value)
187
193
  end
188
194
  end
189
- # rubocop:enable Metrics/MethodLength
195
+ # rubocop:enable Metrics/MethodLength, Metrics/CyclomaticComplexity
190
196
 
191
197
  def set_from_args(options)
192
198
  options.each do |key, value|
@@ -127,7 +127,7 @@ module ElasticAPM
127
127
  def flush_transactions
128
128
  return if @pending_transactions.empty?
129
129
 
130
- debug 'Flushing transactions'
130
+ debug 'Sending %i transactions', @pending_transactions.length
131
131
 
132
132
  @agent.enqueue_transactions @pending_transactions
133
133
 
@@ -3,7 +3,7 @@
3
3
  module ElasticAPM
4
4
  # @api private
5
5
  module Log
6
- PREFIX = '** [ElasticAPM] '.freeze
6
+ PREFIX = '[ElasticAPM] '.freeze
7
7
 
8
8
  def debug(msg, *args, &block)
9
9
  log(:debug, msg, *args, &block)
@@ -4,7 +4,6 @@ module ElasticAPM
4
4
  # @api private
5
5
  class Railtie < Rails::Railtie
6
6
  config.elastic_apm = ActiveSupport::OrderedOptions.new
7
- Config::DEFAULTS.each { |option, value| config.elastic_apm[option] = value }
8
7
 
9
8
  initializer 'elastic_apm.initialize' do |app|
10
9
  config = Config.new app.config.elastic_apm do |c|
@@ -18,7 +17,6 @@ module ElasticAPM
18
17
 
19
18
  begin
20
19
  ElasticAPM.start config
21
- Rails.logger.info "#{Log::PREFIX}Running"
22
20
 
23
21
  app.middleware.insert 0, Middleware
24
22
  rescue StandardError => e
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ElasticAPM
4
- VERSION = '0.4.0'.freeze
4
+ VERSION = '0.4.1'.freeze
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elastic-apm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikkel Malmberg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-13 00:00:00.000000000 Z
11
+ date: 2018-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport