judoscale-que 1.0.0.rc1

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: 288ad007c0af7afa58ef656c70bc54fd9878e1af5811391faaac799fb96bf4e0
4
+ data.tar.gz: cdf6fe36d4a113b5f2df7154c197305257d445d84e5e88771418738c63cb5305
5
+ SHA512:
6
+ metadata.gz: 90ef5bf2e2f7acf88075194b54348a9eb06c5a2a42f9323851d298d350e68b08338fc8f933e2072865ba7b616c492370c8e193a2b07a396f7e79b97e9cc0d669
7
+ data.tar.gz: 686d49ff941967522e4a96f6cb4a8fddaf329659e5a7cb8cd76ed7e1df9bab56618a90983e670790ed11172fe84df6d0ab8b0690631829f0db052644ffe1ac38
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "judoscale-ruby", path: "../judoscale-ruby"
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 "judoscale-ruby", path: "../judoscale-ruby"
6
+ gem "activerecord", "~> 6.1"
7
+ gem "pg"
8
+ gem "minitest"
9
+ gem "rake"
@@ -0,0 +1,10 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+
5
+ gem "judoscale-ruby", path: "../judoscale-ruby"
6
+ gem "que", "~> 2.0.0.beta1"
7
+ gem "activerecord"
8
+ gem "pg"
9
+ gem "minitest"
10
+ gem "rake"
data/Gemfile.lock ADDED
@@ -0,0 +1,51 @@
1
+ PATH
2
+ remote: ../judoscale-ruby
3
+ specs:
4
+ judoscale-ruby (1.0.0.rc1)
5
+
6
+ PATH
7
+ remote: .
8
+ specs:
9
+ judoscale-que (1.0.0.rc1)
10
+ judoscale-ruby
11
+ que (>= 1.0)
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 (1.4.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
+ judoscale-que!
45
+ judoscale-ruby!
46
+ minitest
47
+ pg
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,30 @@
1
+ lib = File.expand_path("../lib", __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require "judoscale/que/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "judoscale-que"
7
+ spec.version = Judoscale::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 Judoscale autoscaling add-on for Heroku."
12
+ spec.homepage = "https://judoscale.com"
13
+ spec.license = "MIT"
14
+
15
+ spec.metadata = {
16
+ "homepage_uri" => "https://judoscale.com",
17
+ "bug_tracker_uri" => "https://github.com/judoscale/judoscale-ruby/issues",
18
+ "documentation_uri" => "https://judoscale.com/docs",
19
+ "changelog_uri" => "https://github.com/judoscale/judoscale-ruby/blob/main/CHANGELOG.md",
20
+ "source_code_uri" => "https://github.com/judoscale/judoscale-ruby"
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 "judoscale-ruby"
29
+ spec.add_dependency "que", ">= 1.0"
30
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "judoscale/job_metrics_collector"
4
+ require "judoscale/job_metrics_collector/active_record_helper"
5
+ require "judoscale/metric"
6
+
7
+ module Judoscale
8
+ module Que
9
+ class MetricsCollector < Judoscale::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
+ def self.adapter_identifier
27
+ :que
28
+ end
29
+
30
+ def collect
31
+ metrics = []
32
+ t = Time.now.utc
33
+
34
+ run_at_by_queue = select_rows_silently(METRICS_SQL).to_h
35
+ self.queues |= run_at_by_queue.keys
36
+
37
+ queues.each do |queue|
38
+ run_at = run_at_by_queue[queue]
39
+ run_at = DateTime.parse(run_at) if run_at.is_a?(String)
40
+ latency_ms = run_at ? ((t - run_at) * 1000).ceil : 0
41
+ latency_ms = 0 if latency_ms < 0
42
+
43
+ metrics.push Metric.new(:qt, latency_ms, t, queue)
44
+ end
45
+
46
+ log_collection(metrics)
47
+ metrics
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Judoscale
4
+ module Que
5
+ VERSION = "1.0.0.rc1"
6
+ end
7
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "judoscale-ruby"
4
+ require "judoscale/config"
5
+ require "judoscale/que/version"
6
+ require "judoscale/que/metrics_collector"
7
+ require "que"
8
+
9
+ Judoscale.add_adapter :"judoscale-que", {
10
+ adapter_version: Judoscale::Que::VERSION,
11
+ framework_version: ::Que::VERSION
12
+ }, metrics_collector: Judoscale::Que::MetricsCollector
13
+
14
+ Judoscale::Config.add_adapter_config :que, Judoscale::Config::JobAdapterConfig
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "judoscale/que"
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: judoscale-que
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.rc1
5
+ platform: ruby
6
+ authors:
7
+ - Adam McCrea
8
+ - Carlos Antonio da Silva
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2022-04-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: judoscale-ruby
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-beta
52
+ - Gemfile.lock
53
+ - Rakefile
54
+ - judoscale-que.gemspec
55
+ - lib/judoscale-que.rb
56
+ - lib/judoscale/que.rb
57
+ - lib/judoscale/que/metrics_collector.rb
58
+ - lib/judoscale/que/version.rb
59
+ homepage: https://judoscale.com
60
+ licenses:
61
+ - MIT
62
+ metadata:
63
+ homepage_uri: https://judoscale.com
64
+ bug_tracker_uri: https://github.com/judoscale/judoscale-ruby/issues
65
+ documentation_uri: https://judoscale.com/docs
66
+ changelog_uri: https://github.com/judoscale/judoscale-ruby/blob/main/CHANGELOG.md
67
+ source_code_uri: https://github.com/judoscale/judoscale-ruby
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: 1.3.1
82
+ requirements: []
83
+ rubygems_version: 3.2.32
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: This gem provides Que integration with the Judoscale autoscaling add-on for
87
+ Heroku.
88
+ test_files: []