inst-jobs-autoscaling 1.0.1 → 2.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 +5 -5
- data/Dockerfile +8 -9
- data/Jenkinsfile +18 -0
- data/build.sh +2 -2
- data/inst-jobs-autoscaling.gemspec +4 -4
- data/lib/jobs_autoscaling.rb +0 -2
- data/lib/jobs_autoscaling/aws_action.rb +4 -2
- data/lib/jobs_autoscaling/monitor.rb +25 -9
- data/lib/jobs_autoscaling/version.rb +1 -1
- metadata +25 -21
- data/docker-compose.yml +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9f10b3037ff7449363423319ede4c85a5fca600551699019b90a6decf592899c
|
4
|
+
data.tar.gz: 6e561bff7304d8877f797a0d524b8541f44bf9d03f29b7b19283ed30132ef807
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1854117c823ead59d8a4bb74c0ca19ce3704cace2df87896c76efa8fd1c776a114ca246f8dcca7b7f707e494bad76d12f52e02b3dd89760a95fc3b69a382aff
|
7
|
+
data.tar.gz: 453d524f3b2ad0c1b8a0d81d5e0db70e42c6ba55fdfee84db5164b53aa74302d42a40f84c1ad3340768480d3cb642725b3f7f68e0c2479c4bd2737653175baf4
|
data/Dockerfile
CHANGED
@@ -1,11 +1,10 @@
|
|
1
|
-
FROM instructure/ruby:2.
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
RUN bundle install
|
7
|
-
|
8
|
-
|
9
|
-
USER docker
|
1
|
+
FROM instructure/ruby:2.6
|
2
|
+
|
3
|
+
COPY --chown=docker:docker Gemfile* *.gemspec /usr/src/app/
|
4
|
+
COPY --chown=docker:docker lib/jobs_autoscaling/version.rb /usr/src/app/lib/jobs_autoscaling/
|
5
|
+
|
6
|
+
RUN bundle install -j 4
|
7
|
+
|
8
|
+
COPY --chown=docker:docker . /usr/src/app/
|
10
9
|
|
11
10
|
CMD ["rake"]
|
data/Jenkinsfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#! /usr/bin/env groovy
|
2
|
+
|
3
|
+
pipeline {
|
4
|
+
agent { label 'docker' }
|
5
|
+
|
6
|
+
stages {
|
7
|
+
stage('Build') {
|
8
|
+
steps {
|
9
|
+
sh 'docker build -t inst-jobs-autoscaling .'
|
10
|
+
}
|
11
|
+
}
|
12
|
+
stage('Test') {
|
13
|
+
steps {
|
14
|
+
sh 'docker run --rm inst-jobs-autoscaling'
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
data/build.sh
CHANGED
@@ -18,11 +18,11 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "inst-jobs", "
|
22
|
-
spec.add_dependency "aws-sdk"
|
21
|
+
spec.add_dependency "inst-jobs", "~> 1.0"
|
22
|
+
spec.add_dependency "aws-sdk-autoscaling"
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler", "
|
25
|
-
spec.add_development_dependency "rake", "~>
|
24
|
+
spec.add_development_dependency "bundler", "> 1.11", "< 3"
|
25
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
26
26
|
spec.add_development_dependency "pry"
|
27
27
|
spec.add_development_dependency "rspec", "~> 3.4.0"
|
28
28
|
end
|
data/lib/jobs_autoscaling.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'aws-sdk-autoscaling'
|
1
2
|
require 'net/http'
|
2
3
|
require 'uri'
|
3
4
|
|
@@ -5,9 +6,10 @@ module JobsAutoscaling
|
|
5
6
|
class AwsAction
|
6
7
|
attr_reader :asg_name, :client
|
7
8
|
|
8
|
-
def initialize(asg_name:)
|
9
|
+
def initialize(asg_name:, aws_config: {}, instance_id: nil)
|
9
10
|
@asg_name = asg_name
|
10
|
-
@client = Aws::AutoScaling::Client.new(retry_limit: 10)
|
11
|
+
@client = Aws::AutoScaling::Client.new(aws_config.reverse_merge(retry_limit: 10))
|
12
|
+
@instance_id = instance_id
|
11
13
|
end
|
12
14
|
|
13
15
|
def idle
|
@@ -5,23 +5,37 @@ module JobsAutoscaling
|
|
5
5
|
IDLE = :idle
|
6
6
|
BUSY = :busy
|
7
7
|
|
8
|
-
def initialize(action:
|
9
|
-
@
|
8
|
+
def initialize(action: )
|
9
|
+
@actions = Array(action)
|
10
10
|
end
|
11
11
|
|
12
12
|
def activate!
|
13
|
-
Delayed::Worker.lifecycle.after(:
|
14
|
-
|
13
|
+
Delayed::Worker.lifecycle.after(:check_for_work, &method(:check_for_work))
|
14
|
+
load_preexisting_jobs
|
15
|
+
change_state(preexisting_jobs_running? ? BUSY : IDLE)
|
15
16
|
end
|
16
17
|
|
17
18
|
protected
|
18
19
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
20
|
+
def load_preexisting_jobs
|
21
|
+
@process_mtime_map = {}
|
22
|
+
Delayed::Job.processes_locked_locally.each do |pid|
|
23
|
+
mtime = Delayed::Worker::ProcessHelper.mtime(pid)
|
24
|
+
@process_mtime_map[pid] = mtime if mtime
|
22
25
|
end
|
26
|
+
end
|
23
27
|
|
24
|
-
|
28
|
+
def preexisting_jobs_running?
|
29
|
+
@process_mtime_map.each do |pid, mtime|
|
30
|
+
unless Delayed::Worker::ProcessHelper.process_is_still_running?(pid, mtime)
|
31
|
+
@process_mtime_map.delete(pid)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
@process_mtime_map.any?
|
35
|
+
end
|
36
|
+
|
37
|
+
def check_for_work(work_queue)
|
38
|
+
new_state = work_queue.all_workers_idle? && !preexisting_jobs_running? ? IDLE : BUSY
|
25
39
|
if new_state != @worker_state
|
26
40
|
change_state(new_state)
|
27
41
|
end
|
@@ -29,7 +43,9 @@ module JobsAutoscaling
|
|
29
43
|
|
30
44
|
def change_state(new_state)
|
31
45
|
@worker_state = new_state
|
32
|
-
@action
|
46
|
+
@actions.each do |action|
|
47
|
+
action.public_send(new_state)
|
48
|
+
end
|
33
49
|
end
|
34
50
|
end
|
35
51
|
end
|
metadata
CHANGED
@@ -1,71 +1,77 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inst-jobs-autoscaling
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Palmer
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inst-jobs
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '1.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: aws-sdk
|
28
|
+
name: aws-sdk-autoscaling
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.11'
|
48
|
+
- - "<"
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: '3'
|
48
51
|
type: :development
|
49
52
|
prerelease: false
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
51
54
|
requirements:
|
52
|
-
- - "
|
55
|
+
- - ">"
|
53
56
|
- !ruby/object:Gem::Version
|
54
57
|
version: '1.11'
|
58
|
+
- - "<"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '3'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: rake
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
65
|
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
67
|
+
version: '13.0'
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
72
|
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
74
|
+
version: '13.0'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: pry
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,7 +100,7 @@ dependencies:
|
|
94
100
|
- - "~>"
|
95
101
|
- !ruby/object:Gem::Version
|
96
102
|
version: 3.4.0
|
97
|
-
description:
|
103
|
+
description:
|
98
104
|
email:
|
99
105
|
- brianp@instructure.com
|
100
106
|
executables: []
|
@@ -105,13 +111,13 @@ files:
|
|
105
111
|
- ".rspec"
|
106
112
|
- Dockerfile
|
107
113
|
- Gemfile
|
114
|
+
- Jenkinsfile
|
108
115
|
- LICENSE.txt
|
109
116
|
- README.md
|
110
117
|
- Rakefile
|
111
118
|
- bin/console
|
112
119
|
- bin/setup
|
113
120
|
- build.sh
|
114
|
-
- docker-compose.yml
|
115
121
|
- inst-jobs-autoscaling.gemspec
|
116
122
|
- lib/jobs_autoscaling.rb
|
117
123
|
- lib/jobs_autoscaling/aws_action.rb
|
@@ -122,7 +128,7 @@ homepage: https://github.com/instructure/inst-jobs-autoscaling
|
|
122
128
|
licenses:
|
123
129
|
- MIT
|
124
130
|
metadata: {}
|
125
|
-
post_install_message:
|
131
|
+
post_install_message:
|
126
132
|
rdoc_options: []
|
127
133
|
require_paths:
|
128
134
|
- lib
|
@@ -137,10 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
143
|
- !ruby/object:Gem::Version
|
138
144
|
version: '0'
|
139
145
|
requirements: []
|
140
|
-
|
141
|
-
|
142
|
-
signing_key:
|
146
|
+
rubygems_version: 3.1.4
|
147
|
+
signing_key:
|
143
148
|
specification_version: 4
|
144
149
|
summary: AWS ASG autoscaling for inst-jobs
|
145
150
|
test_files: []
|
146
|
-
has_rdoc:
|
data/docker-compose.yml
DELETED