inst-jobs-autoscaling 1.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: d0b7c3c7f779fd8894005be7bd7f10c578f4dce8
4
- data.tar.gz: 8dada72cd700f7c40757d7e04c25debb5aea2ba0
2
+ SHA256:
3
+ metadata.gz: 87f20f127af82c15a5b2c5bb1059a114f94122657d3b704135240727db16eb88
4
+ data.tar.gz: fcd7b86ad921f6729c706200f6a689b19a193ffa669ef843aea693d5d536e701
5
5
  SHA512:
6
- metadata.gz: 97715509cd162cc0ab4f079d318d2b65589b8aecf188b9f0158d976e897a136243633e0a69c66bebc9d574ba621648268bd949036e5e21f0cb4c03f6ca2114ca
7
- data.tar.gz: 9fabea2139de143d6d796a866fa27c593bc78d56785e2ea97f4b097a790e54022932f1973b458dfb3cc85f84bd109ad35a2077f7303268175c31924de81a80d5
6
+ metadata.gz: 3f8719c7858ae7b91baeff6fe13e35769dd218a79766fcccfd6fe95d45dc5fbd0903a541f76149e64056751d9be4556a8d774ca9963d9a122d18b446dc9fdb3e
7
+ data.tar.gz: 82c35b987576548f5b7cc9f650840bf51fcd9c0ca1b0078abd9cd17abe511bb708bdcf494f21ebb33146b8dbd3d2f20887d31c96de11fae7220ea652574d8e0e
data/Dockerfile CHANGED
@@ -1,11 +1,10 @@
1
- FROM instructure/ruby:2.4
2
-
3
- ADD Gemfile* *.gemspec /usr/src/app/
4
- ADD lib/jobs_autoscaling/version.rb /usr/src/app/lib/jobs_autoscaling/
5
- USER root
6
- RUN bundle install
7
- ADD . /usr/src/app/
8
- RUN chown -R docker:docker /usr/src/app
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"]
@@ -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
@@ -1,5 +1,5 @@
1
1
  #!/bin/bash
2
2
  set -e
3
3
 
4
- docker-compose build
5
- docker-compose run --rm ci
4
+ docker build -t inst-jobs-autoscaling .
5
+ docker run --rm inst-jobs-autoscaling
@@ -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", ">= 0.13.5"
21
+ spec.add_dependency "inst-jobs", "> 1.0", "< 3.0"
22
22
  spec.add_dependency "aws-sdk-autoscaling"
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.11"
25
- spec.add_development_dependency "rake", "~> 12.0"
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
@@ -6,9 +6,10 @@ module JobsAutoscaling
6
6
  class AwsAction
7
7
  attr_reader :asg_name, :client
8
8
 
9
- def initialize(asg_name:, aws_config: {})
9
+ def initialize(asg_name:, aws_config: {}, instance_id: nil)
10
10
  @asg_name = asg_name
11
11
  @client = Aws::AutoScaling::Client.new(aws_config.reverse_merge(retry_limit: 10))
12
+ @instance_id = instance_id
12
13
  end
13
14
 
14
15
  def idle
@@ -6,22 +6,36 @@ module JobsAutoscaling
6
6
  BUSY = :busy
7
7
 
8
8
  def initialize(action: )
9
- @action = action
9
+ @actions = Array(action)
10
10
  end
11
11
 
12
12
  def activate!
13
- Delayed::Worker.lifecycle.after(:work_queue_pop, &method(:work_queue_pop))
14
- change_state(IDLE)
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 work_queue_pop(work_queue, _worker_config)
20
- unless work_queue.respond_to?(:all_workers_idle?)
21
- return
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
- new_state = work_queue.all_workers_idle? ? IDLE : BUSY
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.public_send(new_state)
46
+ @actions.each do |action|
47
+ action.public_send(new_state)
48
+ end
33
49
  end
34
50
  end
35
51
  end
@@ -1,3 +1,3 @@
1
1
  module JobsAutoscaling
2
- VERSION = "1.0.2"
2
+ VERSION = "2.1.0"
3
3
  end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inst-jobs-autoscaling
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Palmer
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-28 00:00:00.000000000 Z
11
+ date: 2020-12-07 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
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: 0.13.5
22
+ version: '3.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - ">="
27
+ - - ">"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: 0.13.5
32
+ version: '3.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: aws-sdk-autoscaling
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -42,30 +48,36 @@ dependencies:
42
48
  name: bundler
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - "~>"
51
+ - - ">"
46
52
  - !ruby/object:Gem::Version
47
53
  version: '1.11'
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '3'
48
57
  type: :development
49
58
  prerelease: false
50
59
  version_requirements: !ruby/object:Gem::Requirement
51
60
  requirements:
52
- - - "~>"
61
+ - - ">"
53
62
  - !ruby/object:Gem::Version
54
63
  version: '1.11'
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '3'
55
67
  - !ruby/object:Gem::Dependency
56
68
  name: rake
57
69
  requirement: !ruby/object:Gem::Requirement
58
70
  requirements:
59
71
  - - "~>"
60
72
  - !ruby/object:Gem::Version
61
- version: '12.0'
73
+ version: '13.0'
62
74
  type: :development
63
75
  prerelease: false
64
76
  version_requirements: !ruby/object:Gem::Requirement
65
77
  requirements:
66
78
  - - "~>"
67
79
  - !ruby/object:Gem::Version
68
- version: '12.0'
80
+ version: '13.0'
69
81
  - !ruby/object:Gem::Dependency
70
82
  name: pry
71
83
  requirement: !ruby/object:Gem::Requirement
@@ -105,13 +117,13 @@ files:
105
117
  - ".rspec"
106
118
  - Dockerfile
107
119
  - Gemfile
120
+ - Jenkinsfile
108
121
  - LICENSE.txt
109
122
  - README.md
110
123
  - Rakefile
111
124
  - bin/console
112
125
  - bin/setup
113
126
  - build.sh
114
- - docker-compose.yml
115
127
  - inst-jobs-autoscaling.gemspec
116
128
  - lib/jobs_autoscaling.rb
117
129
  - lib/jobs_autoscaling/aws_action.rb
@@ -137,8 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
137
149
  - !ruby/object:Gem::Version
138
150
  version: '0'
139
151
  requirements: []
140
- rubyforge_project:
141
- rubygems_version: 2.6.11
152
+ rubygems_version: 3.0.3
142
153
  signing_key:
143
154
  specification_version: 4
144
155
  summary: AWS ASG autoscaling for inst-jobs
@@ -1,2 +0,0 @@
1
- ci:
2
- build: .