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 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
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "rails-autoscale-core", path: "../rails-autoscale-core"
6
+ gem "activerecord"
7
+ gem "pg"
8
+ gem "minitest"
9
+ gem "rake"
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "rails-autoscale-core", path: "../rails-autoscale-core"
6
+ gem "activerecord", "~> 6.1"
7
+ gem "pg"
8
+ gem "minitest"
9
+ gem "rake"
data/Gemfile-que-2 ADDED
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "rails-autoscale-core", path: "../rails-autoscale-core"
6
+ gem "que", "~> 2.0"
7
+ gem "activerecord"
8
+ gem "pg"
9
+ gem "minitest"
10
+ gem "rake"
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,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "lib"
8
+ t.libs << "test"
9
+ t.test_files = FileList["test/**/*_test.rb"]
10
+ end
11
+
12
+ task default: :test
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_autoscale/que"
@@ -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,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsAutoscale
4
+ module Que
5
+ VERSION = "1.0.0"
6
+ end
7
+ 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: []