rails_autoscale_agent 0.2.0 → 0.3.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a664bf586cfca775c6746bf7a9ec73ceacda9a35
4
- data.tar.gz: 3851b8c106b566f8af42ad08bcb7481f07780f09
3
+ metadata.gz: fe89dcd1aa0c7e2f91a0d1b28e245fe2069ceea2
4
+ data.tar.gz: 410d2bda04a6e08b32c346a5772f3d18497e5835
5
5
  SHA512:
6
- metadata.gz: ddefca39f67065285ef5fc6fb04d9a1c7e5ed4b2a1f40ba7cd29aaaea1f086fc945e72c8aef4ee061a39d30509407f887968447e7d8af8b66c608c312bcda40e
7
- data.tar.gz: 3fced23c559e9ef89306cf05d72f85d05c57a5bfc346ca38abefa782f0b00c8ed97a72ec564694b847d09a1c631ad5ae67f33cf9e03f672ff7c95f6130f44188
6
+ metadata.gz: daa65cd31e4b418a78672b36968a9dc5c9ec99e572f02fea091c22b01e656b5f21fd47b1c400f17edc2c75dbfce942f0847a147d3ebdff1b57a5ae9904cdebd6
7
+ data.tar.gz: 79205df8bc5d395ce86134af38c21e629a491dd95472bb2b46f7ab3f7448f92a6fd6b491b21d4c1735f423faa328386368ec22a87c306735d38ad8c26a82fb8f
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ /log/
@@ -1,22 +1,34 @@
1
+ require 'singleton'
2
+
1
3
  module RailsAutoscaleAgent
2
4
  class Config
3
- attr_reader :api_base_url, :dyno, :pid, :fake_mode
5
+ include Singleton
6
+
7
+ attr_reader :api_base_url, :dyno, :pid, :fake_mode, :max_request_size
8
+ attr_accessor :report_interval
4
9
  alias_method :fake_mode?, :fake_mode
5
10
 
6
- def initialize(environment)
7
- @api_base_url = environment['RAILS_AUTOSCALE_URL']
11
+ def initialize
12
+ @api_base_url = ENV['RAILS_AUTOSCALE_URL']
8
13
  @pid = Process.pid
9
- @fake_mode = true if environment['RAILS_AUTOSCALE_FAKE_MODE'] == 'true'
14
+ @max_request_size = 100_000 # ignore request payloads over 100k since they skew the queue times
15
+ @report_interval = 60 # this default will be overwritten during Reporter#register!
16
+ @fake_mode = true if ENV['RAILS_AUTOSCALE_FAKE_MODE'] == 'true'
10
17
 
11
18
  if fake_mode?
12
19
  @dyno = 'web.123'
13
20
  else
14
- @dyno = environment['DYNO']
21
+ @dyno = ENV['DYNO']
15
22
  end
16
23
  end
17
24
 
18
25
  def to_s
19
26
  "#{@dyno}##{@pid}"
20
27
  end
28
+
29
+ def ignore_large_requests?
30
+ @max_request_size.present?
31
+ end
32
+
21
33
  end
22
34
  end
@@ -14,16 +14,15 @@ module RailsAutoscaleAgent
14
14
  end
15
15
 
16
16
  def call(env)
17
- config = Config.new(ENV)
18
-
19
17
  logger.tagged 'RailsAutoscale' do
18
+ config = Config.instance
20
19
  request = Request.new(env, config)
21
20
 
22
- logger.debug "Middleware entered - request_id=#{request.id} path=#{request.path}"
21
+ logger.debug "Middleware entered - request_id=#{request.id} path=#{request.path} method=#{request.method} request_size=#{request.size}"
23
22
 
24
23
  store = Store.instance
25
24
  Reporter.start(config, store)
26
- Collector.collect(request, store)
25
+ Collector.collect(request, store) unless request.ignore?
27
26
  end
28
27
 
29
28
  @app.call(env)
@@ -21,14 +21,13 @@ module RailsAutoscaleAgent
21
21
 
22
22
  def start!(config, store)
23
23
  @running = true
24
- @report_interval = 60 # this default will be overwritten during #register!
25
24
 
26
25
  Thread.new do
27
26
  logger.tagged 'RailsAutoscale' do
28
27
  register!(config)
29
28
 
30
29
  loop do
31
- sleep @report_interval
30
+ sleep config.report_interval
32
31
 
33
32
  begin
34
33
  report!(config, store)
@@ -73,8 +72,9 @@ module RailsAutoscaleAgent
73
72
 
74
73
  case result
75
74
  when AutoscaleApi::SuccessResponse
76
- @report_interval = result.data['report_interval'] || @report_interval
77
- logger.info "Reporter starting, will report every #{@report_interval} seconds"
75
+ config.report_interval = result.data['report_interval'] if result.data['report_interval']
76
+ config.max_request_size = result.data['max_request_size'] if result.data['max_request_size']
77
+ logger.info "Reporter starting, will report every #{config.report_interval} seconds"
78
78
  when AutoscaleApi::FailureResponse
79
79
  logger.error "Reporter failed to register: #{result.failure_message}"
80
80
  end
@@ -1,15 +1,23 @@
1
1
  module RailsAutoscaleAgent
2
2
  class Request
3
- attr_reader :id, :entered_queue_at, :path
3
+ attr_reader :id, :entered_queue_at, :path, :method, :size
4
4
 
5
5
  def initialize(env, config)
6
+ @config = config
6
7
  @id = env['HTTP_X_REQUEST_ID']
7
8
  @path = env['PATH_INFO']
9
+ @method = env['REQUEST_METHOD'].downcase
10
+ @size = env['rack.input'].size
8
11
  @entered_queue_at = if unix_millis = env['HTTP_X_REQUEST_START']
9
12
  Time.at(unix_millis.to_f / 1000)
10
13
  elsif config.fake_mode?
11
14
  Time.now - rand(1000) / 1000.0 # 0-1000 ms ago
12
15
  end
13
16
  end
17
+
18
+ def ignore?
19
+ @config.ignore_large_requests? && @size > @config.max_request_size
20
+ end
21
+
14
22
  end
15
23
  end
@@ -1,3 +1,3 @@
1
1
  module RailsAutoscaleAgent
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_autoscale_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam McCrea
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-03 00:00:00.000000000 Z
11
+ date: 2017-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport