sidekiq-ecs-scaler 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +10 -0
- data/CHANGELOG.md +5 -0
- data/Dockerfile +4 -9
- data/Gemfile +10 -8
- data/Gemfile.lock +113 -69
- data/README.md +22 -23
- data/Rakefile +11 -4
- data/docker-compose.yml +2 -2
- data/lib/sidekiq-ecs-scaler.rb +1 -39
- data/lib/{sidekiq-ecs-scaler → sidekiq_ecs_scaler}/client.rb +24 -20
- data/lib/{sidekiq-ecs-scaler → sidekiq_ecs_scaler}/configuration.rb +63 -49
- data/lib/{sidekiq-ecs-scaler → sidekiq_ecs_scaler}/task_meta_v4.rb +7 -5
- data/lib/{sidekiq-ecs-scaler → sidekiq_ecs_scaler}/version.rb +1 -1
- data/lib/sidekiq_ecs_scaler.rb +19 -0
- data/rbs_collection.lock.yaml +76 -0
- data/rbs_collection.yaml +17 -0
- data/sidekiq-ecs-scaler.gemspec +2 -2
- data/sig/sidekiq-ecs-scaler.rbs +34 -33
- data/sig-private/uri.rbs +1 -0
- metadata +12 -11
- data/lib/sidekiq-ecs-scaler/worker.rb +0 -13
- data/sig-private/sidekiq.rbs +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61e35b0bdbfd171583e88d98453ff54f2715f4e8b59be4564a40f8f38e015b38
|
4
|
+
data.tar.gz: 9f36a75e28df3bb96a25f874d1d071853c9896732445ff5890129775855ebc32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 766e8fe9659709dea552de8cb0251f26cb14a0741b07e85fed48b6efd5cee3cced89cf018f76e96ddbe2f266f5c283f232e4cbeeab7b2832a9e530495b582f64
|
7
|
+
data.tar.gz: bfe755f5c853c03ba32e8e36af3ac9bc241dddcd2e5e636734c08a2560c00dc6926a9b7a494766c491009088d24ec387821e3a22bb5e7dbe65f3a49a81ae92df
|
data/.rubocop.yml
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-performance
|
3
|
+
- rubocop-rake
|
4
|
+
- rubocop-rspec
|
5
|
+
- rubocop-thread_safety
|
6
|
+
|
1
7
|
AllCops:
|
2
8
|
TargetRubyVersion: 2.6
|
3
9
|
NewCops: enable
|
@@ -18,4 +24,8 @@ Metrics/BlockLength:
|
|
18
24
|
- spec/**/*_spec.rb
|
19
25
|
|
20
26
|
Naming/FileName:
|
27
|
+
Exclude:
|
28
|
+
- lib/sidekiq-ecs-scaler.rb
|
29
|
+
|
30
|
+
RSpec/MultipleMemoizedHelpers:
|
21
31
|
Enabled: false
|
data/CHANGELOG.md
CHANGED
data/Dockerfile
CHANGED
@@ -1,14 +1,9 @@
|
|
1
|
-
FROM ruby:3.
|
1
|
+
FROM ruby:3.2.2
|
2
2
|
|
3
|
-
|
4
|
-
&& apt-get install -y build-essential git \
|
5
|
-
&& apt-get clean \
|
6
|
-
&& rm -rf /var/lib/apt/lists/*
|
3
|
+
WORKDIR /usr/src/gem
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
RUN mkdir -p lib/sidekiq-ecs-scaler \
|
11
|
-
&& echo "module SidekiqEcsScaler\n VERSION = \"0.1.0\"\nend\n" > lib/sidekiq-ecs-scaler/version.rb
|
5
|
+
RUN mkdir -p lib/sidekiq_ecs_scaler \
|
6
|
+
&& echo "module SidekiqEcsScaler\n VERSION = \"0.1.0\"\nend\n" > lib/sidekiq_ecs_scaler/version.rb
|
12
7
|
|
13
8
|
COPY bin/setup ./bin/
|
14
9
|
COPY Gemfile Gemfile.lock sidekiq-ecs-scaler.gemspec .
|
data/Gemfile
CHANGED
@@ -5,11 +5,13 @@ source "https://rubygems.org"
|
|
5
5
|
# Specify your gem's dependencies in sidekiq-ecs-scaler.gemspec
|
6
6
|
gemspec
|
7
7
|
|
8
|
-
gem "rake"
|
9
|
-
gem "rspec"
|
10
|
-
gem "rubocop"
|
11
|
-
gem "rubocop-
|
12
|
-
gem "rubocop-
|
13
|
-
gem "
|
14
|
-
gem "
|
15
|
-
gem "
|
8
|
+
gem "rake", require: false
|
9
|
+
gem "rspec", require: false
|
10
|
+
gem "rubocop", require: false
|
11
|
+
gem "rubocop-performance", require: false
|
12
|
+
gem "rubocop-rake", require: false
|
13
|
+
gem "rubocop-rspec", require: false
|
14
|
+
gem "rubocop-thread_safety", require: false
|
15
|
+
gem "simplecov", require: false
|
16
|
+
gem "steep", require: false
|
17
|
+
gem "yard", require: false
|
data/Gemfile.lock
CHANGED
@@ -1,115 +1,157 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
sidekiq-ecs-scaler (0.
|
4
|
+
sidekiq-ecs-scaler (0.3.0)
|
5
5
|
aws-sdk-ecs (> 1, < 2)
|
6
|
-
sidekiq (> 5, <
|
6
|
+
sidekiq (> 5, < 8)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
|
11
|
+
abbrev (0.1.2)
|
12
|
+
activesupport (7.1.2)
|
13
|
+
base64
|
14
|
+
bigdecimal
|
12
15
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
|
+
connection_pool (>= 2.2.5)
|
17
|
+
drb
|
13
18
|
i18n (>= 1.6, < 2)
|
14
19
|
minitest (>= 5.1)
|
20
|
+
mutex_m
|
15
21
|
tzinfo (~> 2.0)
|
16
|
-
zeitwerk (~> 2.3)
|
17
22
|
ast (2.4.2)
|
18
|
-
aws-eventstream (1.
|
19
|
-
aws-partitions (1.
|
20
|
-
aws-sdk-core (3.
|
21
|
-
aws-eventstream (~> 1, >= 1.0
|
22
|
-
aws-partitions (~> 1, >= 1.
|
23
|
-
aws-sigv4 (~> 1.
|
24
|
-
jmespath (~> 1.
|
25
|
-
aws-sdk-ecs (1.
|
26
|
-
aws-sdk-core (~> 3, >= 3.
|
23
|
+
aws-eventstream (1.3.0)
|
24
|
+
aws-partitions (1.876.0)
|
25
|
+
aws-sdk-core (3.190.1)
|
26
|
+
aws-eventstream (~> 1, >= 1.3.0)
|
27
|
+
aws-partitions (~> 1, >= 1.651.0)
|
28
|
+
aws-sigv4 (~> 1.8)
|
29
|
+
jmespath (~> 1, >= 1.6.1)
|
30
|
+
aws-sdk-ecs (1.135.0)
|
31
|
+
aws-sdk-core (~> 3, >= 3.188.0)
|
27
32
|
aws-sigv4 (~> 1.1)
|
28
|
-
aws-sigv4 (1.
|
33
|
+
aws-sigv4 (1.8.0)
|
29
34
|
aws-eventstream (~> 1, >= 1.0.2)
|
30
|
-
|
31
|
-
|
32
|
-
|
35
|
+
base64 (0.2.0)
|
36
|
+
bigdecimal (3.1.5)
|
37
|
+
concurrent-ruby (1.2.2)
|
38
|
+
connection_pool (2.4.1)
|
39
|
+
csv (3.2.8)
|
40
|
+
diff-lcs (1.5.0)
|
33
41
|
docile (1.4.0)
|
34
|
-
|
35
|
-
|
42
|
+
drb (2.2.0)
|
43
|
+
ruby2_keywords
|
44
|
+
ffi (1.16.3)
|
45
|
+
fileutils (1.7.2)
|
46
|
+
i18n (1.14.1)
|
36
47
|
concurrent-ruby (~> 1.0)
|
37
|
-
jmespath (1.
|
38
|
-
|
39
|
-
|
48
|
+
jmespath (1.6.2)
|
49
|
+
json (2.7.1)
|
50
|
+
language_server-protocol (3.17.0.3)
|
51
|
+
listen (3.8.0)
|
40
52
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
41
53
|
rb-inotify (~> 0.9, >= 0.9.10)
|
42
|
-
|
43
|
-
|
44
|
-
|
54
|
+
logger (1.6.0)
|
55
|
+
minitest (5.20.0)
|
56
|
+
mutex_m (0.2.0)
|
57
|
+
parallel (1.24.0)
|
58
|
+
parser (3.2.2.4)
|
45
59
|
ast (~> 2.4.1)
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
60
|
+
racc
|
61
|
+
racc (1.7.3)
|
62
|
+
rack (3.0.8)
|
63
|
+
rainbow (3.1.1)
|
64
|
+
rake (13.1.0)
|
65
|
+
rb-fsevent (0.11.2)
|
50
66
|
rb-inotify (0.10.1)
|
51
67
|
ffi (~> 1.0)
|
52
|
-
rbs (
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
rspec-
|
60
|
-
|
61
|
-
rspec-
|
62
|
-
rspec-
|
68
|
+
rbs (3.4.1)
|
69
|
+
abbrev
|
70
|
+
redis-client (0.19.1)
|
71
|
+
connection_pool
|
72
|
+
regexp_parser (2.8.3)
|
73
|
+
rexml (3.2.6)
|
74
|
+
rspec (3.12.0)
|
75
|
+
rspec-core (~> 3.12.0)
|
76
|
+
rspec-expectations (~> 3.12.0)
|
77
|
+
rspec-mocks (~> 3.12.0)
|
78
|
+
rspec-core (3.12.2)
|
79
|
+
rspec-support (~> 3.12.0)
|
80
|
+
rspec-expectations (3.12.3)
|
63
81
|
diff-lcs (>= 1.2.0, < 2.0)
|
64
|
-
rspec-support (~> 3.
|
65
|
-
rspec-mocks (3.
|
82
|
+
rspec-support (~> 3.12.0)
|
83
|
+
rspec-mocks (3.12.6)
|
66
84
|
diff-lcs (>= 1.2.0, < 2.0)
|
67
|
-
rspec-support (~> 3.
|
68
|
-
rspec-support (3.
|
69
|
-
rubocop (1.
|
85
|
+
rspec-support (~> 3.12.0)
|
86
|
+
rspec-support (3.12.1)
|
87
|
+
rubocop (1.59.0)
|
88
|
+
json (~> 2.3)
|
89
|
+
language_server-protocol (>= 3.17.0)
|
70
90
|
parallel (~> 1.10)
|
71
|
-
parser (>= 3.
|
91
|
+
parser (>= 3.2.2.4)
|
72
92
|
rainbow (>= 2.2.2, < 4.0)
|
73
93
|
regexp_parser (>= 1.8, < 3.0)
|
74
|
-
rexml
|
75
|
-
rubocop-ast (>= 1.
|
94
|
+
rexml (>= 3.2.5, < 4.0)
|
95
|
+
rubocop-ast (>= 1.30.0, < 2.0)
|
76
96
|
ruby-progressbar (~> 1.7)
|
77
|
-
unicode-display_width (>=
|
78
|
-
rubocop-ast (1.
|
79
|
-
parser (>= 3.
|
97
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
98
|
+
rubocop-ast (1.30.0)
|
99
|
+
parser (>= 3.2.1.0)
|
100
|
+
rubocop-capybara (2.19.0)
|
101
|
+
rubocop (~> 1.41)
|
102
|
+
rubocop-factory_bot (2.24.0)
|
103
|
+
rubocop (~> 1.33)
|
104
|
+
rubocop-performance (1.20.1)
|
105
|
+
rubocop (>= 1.48.1, < 2.0)
|
106
|
+
rubocop-ast (>= 1.30.0, < 2.0)
|
80
107
|
rubocop-rake (0.6.0)
|
81
108
|
rubocop (~> 1.0)
|
82
|
-
rubocop-rspec (2.
|
83
|
-
rubocop (~> 1.
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
109
|
+
rubocop-rspec (2.25.0)
|
110
|
+
rubocop (~> 1.40)
|
111
|
+
rubocop-capybara (~> 2.17)
|
112
|
+
rubocop-factory_bot (~> 2.22)
|
113
|
+
rubocop-thread_safety (0.5.1)
|
114
|
+
rubocop (>= 0.90.0)
|
115
|
+
ruby-progressbar (1.13.0)
|
116
|
+
ruby2_keywords (0.0.5)
|
117
|
+
securerandom (0.3.1)
|
118
|
+
sidekiq (7.2.0)
|
119
|
+
concurrent-ruby (< 2)
|
120
|
+
connection_pool (>= 2.3.0)
|
121
|
+
rack (>= 2.2.4)
|
122
|
+
redis-client (>= 0.14.0)
|
123
|
+
simplecov (0.22.0)
|
90
124
|
docile (~> 1.1)
|
91
125
|
simplecov-html (~> 0.11)
|
92
126
|
simplecov_json_formatter (~> 0.1)
|
93
127
|
simplecov-html (0.12.3)
|
94
|
-
simplecov_json_formatter (0.1.
|
95
|
-
steep (
|
128
|
+
simplecov_json_formatter (0.1.4)
|
129
|
+
steep (1.6.0)
|
96
130
|
activesupport (>= 5.1)
|
131
|
+
concurrent-ruby (>= 1.1.10)
|
132
|
+
csv (>= 3.0.9)
|
133
|
+
fileutils (>= 1.1.0)
|
134
|
+
json (>= 2.1.0)
|
97
135
|
language_server-protocol (>= 3.15, < 4.0)
|
98
136
|
listen (~> 3.0)
|
99
|
-
|
100
|
-
parser (>= 3.
|
137
|
+
logger (>= 1.3.0)
|
138
|
+
parser (>= 3.1)
|
101
139
|
rainbow (>= 2.2.2, < 4.0)
|
102
|
-
rbs (>= 1.
|
140
|
+
rbs (>= 3.1.0)
|
141
|
+
securerandom (>= 0.1)
|
142
|
+
strscan (>= 1.0.0)
|
103
143
|
terminal-table (>= 2, < 4)
|
144
|
+
strscan (3.0.7)
|
104
145
|
terminal-table (3.0.2)
|
105
146
|
unicode-display_width (>= 1.1.1, < 3)
|
106
|
-
tzinfo (2.0.
|
147
|
+
tzinfo (2.0.6)
|
107
148
|
concurrent-ruby (~> 1.0)
|
108
|
-
unicode-display_width (2.
|
109
|
-
yard (0.9.
|
110
|
-
zeitwerk (2.5.1)
|
149
|
+
unicode-display_width (2.5.0)
|
150
|
+
yard (0.9.34)
|
111
151
|
|
112
152
|
PLATFORMS
|
153
|
+
aarch64-linux
|
154
|
+
arm64-darwin-21
|
113
155
|
x86_64-darwin-19
|
114
156
|
x86_64-linux
|
115
157
|
|
@@ -117,12 +159,14 @@ DEPENDENCIES
|
|
117
159
|
rake
|
118
160
|
rspec
|
119
161
|
rubocop
|
162
|
+
rubocop-performance
|
120
163
|
rubocop-rake
|
121
164
|
rubocop-rspec
|
165
|
+
rubocop-thread_safety
|
122
166
|
sidekiq-ecs-scaler!
|
123
167
|
simplecov
|
124
168
|
steep
|
125
169
|
yard
|
126
170
|
|
127
171
|
BUNDLED WITH
|
128
|
-
2.
|
172
|
+
2.4.10
|
data/README.md
CHANGED
@@ -18,34 +18,33 @@ And then execute:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
###
|
21
|
+
### Create Worker Class
|
22
22
|
|
23
23
|
```ruby
|
24
|
-
|
25
|
-
# enable / disable of scaler, default is true
|
26
|
-
config.enabled = true
|
24
|
+
# frozen_string_literal: true
|
27
25
|
|
28
|
-
|
29
|
-
|
26
|
+
class SidekiqEcsScaleWorker
|
27
|
+
include Sidekiq::Worker
|
30
28
|
|
31
|
-
#
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
# maximum latency(seconds), default is 3600
|
41
|
-
config.max_latency = 3600
|
29
|
+
# @return [void]
|
30
|
+
def perform
|
31
|
+
SidekiqEcsScaler::Client.update_desired_count(
|
32
|
+
max_count: 3
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
```
|
42
37
|
|
43
|
-
|
44
|
-
config.ecs_client = Aws::ECS::Client.new
|
38
|
+
Options
|
45
39
|
|
46
|
-
|
47
|
-
|
48
|
-
|
40
|
+
```yaml
|
41
|
+
logger: logger, default is Sidekiq.logger
|
42
|
+
queue_name: queue to monitor latency, default is "default"
|
43
|
+
min_count: minimum number of tasks, default is 1
|
44
|
+
max_count: maximum number of tasks, default is 1
|
45
|
+
step_count: steps number in the desired count range, default is 1
|
46
|
+
max_latency: maximum latency(seconds), default is 3600
|
47
|
+
ecs_client: custom ECS Client, default is Aws::ECS::Client.new
|
49
48
|
```
|
50
49
|
|
51
50
|
### With Sidekiq Scheduler
|
@@ -57,7 +56,7 @@ When using [sidekiq-scheduler](https://github.com/moove-it/sidekiq-scheduler), s
|
|
57
56
|
# example
|
58
57
|
|
59
58
|
:schedule:
|
60
|
-
|
59
|
+
SidekiqEcsScaleWorker:
|
61
60
|
cron: "0 */15 * * * *"
|
62
61
|
# It is safe to set this queue to have a higher priority than the monitored queue.
|
63
62
|
queue: scheduler
|
data/Rakefile
CHANGED
@@ -12,8 +12,11 @@ RuboCop::RakeTask.new(:lint) do |t|
|
|
12
12
|
t.options = %w[--parallel]
|
13
13
|
end
|
14
14
|
namespace :lint do
|
15
|
-
desc "Lint fix (Rubocop)"
|
16
|
-
task fix: :
|
15
|
+
desc "Lint with fix (Rubocop)"
|
16
|
+
task fix: :autocorrect
|
17
|
+
|
18
|
+
desc "Lint with unsafe fix (Rubocop)"
|
19
|
+
task fixall: :autocorrect_all
|
17
20
|
end
|
18
21
|
|
19
22
|
# steep
|
@@ -32,8 +35,12 @@ end
|
|
32
35
|
require "yard"
|
33
36
|
desc "document"
|
34
37
|
task :doc do
|
35
|
-
|
36
|
-
|
38
|
+
io = StringIO.new
|
39
|
+
YARD::Logger.instance(io)
|
40
|
+
YARD::CLI::CommandParser.run(*%w[stats --list-undoc])
|
41
|
+
result = io.tap(&:rewind).read
|
42
|
+
$stdout.puts(result)
|
43
|
+
result.lines(chomp: true).last.strip == "100.00% documented" || exit(1)
|
37
44
|
end
|
38
45
|
|
39
46
|
task default: %i[lint typecheck spec doc]
|
data/docker-compose.yml
CHANGED
data/lib/sidekiq-ecs-scaler.rb
CHANGED
@@ -1,41 +1,3 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
4
|
-
require "uri"
|
5
|
-
require "net/http"
|
6
|
-
require "json"
|
7
|
-
require "sidekiq"
|
8
|
-
require "sidekiq/api"
|
9
|
-
require "aws-sdk-ecs"
|
10
|
-
require_relative "sidekiq-ecs-scaler/version"
|
11
|
-
require_relative "sidekiq-ecs-scaler/task_meta_v4"
|
12
|
-
require_relative "sidekiq-ecs-scaler/configuration"
|
13
|
-
require_relative "sidekiq-ecs-scaler/client"
|
14
|
-
require_relative "sidekiq-ecs-scaler/worker"
|
15
|
-
|
16
|
-
# SidekiqEcsScaler
|
17
|
-
module SidekiqEcsScaler
|
18
|
-
# SidekiqEcsScaler::Error
|
19
|
-
class Error < StandardError; end
|
20
|
-
|
21
|
-
class << self
|
22
|
-
# @return [SidekiqEcsScaler::Configuration]
|
23
|
-
def config
|
24
|
-
@config ||= Configuration.new
|
25
|
-
end
|
26
|
-
|
27
|
-
# @yieldparam config [SidekiqEcsScaler::Configuration]
|
28
|
-
# @yieldreturn [void]
|
29
|
-
# @return [void]
|
30
|
-
def configure
|
31
|
-
raise Error, "No block is given!" unless block_given?
|
32
|
-
|
33
|
-
yield config
|
34
|
-
end
|
35
|
-
|
36
|
-
# @return [SidekiqEcsScaler::Client]
|
37
|
-
def client
|
38
|
-
Client.new(config)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
3
|
+
require "sidekiq_ecs_scaler"
|
@@ -3,16 +3,22 @@
|
|
3
3
|
module SidekiqEcsScaler
|
4
4
|
# SidekiqEcsScaler::Client
|
5
5
|
class Client
|
6
|
+
class << self
|
7
|
+
# @param keywords [Hash]
|
8
|
+
# @return [Integer]
|
9
|
+
def update_desired_count(**keywords)
|
10
|
+
new(SidekiqEcsScaler::Configuration.new(**keywords)).update_desired_count
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
6
14
|
# @param config [SidekiqEcsScaler::Configuration]
|
7
15
|
# @return [void]
|
8
16
|
def initialize(config)
|
9
17
|
@config = config
|
10
18
|
end
|
11
19
|
|
12
|
-
# @return [Integer
|
20
|
+
# @return [Integer]
|
13
21
|
def update_desired_count
|
14
|
-
return if !config.enabled || config.task_meta.nil?
|
15
|
-
|
16
22
|
desired_count = desired_count_by_latency
|
17
23
|
service = describe_service
|
18
24
|
|
@@ -39,26 +45,28 @@ module SidekiqEcsScaler
|
|
39
45
|
|
40
46
|
# @return [Integer]
|
41
47
|
def desired_count_by_latency
|
42
|
-
(
|
43
|
-
|
44
|
-
|
48
|
+
desired_count_list.at((queue_latency.to_f / config.latency_per_step_count).floor.to_i) || config.max_count
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Array<Integer>]
|
52
|
+
def desired_count_list
|
53
|
+
config.min_count.step(config.max_count, config.step_count).to_a
|
45
54
|
end
|
46
55
|
|
47
56
|
# @return [String]
|
48
|
-
def
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
)
|
55
|
-
end
|
57
|
+
def describe_service_name
|
58
|
+
task_meta = config.task_meta
|
59
|
+
task = config.ecs_client.describe_tasks({ cluster: task_meta.cluster, tasks: [task_meta.task_arn] }).tasks.first
|
60
|
+
raise Error, "Task(#{task_meta.task_arn}) does not exist in cluster!" if task.nil?
|
61
|
+
|
62
|
+
task.group.delete_prefix("service:")
|
56
63
|
end
|
57
64
|
|
58
65
|
# @return [Aws::ECS::Types::Service]
|
59
66
|
def describe_service
|
67
|
+
service_name = describe_service_name
|
60
68
|
config.ecs_client.describe_services(
|
61
|
-
{ cluster: config.task_meta
|
69
|
+
{ cluster: config.task_meta.cluster, services: [service_name] }
|
62
70
|
).services.first || (raise Error, "Service(#{service_name}) does not exist in cluster!")
|
63
71
|
end
|
64
72
|
|
@@ -67,11 +75,7 @@ module SidekiqEcsScaler
|
|
67
75
|
# @return [Aws::ECS::Types::UpdateServiceResponse]
|
68
76
|
def update_service(service:, desired_count:)
|
69
77
|
config.ecs_client.update_service(
|
70
|
-
{
|
71
|
-
cluster: service.cluster_arn,
|
72
|
-
service: service.service_name,
|
73
|
-
desired_count: desired_count
|
74
|
-
}
|
78
|
+
{ cluster: service.cluster_arn, service: service.service_name, desired_count: desired_count }
|
75
79
|
)
|
76
80
|
end
|
77
81
|
|
@@ -3,9 +3,6 @@
|
|
3
3
|
module SidekiqEcsScaler
|
4
4
|
# SidekiqEcsScaler::Configuration
|
5
5
|
class Configuration
|
6
|
-
# @!attribute [r] enabled
|
7
|
-
# @return [Boolean]
|
8
|
-
attr_reader :enabled
|
9
6
|
# @!attribute [r] queue_name
|
10
7
|
# @return [String]
|
11
8
|
attr_reader :queue_name
|
@@ -15,36 +12,59 @@ module SidekiqEcsScaler
|
|
15
12
|
# @!attribute [r] max_count
|
16
13
|
# @return [Integer]
|
17
14
|
attr_reader :max_count
|
15
|
+
# @!attribute [r] step_count
|
16
|
+
# @return [Integer]
|
17
|
+
attr_reader :step_count
|
18
18
|
# @!attribute [r] max_latency
|
19
19
|
# @return [Integer]
|
20
20
|
attr_reader :max_latency
|
21
21
|
# @!attribute [r] task_meta
|
22
|
-
# @return [SidekiqEcsScaler::TaskMetaV4
|
22
|
+
# @return [SidekiqEcsScaler::TaskMetaV4]
|
23
23
|
attr_reader :task_meta
|
24
|
+
# @!attribute [r] ecs_client
|
25
|
+
# @return [Aws::Ecs::Client]
|
26
|
+
attr_reader :ecs_client
|
27
|
+
# @!attribute [r] logger
|
28
|
+
# @return [Logger]
|
29
|
+
attr_reader :logger
|
24
30
|
|
31
|
+
# @param queue_name [String]
|
32
|
+
# @param min_count [Integer]
|
33
|
+
# @param max_count [Integer]
|
34
|
+
# @param step_count [Integer]
|
35
|
+
# @param max_latency [Integer]
|
36
|
+
# @param task_meta [SidekiqEcsScaler::TaskMetaV4]
|
37
|
+
# @param ecs_client [Aws::ECS::Client]
|
38
|
+
# @param logger [Logger]
|
25
39
|
# @return [void]
|
26
|
-
def initialize
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
40
|
+
def initialize( # rubocop:disable Metrics/ParameterLists
|
41
|
+
queue_name: "default",
|
42
|
+
min_count: 1,
|
43
|
+
max_count: 1,
|
44
|
+
step_count: 1,
|
45
|
+
max_latency: 3_600,
|
46
|
+
task_meta: TaskMetaV4.build_or_null,
|
47
|
+
ecs_client: Aws::ECS::Client.new,
|
48
|
+
logger: Sidekiq.logger
|
49
|
+
)
|
50
|
+
self.queue_name = queue_name
|
51
|
+
self.min_count = min_count
|
52
|
+
self.max_count = max_count
|
53
|
+
self.step_count = step_count
|
54
|
+
self.max_latency = max_latency
|
55
|
+
self.task_meta = task_meta
|
56
|
+
self.ecs_client = ecs_client
|
57
|
+
self.logger = logger
|
33
58
|
end
|
34
59
|
|
35
|
-
# @
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
@enabled = enabled
|
60
|
+
# @return [Integer]
|
61
|
+
def latency_per_step_count
|
62
|
+
(max_latency / ((1 + max_count - min_count).to_f / step_count).ceil).tap do |value|
|
63
|
+
value.positive? || (raise Error, "latency per count isn't positive!")
|
64
|
+
end
|
42
65
|
end
|
43
66
|
|
44
|
-
|
45
|
-
def logger
|
46
|
-
@logger ||= Sidekiq.logger
|
47
|
-
end
|
67
|
+
private
|
48
68
|
|
49
69
|
# @param logger [Logger]
|
50
70
|
# @return [void]
|
@@ -66,22 +86,30 @@ module SidekiqEcsScaler
|
|
66
86
|
# @return [void]
|
67
87
|
# @raise [ArgumentError]
|
68
88
|
def min_count=(min_count)
|
69
|
-
|
89
|
+
assert_positive_number!(min_count)
|
70
90
|
|
71
91
|
@min_count = min_count
|
72
|
-
@max_count = min_count if min_count > max_count
|
73
92
|
end
|
74
93
|
|
75
94
|
# @param max_count [Integer]
|
76
95
|
# @return [void]
|
77
96
|
# @raise [ArgumentError]
|
78
97
|
def max_count=(max_count)
|
79
|
-
|
98
|
+
assert_positive_number!(max_count)
|
80
99
|
|
81
100
|
@max_count = max_count
|
82
101
|
@min_count = max_count if max_count < min_count
|
83
102
|
end
|
84
103
|
|
104
|
+
# @param step_count [Integer]
|
105
|
+
# @return [void]
|
106
|
+
# @raise [ArgumentError]
|
107
|
+
def step_count=(step_count)
|
108
|
+
assert_positive_number!(step_count)
|
109
|
+
|
110
|
+
@step_count = step_count
|
111
|
+
end
|
112
|
+
|
85
113
|
# @param max_latency [Integer]
|
86
114
|
# @return [void]
|
87
115
|
# @raise [ArgumentError]
|
@@ -91,11 +119,6 @@ module SidekiqEcsScaler
|
|
91
119
|
@max_latency = max_latency
|
92
120
|
end
|
93
121
|
|
94
|
-
# @return [Aws::ECS::Client]
|
95
|
-
def ecs_client
|
96
|
-
@ecs_client ||= Aws::ECS::Client.new
|
97
|
-
end
|
98
|
-
|
99
122
|
# @param ecs_client [Aws::ECS::Client]
|
100
123
|
# @return [void]
|
101
124
|
# @raise [ArgumentError]
|
@@ -105,29 +128,20 @@ module SidekiqEcsScaler
|
|
105
128
|
@ecs_client = ecs_client
|
106
129
|
end
|
107
130
|
|
108
|
-
# @
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
end
|
114
|
-
|
115
|
-
# @return [SidekiqEcsScaler::TaskMetaV4]
|
116
|
-
def task_meta!
|
117
|
-
task_meta || (raise Error, "task metadata is null!")
|
118
|
-
end
|
131
|
+
# @param task_meta [SidekiqEcsScaler::TaskMetaV4]
|
132
|
+
# @return [void]
|
133
|
+
# @raise [ArgumentError]
|
134
|
+
def task_meta=(task_meta)
|
135
|
+
raise ArgumentError unless task_meta.is_a?(SidekiqEcsScaler::TaskMetaV4)
|
119
136
|
|
120
|
-
|
121
|
-
def sidekiq_options
|
122
|
-
::SidekiqEcsScaler::Worker.sidekiq_options
|
137
|
+
@task_meta = task_meta
|
123
138
|
end
|
124
139
|
|
125
|
-
# @param
|
140
|
+
# @param number [Integer]
|
126
141
|
# @return [void]
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
::SidekiqEcsScaler::Worker.sidekiq_options(sidekiq_options)
|
142
|
+
# @raise [ArgumentError]
|
143
|
+
def assert_positive_number!(number)
|
144
|
+
raise ArgumentError unless number.positive?
|
131
145
|
end
|
132
146
|
end
|
133
147
|
end
|
@@ -11,7 +11,8 @@ module SidekiqEcsScaler
|
|
11
11
|
# @return [SidekiqEcsScaler::TaskMetaV4, nil]
|
12
12
|
def build_or_null
|
13
13
|
ENV.fetch("ECS_CONTAINER_METADATA_URI_V4", nil)&.then do |uri|
|
14
|
-
|
14
|
+
resp = JSON.parse(Net::HTTP.get(URI.parse("#{uri}/task")))
|
15
|
+
new(cluster: resp.fetch("Cluster"), task_arn: resp.fetch("TaskARN"))
|
15
16
|
end
|
16
17
|
rescue StandardError
|
17
18
|
nil
|
@@ -25,11 +26,12 @@ module SidekiqEcsScaler
|
|
25
26
|
# @return [String]
|
26
27
|
attr_reader :task_arn
|
27
28
|
|
28
|
-
# @param
|
29
|
+
# @param cluster [String]
|
30
|
+
# @param task_arn [String]
|
29
31
|
# @return [void]
|
30
|
-
def initialize(
|
31
|
-
@cluster =
|
32
|
-
@task_arn =
|
32
|
+
def initialize(cluster:, task_arn:)
|
33
|
+
@cluster = cluster
|
34
|
+
@task_arn = task_arn
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "logger"
|
4
|
+
require "uri"
|
5
|
+
require "net/http"
|
6
|
+
require "json"
|
7
|
+
require "sidekiq"
|
8
|
+
require "sidekiq/api"
|
9
|
+
require "aws-sdk-ecs"
|
10
|
+
require_relative "sidekiq_ecs_scaler/version"
|
11
|
+
require_relative "sidekiq_ecs_scaler/task_meta_v4"
|
12
|
+
require_relative "sidekiq_ecs_scaler/configuration"
|
13
|
+
require_relative "sidekiq_ecs_scaler/client"
|
14
|
+
|
15
|
+
# SidekiqEcsScaler
|
16
|
+
module SidekiqEcsScaler
|
17
|
+
# SidekiqEcsScaler::Error
|
18
|
+
class Error < StandardError; end
|
19
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
---
|
2
|
+
path: ".gem_rbs_collection"
|
3
|
+
gems:
|
4
|
+
- name: aws-sdk-core
|
5
|
+
version: '3'
|
6
|
+
source:
|
7
|
+
type: git
|
8
|
+
name: ruby/gem_rbs_collection
|
9
|
+
revision: 13ae8cd19056d62358a9d4836106b8b31219fc1e
|
10
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
11
|
+
repo_dir: gems
|
12
|
+
- name: cgi
|
13
|
+
version: '0'
|
14
|
+
source:
|
15
|
+
type: stdlib
|
16
|
+
- name: concurrent-ruby
|
17
|
+
version: '1.1'
|
18
|
+
source:
|
19
|
+
type: git
|
20
|
+
name: ruby/gem_rbs_collection
|
21
|
+
revision: 13ae8cd19056d62358a9d4836106b8b31219fc1e
|
22
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
23
|
+
repo_dir: gems
|
24
|
+
- name: connection_pool
|
25
|
+
version: '2.4'
|
26
|
+
source:
|
27
|
+
type: git
|
28
|
+
name: ruby/gem_rbs_collection
|
29
|
+
revision: 13ae8cd19056d62358a9d4836106b8b31219fc1e
|
30
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
31
|
+
repo_dir: gems
|
32
|
+
- name: logger
|
33
|
+
version: '0'
|
34
|
+
source:
|
35
|
+
type: stdlib
|
36
|
+
- name: monitor
|
37
|
+
version: '0'
|
38
|
+
source:
|
39
|
+
type: stdlib
|
40
|
+
- name: rack
|
41
|
+
version: '2.2'
|
42
|
+
source:
|
43
|
+
type: git
|
44
|
+
name: ruby/gem_rbs_collection
|
45
|
+
revision: 13ae8cd19056d62358a9d4836106b8b31219fc1e
|
46
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
47
|
+
repo_dir: gems
|
48
|
+
- name: redis
|
49
|
+
version: '4.2'
|
50
|
+
source:
|
51
|
+
type: git
|
52
|
+
name: ruby/gem_rbs_collection
|
53
|
+
revision: 13ae8cd19056d62358a9d4836106b8b31219fc1e
|
54
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
55
|
+
repo_dir: gems
|
56
|
+
- name: sidekiq
|
57
|
+
version: '6.3'
|
58
|
+
source:
|
59
|
+
type: git
|
60
|
+
name: ruby/gem_rbs_collection
|
61
|
+
revision: 13ae8cd19056d62358a9d4836106b8b31219fc1e
|
62
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
63
|
+
repo_dir: gems
|
64
|
+
- name: tempfile
|
65
|
+
version: '0'
|
66
|
+
source:
|
67
|
+
type: stdlib
|
68
|
+
- name: timeout
|
69
|
+
version: '0'
|
70
|
+
source:
|
71
|
+
type: stdlib
|
72
|
+
- name: uri
|
73
|
+
version: '0'
|
74
|
+
source:
|
75
|
+
type: stdlib
|
76
|
+
gemfile_lock_path: Gemfile.lock
|
data/rbs_collection.yaml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Download sources
|
2
|
+
sources:
|
3
|
+
- type: git
|
4
|
+
name: ruby/gem_rbs_collection
|
5
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
6
|
+
revision: main
|
7
|
+
repo_dir: gems
|
8
|
+
|
9
|
+
# You can specify local directories as sources also.
|
10
|
+
# - type: local
|
11
|
+
# path: path/to/your/local/repository
|
12
|
+
|
13
|
+
# A directory to install the downloaded RBSs
|
14
|
+
path: .gem_rbs_collection
|
15
|
+
|
16
|
+
gems:
|
17
|
+
- name: redis
|
data/sidekiq-ecs-scaler.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "lib/
|
3
|
+
require_relative "lib/sidekiq_ecs_scaler/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "sidekiq-ecs-scaler"
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.require_paths = ["lib"]
|
31
31
|
|
32
32
|
spec.add_dependency "aws-sdk-ecs", "> 1", "< 2"
|
33
|
-
spec.add_dependency "sidekiq", "> 5", "<
|
33
|
+
spec.add_dependency "sidekiq", "> 5", "< 8"
|
34
34
|
|
35
35
|
# For more information and examples about making a new gem, checkout our
|
36
36
|
# guide at: https://bundler.io/guides/creating_gem.html
|
data/sig/sidekiq-ecs-scaler.rbs
CHANGED
@@ -4,16 +4,12 @@ module SidekiqEcsScaler
|
|
4
4
|
class Error < StandardError
|
5
5
|
end
|
6
6
|
|
7
|
-
def self.config: () -> ::SidekiqEcsScaler::Configuration
|
8
|
-
|
9
|
-
def self.configure: () { (::SidekiqEcsScaler::Configuration) -> void } -> void
|
10
|
-
|
11
|
-
def self.client: () -> ::SidekiqEcsScaler::Client
|
12
|
-
|
13
7
|
class Client
|
8
|
+
def self.update_desired_count: (**untyped) -> ::Integer
|
9
|
+
|
14
10
|
def initialize: (::SidekiqEcsScaler::Configuration) -> void
|
15
11
|
|
16
|
-
def update_desired_count: () -> ::Integer
|
12
|
+
def update_desired_count: () -> ::Integer
|
17
13
|
|
18
14
|
private
|
19
15
|
|
@@ -23,7 +19,9 @@ module SidekiqEcsScaler
|
|
23
19
|
|
24
20
|
def desired_count_by_latency: () -> ::Integer
|
25
21
|
|
26
|
-
def
|
22
|
+
def desired_count_list: () -> ::Array[::Integer]
|
23
|
+
|
24
|
+
def describe_service_name: () -> ::String
|
27
25
|
|
28
26
|
def describe_service: () -> ::Aws::ECS::Types::Service
|
29
27
|
|
@@ -35,43 +33,54 @@ module SidekiqEcsScaler
|
|
35
33
|
end
|
36
34
|
|
37
35
|
class Configuration
|
38
|
-
attr_reader
|
39
|
-
|
40
|
-
attr_accessor queue_name: ::String
|
36
|
+
attr_reader queue_name: ::String
|
41
37
|
|
42
38
|
attr_reader min_count: ::Integer
|
43
39
|
|
44
40
|
attr_reader max_count: ::Integer
|
45
41
|
|
42
|
+
attr_reader step_count: ::Integer
|
43
|
+
|
46
44
|
attr_reader max_latency: ::Integer
|
47
45
|
|
48
|
-
attr_reader task_meta: ::SidekiqEcsScaler::TaskMetaV4
|
46
|
+
attr_reader task_meta: ::SidekiqEcsScaler::TaskMetaV4
|
47
|
+
|
48
|
+
attr_reader logger: ::Logger
|
49
|
+
|
50
|
+
attr_reader ecs_client: ::Aws::ECS::Client
|
49
51
|
|
50
|
-
def initialize: (
|
52
|
+
def initialize: (
|
53
|
+
?queue_name: ::String,
|
54
|
+
?min_count: ::Integer,
|
55
|
+
?max_count: ::Integer,
|
56
|
+
?step_count: ::Integer,
|
57
|
+
?max_latency: ::Integer,
|
58
|
+
?task_meta: ::SidekiqEcsScaler::TaskMetaV4,
|
59
|
+
?ecs_client: ::Aws::ECS::Client,
|
60
|
+
?logger: ::Logger
|
61
|
+
) -> void
|
51
62
|
|
52
|
-
def
|
63
|
+
def latency_per_step_count: () -> ::Integer
|
64
|
+
|
65
|
+
private
|
53
66
|
|
54
|
-
def
|
67
|
+
def assert_positive_number!: (::Integer) -> void
|
55
68
|
|
56
69
|
def logger=: (::Logger) -> void
|
57
70
|
|
71
|
+
def queue_name=: (::String) -> void
|
72
|
+
|
58
73
|
def min_count=: (::Integer) -> void
|
59
74
|
|
60
75
|
def max_count=: (::Integer) -> void
|
61
76
|
|
77
|
+
def step_count=: (::Integer) -> void
|
78
|
+
|
62
79
|
def max_latency=: (::Integer) -> void
|
63
80
|
|
64
|
-
def
|
81
|
+
def task_meta=: (::SidekiqEcsScaler::TaskMetaV4) -> void
|
65
82
|
|
66
83
|
def ecs_client=: (::Aws::ECS::Client) -> void
|
67
|
-
|
68
|
-
def latency_per_count: () -> ::Integer
|
69
|
-
|
70
|
-
def task_meta!: () -> ::SidekiqEcsScaler::TaskMetaV4
|
71
|
-
|
72
|
-
def sidekiq_options: () -> ::Hash[untyped, untyped]
|
73
|
-
|
74
|
-
def sidekiq_options=: (::Hash[untyped, untyped]) -> void
|
75
84
|
end
|
76
85
|
|
77
86
|
class TaskMetaV4
|
@@ -81,14 +90,6 @@ module SidekiqEcsScaler
|
|
81
90
|
|
82
91
|
attr_reader task_arn: ::String
|
83
92
|
|
84
|
-
def initialize: (::
|
85
|
-
end
|
86
|
-
|
87
|
-
class Worker
|
88
|
-
include ::Sidekiq::Worker
|
89
|
-
|
90
|
-
def self.sidekiq_options: (?::Hash[untyped, untyped]) -> ::Hash[untyped, untyped]
|
91
|
-
|
92
|
-
def perform: () -> ::Integer?
|
93
|
+
def initialize: (cluster: ::String, task_arn: ::String) -> void
|
93
94
|
end
|
94
95
|
end
|
data/sig-private/uri.rbs
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-ecs-scaler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- shoma07
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-ecs
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
version: '5'
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '
|
42
|
+
version: '8'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,7 +49,7 @@ dependencies:
|
|
49
49
|
version: '5'
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '
|
52
|
+
version: '8'
|
53
53
|
description: auto scaler of sidekiq worker deploymented to aws ecs
|
54
54
|
email:
|
55
55
|
- 23730734+shoma07@users.noreply.github.com
|
@@ -74,15 +74,16 @@ files:
|
|
74
74
|
- docker-compose.yml
|
75
75
|
- exe/sidekiq-ecs-scaler
|
76
76
|
- lib/sidekiq-ecs-scaler.rb
|
77
|
-
- lib/
|
78
|
-
- lib/
|
79
|
-
- lib/
|
80
|
-
- lib/
|
81
|
-
- lib/
|
77
|
+
- lib/sidekiq_ecs_scaler.rb
|
78
|
+
- lib/sidekiq_ecs_scaler/client.rb
|
79
|
+
- lib/sidekiq_ecs_scaler/configuration.rb
|
80
|
+
- lib/sidekiq_ecs_scaler/task_meta_v4.rb
|
81
|
+
- lib/sidekiq_ecs_scaler/version.rb
|
82
|
+
- rbs_collection.lock.yaml
|
83
|
+
- rbs_collection.yaml
|
82
84
|
- sidekiq-ecs-scaler.gemspec
|
83
85
|
- sig-private/aws-sdk-ecs.rbs
|
84
86
|
- sig-private/net/http.rbs
|
85
|
-
- sig-private/sidekiq.rbs
|
86
87
|
- sig-private/uri.rbs
|
87
88
|
- sig/sidekiq-ecs-scaler.rbs
|
88
89
|
homepage: https://github.com/shoma07/sidekiq-ecs-scaler
|
@@ -105,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
106
|
- !ruby/object:Gem::Version
|
106
107
|
version: '0'
|
107
108
|
requirements: []
|
108
|
-
rubygems_version: 3.
|
109
|
+
rubygems_version: 3.4.10
|
109
110
|
signing_key:
|
110
111
|
specification_version: 4
|
111
112
|
summary: auto scaler of sidekiq worker deploymented to aws ecs
|
data/sig-private/sidekiq.rbs
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
module Sidekiq
|
2
|
-
def self.logger: () -> ::Logger
|
3
|
-
|
4
|
-
module Worker
|
5
|
-
def self.sidekiq_options: (?::Hash[untyped, untyped]) -> ::Hash[untyped, untyped]
|
6
|
-
end
|
7
|
-
|
8
|
-
class Queue
|
9
|
-
def initialize: (::String) -> void
|
10
|
-
|
11
|
-
def latency: () -> ::Float
|
12
|
-
end
|
13
|
-
end
|