inst-jobs-autoscaling 1.0.1 → 2.0.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: 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: .