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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bc8dd7ba4037d208d291a2be9d529b6a4436c3c7
4
- data.tar.gz: c7a8abd253467eb2701cd4393ee7500659de8732
2
+ SHA256:
3
+ metadata.gz: 9f10b3037ff7449363423319ede4c85a5fca600551699019b90a6decf592899c
4
+ data.tar.gz: 6e561bff7304d8877f797a0d524b8541f44bf9d03f29b7b19283ed30132ef807
5
5
  SHA512:
6
- metadata.gz: 9df6de93ac399adc18ab3ed51dc74eca036edffb981d8527349992bca68e99492ca9e1ea1e688de480cfb0707eed464caa1e97a3c5e78564be37e64d876d1573
7
- data.tar.gz: 892755e7d6214b1e281499a9bc5649405c63da0001b4a4616f95b1f3549665f7181491f3d088d72dc16a7393824e0b6f553a00cbc47c88cf6ccf46d3e2049499
6
+ metadata.gz: f1854117c823ead59d8a4bb74c0ca19ce3704cace2df87896c76efa8fd1c776a114ca246f8dcca7b7f707e494bad76d12f52e02b3dd89760a95fc3b69a382aff
7
+ data.tar.gz: 453d524f3b2ad0c1b8a0d81d5e0db70e42c6ba55fdfee84db5164b53aa74302d42a40f84c1ad3340768480d3cb642725b3f7f68e0c2479c4bd2737653175baf4
data/Dockerfile CHANGED
@@ -1,11 +1,10 @@
1
- FROM instructure/ruby:2.1
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.11.0"
22
- spec.add_dependency "aws-sdk", ">= 2.0"
21
+ spec.add_dependency "inst-jobs", "~> 1.0"
22
+ spec.add_dependency "aws-sdk-autoscaling"
23
23
 
24
- spec.add_development_dependency "bundler", "~> 1.11"
25
- spec.add_development_dependency "rake", "~> 10.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
@@ -1,5 +1,3 @@
1
- require 'aws-sdk'
2
-
3
1
  require "jobs_autoscaling/version"
4
2
  require "jobs_autoscaling/monitor"
5
3
  require "jobs_autoscaling/aws_action"
@@ -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: action)
9
- @action = action
8
+ def initialize(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)
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.1"
2
+ VERSION = "2.0.0"
3
3
  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: 1.0.1
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: 2016-03-25 00:00:00.000000000 Z
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: 0.11.0
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: 0.11.0
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: '2.0'
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: '2.0'
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: '10.0'
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: '10.0'
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
- rubyforge_project:
141
- rubygems_version: 2.5.1
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:
@@ -1,2 +0,0 @@
1
- ci:
2
- build: .