rails-autoscale-resque 1.0.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 +7 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +54 -0
- data/Rakefile +12 -0
- data/lib/rails-autoscale-resque.rb +3 -0
- data/lib/rails_autoscale/resque/latency_extension.rb +23 -0
- data/lib/rails_autoscale/resque/metrics_collector.rb +48 -0
- data/lib/rails_autoscale/resque/version.rb +7 -0
- data/lib/rails_autoscale/resque.rb +16 -0
- data/rails-autoscale-resque.gemspec +30 -0
- metadata +87 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3ebce6e76c02bf28184ac1aa7c7485eb683876014bbb96fa6fb9484a043d6fae
|
4
|
+
data.tar.gz: 49ef4f79c9e5f0321a130d4f6e8af242d808b7b458af73e30a5feed34df8702a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3c345acf531838db441bd4391f4db3973bc9f05f34c47edd07f8694ceb488458770579ef67b31638c69e3d2687f21f4f49d8370702195cc7007a9d31e754d53d
|
7
|
+
data.tar.gz: e19a5b314756d03d496bf0e7a16851c96baea97d710e107bf4d32a7f78cc7c520746099ab1f768b43716ad4c2d9dacb3ec01c2a286313746e6d2c7320357b599
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ../rails-autoscale-core
|
3
|
+
specs:
|
4
|
+
rails-autoscale-core (1.0.0)
|
5
|
+
|
6
|
+
PATH
|
7
|
+
remote: .
|
8
|
+
specs:
|
9
|
+
rails-autoscale-resque (1.0.0)
|
10
|
+
rails-autoscale-core
|
11
|
+
resque (>= 2.0)
|
12
|
+
|
13
|
+
GEM
|
14
|
+
remote: https://rubygems.org/
|
15
|
+
specs:
|
16
|
+
minitest (5.15.0)
|
17
|
+
mono_logger (1.1.1)
|
18
|
+
multi_json (1.15.0)
|
19
|
+
mustermann (2.0.2)
|
20
|
+
ruby2_keywords (~> 0.0.1)
|
21
|
+
rack (2.2.4)
|
22
|
+
rack-protection (2.2.2)
|
23
|
+
rack
|
24
|
+
rake (13.0.6)
|
25
|
+
redis (4.7.1)
|
26
|
+
redis-namespace (1.9.0)
|
27
|
+
redis (>= 4)
|
28
|
+
resque (2.2.1)
|
29
|
+
mono_logger (~> 1.0)
|
30
|
+
multi_json (~> 1.0)
|
31
|
+
redis-namespace (~> 1.6)
|
32
|
+
sinatra (>= 0.9.2)
|
33
|
+
ruby2_keywords (0.0.5)
|
34
|
+
sinatra (2.2.2)
|
35
|
+
mustermann (~> 2.0)
|
36
|
+
rack (~> 2.2)
|
37
|
+
rack-protection (= 2.2.2)
|
38
|
+
tilt (~> 2.0)
|
39
|
+
tilt (2.0.11)
|
40
|
+
|
41
|
+
PLATFORMS
|
42
|
+
arm64-darwin-20
|
43
|
+
arm64-darwin-21
|
44
|
+
x86_64-darwin-21
|
45
|
+
x86_64-linux
|
46
|
+
|
47
|
+
DEPENDENCIES
|
48
|
+
minitest
|
49
|
+
rails-autoscale-core!
|
50
|
+
rails-autoscale-resque!
|
51
|
+
rake
|
52
|
+
|
53
|
+
BUNDLED WITH
|
54
|
+
2.3.9
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module RailsAutoscale
|
2
|
+
module Resque
|
3
|
+
module LatencyExtension
|
4
|
+
# Store the time when jobs are pushed to the queue in order to calculate latency.
|
5
|
+
def push(queue, item)
|
6
|
+
item["timestamp"] = Time.now.utc.to_f
|
7
|
+
super
|
8
|
+
end
|
9
|
+
|
10
|
+
# Calculate latency for the given queue using the stored timestamp of the oldest item in the queue.
|
11
|
+
def latency(queue)
|
12
|
+
if (item = peek(queue))
|
13
|
+
timestamp = item["timestamp"]
|
14
|
+
timestamp ? Time.now.utc.to_f - timestamp.to_f : 0.0
|
15
|
+
else
|
16
|
+
0.0
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
::Resque.extend(RailsAutoscale::Resque::LatencyExtension)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails_autoscale/job_metrics_collector"
|
4
|
+
require "rails_autoscale/metric"
|
5
|
+
|
6
|
+
module RailsAutoscale
|
7
|
+
module Resque
|
8
|
+
class MetricsCollector < RailsAutoscale::JobMetricsCollector
|
9
|
+
def self.adapter_config
|
10
|
+
RailsAutoscale::Config.instance.resque
|
11
|
+
end
|
12
|
+
|
13
|
+
def collect
|
14
|
+
metrics = []
|
15
|
+
current_queues = ::Resque.queues
|
16
|
+
|
17
|
+
if track_busy_jobs?
|
18
|
+
busy_counts = Hash.new { |h, k| h[k] = 0 }
|
19
|
+
|
20
|
+
::Resque.working.each do |worker|
|
21
|
+
if !worker.idle? && (job = worker.job)
|
22
|
+
busy_counts[job["queue"]] += 1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
self.queues |= current_queues
|
28
|
+
|
29
|
+
queues.each do |queue|
|
30
|
+
next if queue.nil? || queue.empty?
|
31
|
+
depth = ::Resque.size(queue)
|
32
|
+
latency = (::Resque.latency(queue) * 1000).ceil
|
33
|
+
|
34
|
+
metrics.push Metric.new(:qd, depth, Time.now, queue)
|
35
|
+
metrics.push Metric.new(:qt, latency, Time.now, queue)
|
36
|
+
|
37
|
+
if track_busy_jobs?
|
38
|
+
busy_count = busy_counts[queue]
|
39
|
+
metrics.push Metric.new(:busy, busy_count, Time.now, queue)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
log_collection(metrics)
|
44
|
+
metrics
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails-autoscale-core"
|
4
|
+
require "rails_autoscale/config"
|
5
|
+
require "rails_autoscale/resque/version"
|
6
|
+
require "rails_autoscale/resque/metrics_collector"
|
7
|
+
require "resque"
|
8
|
+
require "rails_autoscale/resque/latency_extension"
|
9
|
+
|
10
|
+
RailsAutoscale.add_adapter :"rails-autoscale-resque",
|
11
|
+
{
|
12
|
+
adapter_version: RailsAutoscale::Resque::VERSION,
|
13
|
+
framework_version: ::Resque::VERSION
|
14
|
+
},
|
15
|
+
metrics_collector: RailsAutoscale::Resque::MetricsCollector,
|
16
|
+
expose_config: RailsAutoscale::Config::JobAdapterConfig.new(:resque)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
lib = File.expand_path("../lib", __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require "rails_autoscale/resque/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "rails-autoscale-resque"
|
7
|
+
spec.version = RailsAutoscale::Resque::VERSION
|
8
|
+
spec.authors = ["Adam McCrea", "Carlos Antonio da Silva"]
|
9
|
+
spec.email = ["adam@adamlogic.com"]
|
10
|
+
|
11
|
+
spec.summary = "This gem provides Resque integration with the Rails Autoscale autoscaling add-on for Heroku."
|
12
|
+
spec.homepage = "https://railsautoscale.com"
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.metadata = {
|
16
|
+
"homepage_uri" => "https://railsautoscale.com",
|
17
|
+
"bug_tracker_uri" => "https://github.com/rails-autoscale/rails-autoscale-gems/issues",
|
18
|
+
"documentation_uri" => "https://railsautoscale.com/docs",
|
19
|
+
"changelog_uri" => "https://github.com/rails-autoscale/rails-autoscale-gems/blob/main/CHANGELOG.md",
|
20
|
+
"source_code_uri" => "https://github.com/rails-autoscale/rails-autoscale-gems"
|
21
|
+
}
|
22
|
+
|
23
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
24
|
+
spec.require_paths = ["lib"]
|
25
|
+
|
26
|
+
spec.required_ruby_version = ">= 2.6.0"
|
27
|
+
|
28
|
+
spec.add_dependency "rails-autoscale-core"
|
29
|
+
spec.add_dependency "resque", ">= 2.0"
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rails-autoscale-resque
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam McCrea
|
8
|
+
- Carlos Antonio da Silva
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2022-09-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails-autoscale-core
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: resque
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '2.0'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '2.0'
|
42
|
+
description:
|
43
|
+
email:
|
44
|
+
- adam@adamlogic.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- Gemfile
|
50
|
+
- Gemfile.lock
|
51
|
+
- Rakefile
|
52
|
+
- lib/rails-autoscale-resque.rb
|
53
|
+
- lib/rails_autoscale/resque.rb
|
54
|
+
- lib/rails_autoscale/resque/latency_extension.rb
|
55
|
+
- lib/rails_autoscale/resque/metrics_collector.rb
|
56
|
+
- lib/rails_autoscale/resque/version.rb
|
57
|
+
- rails-autoscale-resque.gemspec
|
58
|
+
homepage: https://railsautoscale.com
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata:
|
62
|
+
homepage_uri: https://railsautoscale.com
|
63
|
+
bug_tracker_uri: https://github.com/rails-autoscale/rails-autoscale-gems/issues
|
64
|
+
documentation_uri: https://railsautoscale.com/docs
|
65
|
+
changelog_uri: https://github.com/rails-autoscale/rails-autoscale-gems/blob/main/CHANGELOG.md
|
66
|
+
source_code_uri: https://github.com/rails-autoscale/rails-autoscale-gems
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.6.0
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubygems_version: 3.2.32
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: This gem provides Resque integration with the Rails Autoscale autoscaling
|
86
|
+
add-on for Heroku.
|
87
|
+
test_files: []
|