rails_autoscale_agent 0.6.3 → 0.8.3
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 +4 -4
- data/.ruby-version +1 -1
- data/.vscode/tasks.json +84 -0
- data/README.md +15 -6
- data/lib/rails_autoscale_agent/config.rb +10 -1
- data/lib/rails_autoscale_agent/logger.rb +20 -13
- data/lib/rails_autoscale_agent/middleware.rb +8 -13
- data/lib/rails_autoscale_agent/railtie.rb +4 -0
- data/lib/rails_autoscale_agent/reporter.rb +19 -25
- data/lib/rails_autoscale_agent/version.rb +1 -1
- data/lib/rails_autoscale_agent/worker_adapters/delayed_job.rb +64 -0
- data/lib/rails_autoscale_agent/worker_adapters/que.rb +46 -0
- data/lib/rails_autoscale_agent/worker_adapters/sidekiq.rb +1 -1
- data/rails_autoscale_agent.gemspec +4 -3
- metadata +50 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3924fc840320be8327c183e1cb54055d8516d2fefee1cffbfa7092da39b05985
|
4
|
+
data.tar.gz: abd81e6c4c2dc3a65be7c426dda8742ec92b7c29c47a71eeb2566731436ce4e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4867868c9e9e707d9e4afe46f20d19f600a87b26aabf5a96f4ad8ff91698d00b08f8a0566ef20fe8f3f1c036c9220b1034a92c70280a4cf29a6d5b5a728b4105
|
7
|
+
data.tar.gz: e2fbbc4afa90c0c636dddb3172d1164108e984f4c550739df552cd185a8a51d7255ff354debc658ecfa893fb4f87f53e6c298bfe4dddf2aa35615f7636e64420
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.5
|
1
|
+
2.6.5
|
data/.vscode/tasks.json
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
{
|
2
|
+
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
3
|
+
// for the documentation about the tasks.json format
|
4
|
+
"version": "2.0.0",
|
5
|
+
"tasks": [
|
6
|
+
{
|
7
|
+
"label": "test: all",
|
8
|
+
"group": "test",
|
9
|
+
"command": "rspec",
|
10
|
+
"runOptions": {
|
11
|
+
"reevaluateOnRerun": false
|
12
|
+
},
|
13
|
+
"problemMatcher": {
|
14
|
+
"owner": "ruby",
|
15
|
+
"fileLocation": ["relative", "${workspaceRoot}"],
|
16
|
+
"severity": "error",
|
17
|
+
"pattern": [
|
18
|
+
{
|
19
|
+
"regexp": "^\\s{7}(.*)$",
|
20
|
+
"message": 1
|
21
|
+
},
|
22
|
+
{
|
23
|
+
"regexp": "^\\s+#\\s(\\./.*):(\\d+):(in.*)$",
|
24
|
+
"file": 1,
|
25
|
+
"line": 2,
|
26
|
+
"code": 3
|
27
|
+
}
|
28
|
+
]
|
29
|
+
}
|
30
|
+
},
|
31
|
+
{
|
32
|
+
"label": "test: file",
|
33
|
+
"group": "test",
|
34
|
+
"command": "rspec",
|
35
|
+
"args": ["${relativeFile}"],
|
36
|
+
"runOptions": {
|
37
|
+
"reevaluateOnRerun": false
|
38
|
+
},
|
39
|
+
"problemMatcher": {
|
40
|
+
"owner": "ruby",
|
41
|
+
"fileLocation": ["relative", "${workspaceRoot}"],
|
42
|
+
"severity": "error",
|
43
|
+
"pattern": [
|
44
|
+
{
|
45
|
+
"regexp": "^\\s{7}(.*)$",
|
46
|
+
"message": 1
|
47
|
+
},
|
48
|
+
{
|
49
|
+
"regexp": "^\\s+#\\s(\\./.*):(\\d+):(in.*)$",
|
50
|
+
"file": 1,
|
51
|
+
"line": 2,
|
52
|
+
"code": 3
|
53
|
+
}
|
54
|
+
]
|
55
|
+
}
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"label": "test: line",
|
59
|
+
"group": "test",
|
60
|
+
"command": "rspec",
|
61
|
+
"args": ["${relativeFile}:${lineNumber}"],
|
62
|
+
"runOptions": {
|
63
|
+
"reevaluateOnRerun": false
|
64
|
+
},
|
65
|
+
"problemMatcher": {
|
66
|
+
"owner": "ruby",
|
67
|
+
"fileLocation": ["relative", "${workspaceRoot}"],
|
68
|
+
"severity": "error",
|
69
|
+
"pattern": [
|
70
|
+
{
|
71
|
+
"regexp": "^\\s{7}(.*)$",
|
72
|
+
"message": 1
|
73
|
+
},
|
74
|
+
{
|
75
|
+
"regexp": "^\\s+#\\s(\\./.*):(\\d+):(in.*)$",
|
76
|
+
"file": 1,
|
77
|
+
"line": 2,
|
78
|
+
"code": 3
|
79
|
+
}
|
80
|
+
]
|
81
|
+
}
|
82
|
+
}
|
83
|
+
]
|
84
|
+
}
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/adamlogic/rails_autoscale_agent)
|
4
4
|
|
5
|
-
This gem works together with the [Rails Autoscale](https://railsautoscale.com) Heroku add-on to automatically scale your web dynos as needed. It gathers a minimal set of metrics for each request, and periodically posts this data asynchronously to the Rails Autoscale service.
|
5
|
+
This gem works together with the [Rails Autoscale](https://railsautoscale.com) Heroku add-on to automatically scale your web and worker dynos as needed. It gathers a minimal set of metrics for each request (and job queue), and periodically posts this data asynchronously to the Rails Autoscale service.
|
6
6
|
|
7
7
|
## Requirements
|
8
8
|
|
@@ -26,9 +26,11 @@ You'll need to insert the `RailsAutoscaleAgent::Middleware` manually. Insert it
|
|
26
26
|
|
27
27
|
## Changing the logger
|
28
28
|
|
29
|
+
The Rails logger is used by default.
|
29
30
|
If you wish to use a different logger you can set it on the configuration object:
|
30
31
|
|
31
32
|
```ruby
|
33
|
+
# config/initializers/rails_autoscale_agent.rb
|
32
34
|
RailsAutoscaleAgent::Config.instance.logger = MyLogger.new
|
33
35
|
```
|
34
36
|
|
@@ -43,22 +45,29 @@ The middleware agent runs in its own thread so your web requests are not impacte
|
|
43
45
|
- PID
|
44
46
|
- Collection of queue time measurements (time and milliseconds)
|
45
47
|
|
46
|
-
Rails Autoscale
|
48
|
+
Rails Autoscale aggregates and stores this information to power the autoscaling algorithm and dashboard visualizations.
|
47
49
|
|
48
50
|
## Troubleshooting
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
Once installed, you should see something like this in development:
|
52
|
+
Once installed, you should see something like this in your development log:
|
53
53
|
|
54
54
|
> [RailsAutoscale] Reporter not started: RAILS_AUTOSCALE_URL is not set
|
55
55
|
|
56
|
-
In production, you should see something like this:
|
56
|
+
In production, run `heroku logs -t | grep RailsAutoscale`, and you should see something like this:
|
57
57
|
|
58
58
|
> [RailsAutoscale] Reporter starting, will report every 15 seconds
|
59
59
|
|
60
60
|
If you don't see either of these, try running `bundle` again and restarting your Rails application.
|
61
61
|
|
62
|
+
You can see more detailed (debug) logging by setting the `RAILS_AUTOSCALE_DEBUG` env var on your Heroku app:
|
63
|
+
|
64
|
+
```
|
65
|
+
heroku config:add RAILS_AUTOSCALE_DEBUG=true
|
66
|
+
```
|
67
|
+
|
68
|
+
Debug logs are silenced by default because Rails apps default to a DEBUG log level in production,
|
69
|
+
and these can get very noisy with this gem.
|
70
|
+
|
62
71
|
Reach out to help@railsautoscale.com if you run into any other problems.
|
63
72
|
|
64
73
|
## Development
|
@@ -7,9 +7,18 @@ module RailsAutoscaleAgent
|
|
7
7
|
include Singleton
|
8
8
|
|
9
9
|
attr_accessor :report_interval, :logger, :api_base_url, :max_request_size,
|
10
|
-
:dyno, :pid, :addon_name
|
10
|
+
:dyno, :pid, :addon_name, :worker_adapters
|
11
11
|
|
12
12
|
def initialize
|
13
|
+
require 'rails_autoscale_agent/worker_adapters/sidekiq'
|
14
|
+
require 'rails_autoscale_agent/worker_adapters/delayed_job'
|
15
|
+
require 'rails_autoscale_agent/worker_adapters/que'
|
16
|
+
@worker_adapters = [
|
17
|
+
WorkerAdapters::Sidekiq.instance,
|
18
|
+
WorkerAdapters::DelayedJob.instance,
|
19
|
+
WorkerAdapters::Que.instance,
|
20
|
+
]
|
21
|
+
|
13
22
|
# Allow the add-on name to be configured - needed for testing
|
14
23
|
@addon_name = ENV['RAILS_AUTOSCALE_ADDON'] || 'RAILS_AUTOSCALE'
|
15
24
|
@api_base_url = ENV["#{@addon_name}_URL"]
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'active_support/core_ext/module/delegation'
|
4
3
|
require 'rails_autoscale_agent/config'
|
4
|
+
require 'logger'
|
5
5
|
|
6
6
|
module RailsAutoscaleAgent
|
7
7
|
module Logger
|
@@ -11,23 +11,30 @@ module RailsAutoscaleAgent
|
|
11
11
|
end
|
12
12
|
|
13
13
|
class LoggerProxy < Struct.new(:logger)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
yield self
|
14
|
+
TAG = '[RailsAutoscale]'
|
15
|
+
|
16
|
+
%w[info warn error].each do |name|
|
17
|
+
define_method name do |msg|
|
18
|
+
logger.send name, tag(msg)
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
23
|
-
def debug(
|
24
|
-
#
|
25
|
-
# to
|
26
|
-
logger
|
22
|
+
def debug(msg)
|
23
|
+
# Silence debug logs by default to avoiding being overly chatty (Rails logger defaults
|
24
|
+
# to DEBUG level in production).
|
25
|
+
# This uses a separate logger so that RAILS_AUTOSCALE_DEBUG
|
26
|
+
# shows debug logs regardless of Rails log level.
|
27
|
+
debug_logger.debug tag(msg) if ENV['RAILS_AUTOSCALE_DEBUG'] == 'true'
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def debug_logger
|
33
|
+
@debug_loggers ||= ::Logger.new(STDOUT)
|
27
34
|
end
|
28
35
|
|
29
|
-
def
|
30
|
-
|
36
|
+
def tag(msg)
|
37
|
+
"#{TAG} #{msg}"
|
31
38
|
end
|
32
39
|
end
|
33
40
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'rails_autoscale_agent/logger'
|
4
3
|
require 'rails_autoscale_agent/store'
|
5
4
|
require 'rails_autoscale_agent/reporter'
|
6
5
|
require 'rails_autoscale_agent/config'
|
@@ -8,25 +7,21 @@ require 'rails_autoscale_agent/request'
|
|
8
7
|
|
9
8
|
module RailsAutoscaleAgent
|
10
9
|
class Middleware
|
11
|
-
include Logger
|
12
|
-
|
13
10
|
def initialize(app)
|
14
11
|
@app = app
|
15
12
|
end
|
16
13
|
|
17
14
|
def call(env)
|
18
|
-
|
19
|
-
|
20
|
-
request = Request.new(env, config)
|
15
|
+
config = Config.instance
|
16
|
+
request = Request.new(env, config)
|
21
17
|
|
22
|
-
|
23
|
-
|
18
|
+
store = Store.instance
|
19
|
+
Reporter.start(config, store)
|
24
20
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
21
|
+
if !request.ignore? && queue_time = request.queue_time
|
22
|
+
# NOTE: Expose queue time to the app
|
23
|
+
env['queue_time'] = queue_time
|
24
|
+
store.push queue_time
|
30
25
|
end
|
31
26
|
|
32
27
|
@app.call(env)
|
@@ -1,10 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'rails_autoscale_agent/middleware'
|
4
|
+
require 'rails_autoscale_agent/logger'
|
4
5
|
|
5
6
|
module RailsAutoscaleAgent
|
6
7
|
class Railtie < Rails::Railtie
|
8
|
+
include Logger
|
9
|
+
|
7
10
|
initializer "rails_autoscale_agent.middleware" do |app|
|
11
|
+
logger.info "Preparing middleware"
|
8
12
|
app.middleware.insert_before Rack::Runtime, Middleware
|
9
13
|
end
|
10
14
|
end
|
@@ -5,7 +5,6 @@ require 'rails_autoscale_agent/logger'
|
|
5
5
|
require 'rails_autoscale_agent/autoscale_api'
|
6
6
|
require 'rails_autoscale_agent/time_rounder'
|
7
7
|
require 'rails_autoscale_agent/registration'
|
8
|
-
require 'rails_autoscale_agent/worker_adapters/sidekiq'
|
9
8
|
|
10
9
|
# Reporter wakes up every minute to send metrics to the RailsAutoscale API
|
11
10
|
|
@@ -14,17 +13,13 @@ module RailsAutoscaleAgent
|
|
14
13
|
include Singleton
|
15
14
|
include Logger
|
16
15
|
|
17
|
-
WORKER_ADAPTERS = [
|
18
|
-
WorkerAdapters::Sidekiq.new,
|
19
|
-
]
|
20
|
-
|
21
16
|
def self.start(config, store)
|
22
17
|
instance.start!(config, store) unless instance.started?
|
23
18
|
end
|
24
19
|
|
25
20
|
def start!(config, store)
|
26
21
|
@started = true
|
27
|
-
@worker_adapters =
|
22
|
+
@worker_adapters = config.worker_adapters.select(&:enabled?)
|
28
23
|
|
29
24
|
if !config.api_base_url
|
30
25
|
logger.info "Reporter not started: #{config.addon_name}_URL is not set"
|
@@ -32,23 +27,21 @@ module RailsAutoscaleAgent
|
|
32
27
|
end
|
33
28
|
|
34
29
|
Thread.new do
|
35
|
-
|
36
|
-
register!(config)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
logger.error ex.backtrace.join("\n")
|
51
|
-
end
|
30
|
+
loop do
|
31
|
+
register!(config) unless @registered
|
32
|
+
|
33
|
+
# Stagger reporting to spread out reports from many processes
|
34
|
+
multiplier = 1 - (rand / 4) # between 0.75 and 1.0
|
35
|
+
sleep config.report_interval * multiplier
|
36
|
+
|
37
|
+
begin
|
38
|
+
@worker_adapters.map { |a| a.collect!(store) }
|
39
|
+
report!(config, store)
|
40
|
+
rescue => ex
|
41
|
+
# Exceptions in threads other than the main thread will fail silently
|
42
|
+
# https://ruby-doc.org/core-2.2.0/Thread.html#class-Thread-label-Exception+handling
|
43
|
+
logger.error "Reporter error: #{ex.inspect}"
|
44
|
+
logger.error ex.backtrace.join("\n")
|
52
45
|
end
|
53
46
|
end
|
54
47
|
end
|
@@ -84,13 +77,14 @@ module RailsAutoscaleAgent
|
|
84
77
|
|
85
78
|
case result
|
86
79
|
when AutoscaleApi::SuccessResponse
|
80
|
+
@registered = true
|
87
81
|
config.report_interval = result.data['report_interval'] if result.data['report_interval']
|
88
82
|
config.max_request_size = result.data['max_request_size'] if result.data['max_request_size']
|
89
|
-
|
83
|
+
worker_adapters_msg = @worker_adapters.map { |a| a.class.name }.join(', ')
|
84
|
+
logger.info "Reporter starting, will report every #{config.report_interval} seconds or so. Worker adapters: [#{worker_adapters_msg}]"
|
90
85
|
when AutoscaleApi::FailureResponse
|
91
86
|
logger.error "Reporter failed to register: #{result.failure_message}"
|
92
87
|
end
|
93
88
|
end
|
94
|
-
|
95
89
|
end
|
96
90
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails_autoscale_agent/logger'
|
4
|
+
|
5
|
+
module WorkerAdapters
|
6
|
+
class DelayedJob
|
7
|
+
include RailsAutoscaleAgent::Logger
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_accessor :queues
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
# Track the known queues so we can continue reporting on queues that don't
|
16
|
+
# currently have enqueued jobs.
|
17
|
+
self.class.queues = Set.new
|
18
|
+
|
19
|
+
install if enabled?
|
20
|
+
end
|
21
|
+
|
22
|
+
def enabled?
|
23
|
+
defined? ::Delayed
|
24
|
+
end
|
25
|
+
|
26
|
+
def collect!(store)
|
27
|
+
log_msg = String.new('DelayedJob latency ')
|
28
|
+
t = Time.now
|
29
|
+
|
30
|
+
# Ignore failed jobs (they skew latency measurement due to the original run_at)
|
31
|
+
sql = 'SELECT queue, min(run_at) FROM delayed_jobs WHERE attempts = 0 GROUP BY queue'
|
32
|
+
run_at_by_queue = Hash[ActiveRecord::Base.connection.select_rows(sql)]
|
33
|
+
queues = self.class.queues | run_at_by_queue.keys
|
34
|
+
|
35
|
+
queues.each do |queue|
|
36
|
+
next if queue.nil? || queue.empty?
|
37
|
+
run_at = run_at_by_queue[queue]
|
38
|
+
run_at = Time.parse(run_at) if run_at.is_a?(String)
|
39
|
+
latency_ms = run_at ? ((t - run_at)*1000).ceil : 0
|
40
|
+
store.push latency_ms, t, queue
|
41
|
+
log_msg << "#{queue}=#{latency_ms} "
|
42
|
+
end
|
43
|
+
|
44
|
+
logger.debug log_msg
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def install
|
50
|
+
plugin = Class.new(Delayed::Plugin) do
|
51
|
+
require 'delayed_job'
|
52
|
+
|
53
|
+
callbacks do |lifecycle|
|
54
|
+
lifecycle.before(:enqueue) do |job, &block|
|
55
|
+
queue = job.queue || 'default'
|
56
|
+
WorkerAdapters::DelayedJob.queues.add queue
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
Delayed::Worker.plugins << plugin
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails_autoscale_agent/logger'
|
4
|
+
require 'time'
|
5
|
+
|
6
|
+
module WorkerAdapters
|
7
|
+
class Que
|
8
|
+
include RailsAutoscaleAgent::Logger
|
9
|
+
include Singleton
|
10
|
+
|
11
|
+
DEFAULT_QUEUES = ['default']
|
12
|
+
|
13
|
+
class << self
|
14
|
+
attr_accessor :queues
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
self.class.queues = DEFAULT_QUEUES
|
19
|
+
end
|
20
|
+
|
21
|
+
def enabled?
|
22
|
+
defined? ::Que
|
23
|
+
end
|
24
|
+
|
25
|
+
def collect!(store)
|
26
|
+
log_msg = String.new('Que latency ')
|
27
|
+
t = Time.now
|
28
|
+
|
29
|
+
# Ignore failed jobs (they skew latency measurement due to the original run_at)
|
30
|
+
sql = 'SELECT queue, min(run_at) FROM que_jobs WHERE error_count = 0 GROUP BY queue'
|
31
|
+
run_at_by_queue = Hash[ActiveRecord::Base.connection.select_rows(sql)]
|
32
|
+
self.class.queues |= run_at_by_queue.keys
|
33
|
+
|
34
|
+
self.class.queues.each do |queue|
|
35
|
+
next if queue.nil? || queue.empty?
|
36
|
+
run_at = run_at_by_queue[queue]
|
37
|
+
run_at = Time.parse(run_at) if run_at.is_a?(String)
|
38
|
+
latency_ms = run_at ? ((t - run_at)*1000).ceil : 0
|
39
|
+
store.push latency_ms, t, queue
|
40
|
+
log_msg << "#{queue}=#{latency_ms} "
|
41
|
+
end
|
42
|
+
|
43
|
+
logger.debug log_msg
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -5,6 +5,7 @@ require 'rails_autoscale_agent/logger'
|
|
5
5
|
module WorkerAdapters
|
6
6
|
class Sidekiq
|
7
7
|
include RailsAutoscaleAgent::Logger
|
8
|
+
include Singleton
|
8
9
|
|
9
10
|
def enabled?
|
10
11
|
require 'sidekiq/api'
|
@@ -13,7 +14,6 @@ module WorkerAdapters
|
|
13
14
|
false
|
14
15
|
end
|
15
16
|
|
16
|
-
# TODO: specs
|
17
17
|
def collect!(store)
|
18
18
|
log_msg = String.new('Sidekiq latency ')
|
19
19
|
|
@@ -16,14 +16,15 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
|
-
spec.add_dependency "activesupport", ">= 3.2"
|
20
|
-
|
21
19
|
spec.add_development_dependency "bundler", "~> 2.0"
|
22
|
-
spec.add_development_dependency "rake", "~>
|
20
|
+
spec.add_development_dependency "rake", "~> 12.3.3"
|
23
21
|
spec.add_development_dependency "rspec", "~> 3.0"
|
24
22
|
spec.add_development_dependency "vcr", "~> 3.0"
|
25
23
|
spec.add_development_dependency "webmock"
|
26
24
|
spec.add_development_dependency "pry"
|
27
25
|
spec.add_development_dependency "pry-byebug"
|
28
26
|
spec.add_development_dependency "sidekiq", "~> 5.0"
|
27
|
+
spec.add_development_dependency "delayed_job"
|
28
|
+
spec.add_development_dependency "que"
|
29
|
+
spec.add_development_dependency "activesupport"
|
29
30
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_autoscale_agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam McCrea
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: activesupport
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '3.2'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '3.2'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: bundler
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +30,14 @@ dependencies:
|
|
44
30
|
requirements:
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
33
|
+
version: 12.3.3
|
48
34
|
type: :development
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
40
|
+
version: 12.3.3
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rspec
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +122,48 @@ dependencies:
|
|
136
122
|
- - "~>"
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '5.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: delayed_job
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: que
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: activesupport
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
139
167
|
description:
|
140
168
|
email:
|
141
169
|
- adam@adamlogic.com
|
@@ -147,6 +175,7 @@ files:
|
|
147
175
|
- ".rspec"
|
148
176
|
- ".ruby-version"
|
149
177
|
- ".travis.yml"
|
178
|
+
- ".vscode/tasks.json"
|
150
179
|
- Gemfile
|
151
180
|
- LICENSE.txt
|
152
181
|
- README.md
|
@@ -167,6 +196,8 @@ files:
|
|
167
196
|
- lib/rails_autoscale_agent/store.rb
|
168
197
|
- lib/rails_autoscale_agent/time_rounder.rb
|
169
198
|
- lib/rails_autoscale_agent/version.rb
|
199
|
+
- lib/rails_autoscale_agent/worker_adapters/delayed_job.rb
|
200
|
+
- lib/rails_autoscale_agent/worker_adapters/que.rb
|
170
201
|
- lib/rails_autoscale_agent/worker_adapters/sidekiq.rb
|
171
202
|
- log/.gitkeep
|
172
203
|
- rails_autoscale_agent.gemspec
|
@@ -189,8 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
189
220
|
- !ruby/object:Gem::Version
|
190
221
|
version: '0'
|
191
222
|
requirements: []
|
192
|
-
|
193
|
-
rubygems_version: 2.7.3
|
223
|
+
rubygems_version: 3.0.3
|
194
224
|
signing_key:
|
195
225
|
specification_version: 4
|
196
226
|
summary: This gem works with the Rails Autoscale Heroku add-on to automatically scale
|