rails-autoscale-que 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 +9 -0
- data/Gemfile-activerecord-6-1 +9 -0
- data/Gemfile-que-2 +10 -0
- data/Gemfile.lock +51 -0
- data/Rakefile +12 -0
- data/lib/rails-autoscale-que.rb +3 -0
- data/lib/rails_autoscale/que/metrics_collector.rb +72 -0
- data/lib/rails_autoscale/que/version.rb +7 -0
- data/lib/rails_autoscale/que.rb +15 -0
- data/rails-autoscale-que.gemspec +30 -0
- metadata +88 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 57410eff735f94373500e21b9e1b55ce155dbeb03155460b03326ade5ce04b57
|
|
4
|
+
data.tar.gz: f6715f1bd160599e09eeac957f1e8ff681a5391a6a69add67f341a0c79fc275b
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 89558bf5ed73b2cda9ad77fdf571f9fdc49241e0cc0d6563f27c94bec3d88ec0541c1d937703c9bb3ec1d522e3792ded667f01089f469e25eba4d31b24451001
|
|
7
|
+
data.tar.gz: ab01410ef51da80f38ace67d77656d56ac12eaaa81aa9d0f5ef785596dc71492c99c08e939f9a172043e3fc7b36ded723641b6559b87d2cbc7bc17577de7a4b3
|
data/Gemfile
ADDED
data/Gemfile-que-2
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
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-que (1.0.0)
|
|
10
|
+
que (>= 1.0)
|
|
11
|
+
rails-autoscale-core
|
|
12
|
+
|
|
13
|
+
GEM
|
|
14
|
+
remote: https://rubygems.org/
|
|
15
|
+
specs:
|
|
16
|
+
activemodel (7.0.2.3)
|
|
17
|
+
activesupport (= 7.0.2.3)
|
|
18
|
+
activerecord (7.0.2.3)
|
|
19
|
+
activemodel (= 7.0.2.3)
|
|
20
|
+
activesupport (= 7.0.2.3)
|
|
21
|
+
activesupport (7.0.2.3)
|
|
22
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
23
|
+
i18n (>= 1.6, < 2)
|
|
24
|
+
minitest (>= 5.1)
|
|
25
|
+
tzinfo (~> 2.0)
|
|
26
|
+
concurrent-ruby (1.1.10)
|
|
27
|
+
i18n (1.10.0)
|
|
28
|
+
concurrent-ruby (~> 1.0)
|
|
29
|
+
minitest (5.15.0)
|
|
30
|
+
pg (1.3.5)
|
|
31
|
+
que (2.2.0)
|
|
32
|
+
rake (13.0.6)
|
|
33
|
+
tzinfo (2.0.4)
|
|
34
|
+
concurrent-ruby (~> 1.0)
|
|
35
|
+
|
|
36
|
+
PLATFORMS
|
|
37
|
+
arm64-darwin-20
|
|
38
|
+
arm64-darwin-21
|
|
39
|
+
x86_64-darwin-21
|
|
40
|
+
x86_64-linux
|
|
41
|
+
|
|
42
|
+
DEPENDENCIES
|
|
43
|
+
activerecord
|
|
44
|
+
minitest
|
|
45
|
+
pg
|
|
46
|
+
rails-autoscale-core!
|
|
47
|
+
rails-autoscale-que!
|
|
48
|
+
rake
|
|
49
|
+
|
|
50
|
+
BUNDLED WITH
|
|
51
|
+
2.3.9
|
data/Rakefile
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails_autoscale/job_metrics_collector"
|
|
4
|
+
require "rails_autoscale/job_metrics_collector/active_record_helper"
|
|
5
|
+
require "rails_autoscale/metric"
|
|
6
|
+
|
|
7
|
+
module RailsAutoscale
|
|
8
|
+
module Que
|
|
9
|
+
class MetricsCollector < RailsAutoscale::JobMetricsCollector
|
|
10
|
+
include ActiveRecordHelper
|
|
11
|
+
|
|
12
|
+
METRICS_SQL = ActiveRecordHelper.cleanse_sql(<<~SQL)
|
|
13
|
+
SELECT queue, min(run_at)
|
|
14
|
+
FROM que_jobs
|
|
15
|
+
WHERE finished_at IS NULL
|
|
16
|
+
AND expired_at IS NULL
|
|
17
|
+
AND error_count = 0
|
|
18
|
+
AND id NOT IN (
|
|
19
|
+
SELECT (classid::bigint << 32) + objid::bigint AS id
|
|
20
|
+
FROM pg_locks
|
|
21
|
+
WHERE locktype = 'advisory'
|
|
22
|
+
)
|
|
23
|
+
GROUP BY 1
|
|
24
|
+
SQL
|
|
25
|
+
|
|
26
|
+
BUSY_METRICS_SQL = ActiveRecordHelper.cleanse_sql(<<~SQL)
|
|
27
|
+
SELECT queue, count(*)
|
|
28
|
+
FROM que_jobs
|
|
29
|
+
WHERE id IN (
|
|
30
|
+
SELECT (classid::bigint << 32) + objid::bigint AS id
|
|
31
|
+
FROM pg_locks
|
|
32
|
+
WHERE locktype = 'advisory'
|
|
33
|
+
)
|
|
34
|
+
GROUP BY 1
|
|
35
|
+
SQL
|
|
36
|
+
|
|
37
|
+
def self.adapter_config
|
|
38
|
+
RailsAutoscale::Config.instance.que
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def collect
|
|
42
|
+
metrics = []
|
|
43
|
+
t = Time.now.utc
|
|
44
|
+
|
|
45
|
+
run_at_by_queue = select_rows_silently(METRICS_SQL).to_h
|
|
46
|
+
self.queues |= run_at_by_queue.keys
|
|
47
|
+
|
|
48
|
+
if track_busy_jobs?
|
|
49
|
+
busy_count_by_queue = select_rows_silently(BUSY_METRICS_SQL).to_h
|
|
50
|
+
self.queues |= busy_count_by_queue.keys
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
queues.each do |queue|
|
|
54
|
+
run_at = run_at_by_queue[queue]
|
|
55
|
+
run_at = DateTime.parse(run_at) if run_at.is_a?(String)
|
|
56
|
+
latency_ms = run_at ? ((t - run_at) * 1000).ceil : 0
|
|
57
|
+
latency_ms = 0 if latency_ms < 0
|
|
58
|
+
|
|
59
|
+
metrics.push Metric.new(:qt, latency_ms, t, queue)
|
|
60
|
+
|
|
61
|
+
if track_busy_jobs?
|
|
62
|
+
busy_count = busy_count_by_queue[queue] || 0
|
|
63
|
+
metrics.push Metric.new(:busy, busy_count, Time.now, queue)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
log_collection(metrics)
|
|
68
|
+
metrics
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rails-autoscale-core"
|
|
4
|
+
require "rails_autoscale/config"
|
|
5
|
+
require "rails_autoscale/que/version"
|
|
6
|
+
require "rails_autoscale/que/metrics_collector"
|
|
7
|
+
require "que"
|
|
8
|
+
|
|
9
|
+
RailsAutoscale.add_adapter :"rails-autoscale-que",
|
|
10
|
+
{
|
|
11
|
+
adapter_version: RailsAutoscale::Que::VERSION,
|
|
12
|
+
framework_version: ::Que::VERSION
|
|
13
|
+
},
|
|
14
|
+
metrics_collector: RailsAutoscale::Que::MetricsCollector,
|
|
15
|
+
expose_config: RailsAutoscale::Config::JobAdapterConfig.new(:que)
|
|
@@ -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/que/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = "rails-autoscale-que"
|
|
7
|
+
spec.version = RailsAutoscale::Que::VERSION
|
|
8
|
+
spec.authors = ["Adam McCrea", "Carlos Antonio da Silva"]
|
|
9
|
+
spec.email = ["adam@adamlogic.com"]
|
|
10
|
+
|
|
11
|
+
spec.summary = "This gem provides Que 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 "que", ">= 1.0"
|
|
30
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: rails-autoscale-que
|
|
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: que
|
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - ">="
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '1.0'
|
|
35
|
+
type: :runtime
|
|
36
|
+
prerelease: false
|
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - ">="
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '1.0'
|
|
42
|
+
description:
|
|
43
|
+
email:
|
|
44
|
+
- adam@adamlogic.com
|
|
45
|
+
executables: []
|
|
46
|
+
extensions: []
|
|
47
|
+
extra_rdoc_files: []
|
|
48
|
+
files:
|
|
49
|
+
- Gemfile
|
|
50
|
+
- Gemfile-activerecord-6-1
|
|
51
|
+
- Gemfile-que-2
|
|
52
|
+
- Gemfile.lock
|
|
53
|
+
- Rakefile
|
|
54
|
+
- lib/rails-autoscale-que.rb
|
|
55
|
+
- lib/rails_autoscale/que.rb
|
|
56
|
+
- lib/rails_autoscale/que/metrics_collector.rb
|
|
57
|
+
- lib/rails_autoscale/que/version.rb
|
|
58
|
+
- rails-autoscale-que.gemspec
|
|
59
|
+
homepage: https://railsautoscale.com
|
|
60
|
+
licenses:
|
|
61
|
+
- MIT
|
|
62
|
+
metadata:
|
|
63
|
+
homepage_uri: https://railsautoscale.com
|
|
64
|
+
bug_tracker_uri: https://github.com/rails-autoscale/rails-autoscale-gems/issues
|
|
65
|
+
documentation_uri: https://railsautoscale.com/docs
|
|
66
|
+
changelog_uri: https://github.com/rails-autoscale/rails-autoscale-gems/blob/main/CHANGELOG.md
|
|
67
|
+
source_code_uri: https://github.com/rails-autoscale/rails-autoscale-gems
|
|
68
|
+
post_install_message:
|
|
69
|
+
rdoc_options: []
|
|
70
|
+
require_paths:
|
|
71
|
+
- lib
|
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - ">="
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: 2.6.0
|
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
82
|
+
requirements: []
|
|
83
|
+
rubygems_version: 3.2.32
|
|
84
|
+
signing_key:
|
|
85
|
+
specification_version: 4
|
|
86
|
+
summary: This gem provides Que integration with the Rails Autoscale autoscaling add-on
|
|
87
|
+
for Heroku.
|
|
88
|
+
test_files: []
|