barbeque 2.5.0 → 2.6.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
2
  SHA256:
3
- metadata.gz: '098d46ae421c14386c5231061b4c098931bbe762b3e3fcec5149beef806ce46b'
4
- data.tar.gz: df03e121930f8d03ce5cc34e1e6f29b35130cb9b2f0c2b5c2c33a3de1a81fe7c
3
+ metadata.gz: ee2d835c84a99b3c12b30c45c6b133bd45dee8c0c90c69792e82ce7e31c4f589
4
+ data.tar.gz: a2d3a604433215188449ea6fb22dcf4f5da73ec833874d9af4abcbd2fd697132
5
5
  SHA512:
6
- metadata.gz: 2d53cdd09556249fc858311bdaab4efb43f0d2f4189a29cec76d83e8b8bbd471b3fe14ff2d1eb57674036829eeff094fe928065fbab765d737280380e157ece6
7
- data.tar.gz: de83d760cabef91439014926294fc181404cf29adfbafe7463901da0a5ddc8d75ae6ab973cbb72601019123acaf4b45b20832adc11a7445dfc24545f94f7159d
6
+ metadata.gz: 5ba6a9de43ffda9cc5fe4dd3f5c4dde4428cc624c999831391e85a15815381957569c8b1953c07719a2444c539e1dd1d8e37cbb1bc687aefa536571df41f661e
7
+ data.tar.gz: 015b27c099386c2338bee1c9c8ebbc3ad5eea1bce3cb0ab71404808f38ee334b467d011afda2887aa00ed46b1e992cbbfcdae2e55001163ae2570da131f85530
@@ -8,3 +8,11 @@ jQuery ($) ->
8
8
  else
9
9
  enabledField.addClass('active')
10
10
  )
11
+
12
+ $('.enable_retry_configuration').bind('change', (event) ->
13
+ enabledField = $('.retry_configuration_field')
14
+ if event.target.value == 'true'
15
+ enabledField.removeClass('active')
16
+ else
17
+ enabledField.addClass('active')
18
+ )
@@ -18,4 +18,24 @@
18
18
  display: block;
19
19
  }
20
20
  }
21
+
22
+ .retry_configuration_wrapper label {
23
+ font-weight: normal;
24
+ }
25
+
26
+ .enable_retry_configuration {
27
+ margin: 0 2px 0 8px;
28
+ }
29
+
30
+ .retry_configuration_field {
31
+ display: none;
32
+
33
+ label {
34
+ font-weight: normal;
35
+ }
36
+
37
+ &.active {
38
+ display: block;
39
+ }
40
+ }
21
41
  }
@@ -1,3 +1,5 @@
1
+ require 'barbeque/maintenance'
2
+
1
3
  class Barbeque::Api::JobExecutionsController < Barbeque::Api::ApplicationController
2
4
  include Garage::RestfulActions
3
5
 
@@ -21,13 +23,20 @@ class Barbeque::Api::JobExecutionsController < Barbeque::Api::ApplicationControl
21
23
 
22
24
  def require_resource
23
25
  model = Barbeque::JobExecution.find_or_initialize_by(message_id: params[:message_id])
24
- @resource = Barbeque::Api::JobExecutionResource.new(model, url_options)
26
+ @resource = Barbeque::Api::JobExecutionResource.new(model)
27
+ rescue ActiveRecord::StatementInvalid, Mysql2::Error::ConnectionError => e
28
+ if Barbeque::Maintenance.database_maintenance_mode?
29
+ Barbeque::ExceptionHandler.handle_exception(e)
30
+ @resource = Barbeque::Api::DatabaseMaintenanceResource.new(e)
31
+ else
32
+ raise e
33
+ end
25
34
  end
26
35
 
27
36
  def create_resource
28
37
  message_id = enqueue_message
29
38
  model = Barbeque::JobExecution.new(message_id: message_id)
30
- @resource = Barbeque::Api::JobExecutionResource.new(model, url_options)
39
+ @resource = Barbeque::Api::JobExecutionResource.new(model)
31
40
  end
32
41
 
33
42
  # @return [String] id of a message queued to SQS.
@@ -49,4 +58,12 @@ class Barbeque::Api::JobExecutionsController < Barbeque::Api::ApplicationControl
49
58
  nil
50
59
  end
51
60
  end
61
+
62
+ def respond_with_resource_options
63
+ if @resource.is_a?(Barbeque::Api::DatabaseMaintenanceResource)
64
+ super.merge(status: 503)
65
+ else
66
+ super
67
+ end
68
+ end
52
69
  end
@@ -6,6 +6,7 @@ class Barbeque::JobDefinitionsController < Barbeque::ApplicationController
6
6
  def show
7
7
  @job_definition = Barbeque::JobDefinition.find(params[:id])
8
8
  @job_executions = @job_definition.job_executions.order(id: :desc).page(params[:page])
9
+ @retry_config = @job_definition.retry_config
9
10
  @status = params[:status].presence.try(&:to_i)
10
11
  if @status
11
12
  @job_executions = @job_executions.where(status: @status)
@@ -15,6 +16,7 @@ class Barbeque::JobDefinitionsController < Barbeque::ApplicationController
15
16
  def new
16
17
  @job_definition = Barbeque::JobDefinition.new
17
18
  @job_definition.build_slack_notification
19
+ @job_definition.build_retry_config
18
20
  if params[:job_definition]
19
21
  @job_definition.assign_attributes(new_job_definition_params)
20
22
  end
@@ -22,9 +24,12 @@ class Barbeque::JobDefinitionsController < Barbeque::ApplicationController
22
24
 
23
25
  def edit
24
26
  @job_definition = Barbeque::JobDefinition.find(params[:id])
25
- if @job_definition.slack_notification.nil?
27
+ unless @job_definition.slack_notification
26
28
  @job_definition.build_slack_notification
27
29
  end
30
+ unless @job_definition.retry_config
31
+ @job_definition.build_retry_config
32
+ end
28
33
  end
29
34
 
30
35
  def create
@@ -43,6 +48,7 @@ class Barbeque::JobDefinitionsController < Barbeque::ApplicationController
43
48
  attributes = params.require(:job_definition).permit(
44
49
  :description,
45
50
  slack_notification_attributes: slack_notification_params,
51
+ retry_config_attributes: retry_config_params,
46
52
  ).merge(command: command_array)
47
53
  if @job_definition.update(attributes)
48
54
  redirect_to @job_definition, notice: 'Job definition was successfully updated.'
@@ -78,6 +84,10 @@ class Barbeque::JobDefinitionsController < Barbeque::ApplicationController
78
84
  %i[id channel notify_success failure_notification_text _destroy]
79
85
  end
80
86
 
87
+ def retry_config_params
88
+ %i[id retry_limit base_delay max_delay jitter _destroy]
89
+ end
90
+
81
91
  def command_array
82
92
  Shellwords.split(params.require(:job_definition)[:command])
83
93
  end
@@ -10,6 +10,9 @@ class Barbeque::JobExecutionsController < Barbeque::ApplicationController
10
10
  end
11
11
  end
12
12
  @job_execution = Barbeque::JobExecution.find_by!(message_id: params[:message_id])
13
+ # Return 404 when job_definition or app is deleted
14
+ @job_definition = Barbeque::JobDefinition.find(@job_execution.job_definition_id)
15
+ @app = Barbeque::App.find(@job_definition.app_id)
13
16
  @log = @job_execution.execution_log
14
17
  @job_retries = @job_execution.job_retries.order(id: :desc)
15
18
  end
@@ -2,6 +2,9 @@ class Barbeque::JobRetriesController < Barbeque::ApplicationController
2
2
  def show
3
3
  @job_retry = Barbeque::JobRetry.find(params[:id])
4
4
  @job_execution = @job_retry.job_execution
5
+ # Return 404 when job_definition or app is deleted
6
+ @job_definition = Barbeque::JobDefinition.find(@job_execution.job_definition_id)
7
+ @app = Barbeque::App.find(@job_definition.app_id)
5
8
 
6
9
  if params[:job_execution_message_id] != @job_execution.message_id
7
10
  redirect_to([@job_execution, @job_retry])
@@ -0,0 +1,11 @@
1
+ class Barbeque::Api::DatabaseMaintenanceResource
2
+ include Garage::Representer
3
+
4
+ property :message
5
+
6
+ delegate :message, to: :@exception
7
+
8
+ def initialize(exception)
9
+ @exception = exception
10
+ end
11
+ end
@@ -7,14 +7,9 @@ class Barbeque::Api::JobExecutionResource < Barbeque::Api::ApplicationResource
7
7
 
8
8
  delegate :message_id, :status, :id, to: :model
9
9
 
10
- def initialize(model, url_options)
11
- super(model)
12
- @url_options = url_options
13
- end
14
-
15
10
  def html_url
16
11
  if model.id
17
- Barbeque::Engine.routes.url_helpers.job_execution_url(model, @url_options)
12
+ Barbeque::Engine.routes.url_helpers.job_execution_url(model, host: ENV['BARBEQUE_HOST'])
18
13
  else
19
14
  nil
20
15
  end
@@ -1,8 +1,9 @@
1
1
  class Barbeque::JobDefinition < Barbeque::ApplicationRecord
2
2
  belongs_to :app
3
- has_many :job_executions, dependent: :destroy
3
+ has_many :job_executions
4
4
  has_many :sns_subscriptions, class_name: 'SNSSubscription'
5
5
  has_one :slack_notification, dependent: :destroy
6
+ has_one :retry_config, dependent: :destroy
6
7
 
7
8
  validates :job, uniqueness: { scope: :app_id }
8
9
 
@@ -12,6 +13,7 @@ class Barbeque::JobDefinition < Barbeque::ApplicationRecord
12
13
  serialize :command, Array
13
14
 
14
15
  accepts_nested_attributes_for :slack_notification, allow_destroy: true
16
+ accepts_nested_attributes_for :retry_config, allow_destroy: true
15
17
 
16
18
  DATE_HOUR_SQL = 'date_format(created_at, "%Y-%m-%d %H:00:00")'
17
19
 
@@ -26,7 +28,7 @@ class Barbeque::JobDefinition < Barbeque::ApplicationRecord
26
28
  avg_time: avg_time,
27
29
  }
28
30
  end
29
- (from.to_i ... to.to_i).step(1.hour).map do |t|
31
+ (from.to_i ... to.to_i).step(1.hour.to_i).map do |t|
30
32
  time = Time.at(t)
31
33
  stats[time].merge(date_hour: time)
32
34
  end
@@ -28,4 +28,21 @@ class Barbeque::JobExecution < Barbeque::ApplicationRecord
28
28
  def to_param
29
29
  message_id
30
30
  end
31
+
32
+ def retry_if_possible!
33
+ unless retryable?
34
+ return
35
+ end
36
+ retry_config = job_definition.retry_config
37
+ unless retry_config
38
+ return
39
+ end
40
+
41
+ retries = job_retries.count
42
+ if retry_config.should_retry?(retries)
43
+ delay_seconds = retry_config.delay_seconds(retries).to_i
44
+ Barbeque::MessageRetryingService.new(message_id: message_id, delay_seconds: delay_seconds).run
45
+ retried!
46
+ end
47
+ end
31
48
  end
@@ -1,8 +1,10 @@
1
+ require 'barbeque/maintenance'
2
+
1
3
  class Barbeque::JobQueue < Barbeque::ApplicationRecord
2
4
  SQS_NAME_PREFIX = ENV['BARBEQUE_SQS_NAME_PREFIX'] || 'Barbeque-'
3
5
  SQS_NAME_MAX_LENGTH = 80
4
6
 
5
- has_many :job_executions, dependent: :destroy
7
+ has_many :job_executions
6
8
  has_many :sns_subscriptions, class_name: 'SNSSubscription', dependent: :destroy
7
9
 
8
10
  # SQS queue allows [a-zA-Z0-9_-]+ as queue name. Its maximum length is 80.
@@ -26,15 +28,10 @@ class Barbeque::JobQueue < Barbeque::ApplicationRecord
26
28
  # @param name [String] queue name in Barbeque
27
29
  # @return [String] queue URL of SQS
28
30
  def self.queue_url_from_name(name)
29
- if database_maintenance_mode?
31
+ if Barbeque::Maintenance.database_maintenance_mode?
30
32
  "https://sqs.#{ENV.fetch('AWS_REGION')}.amazonaws.com/#{ENV.fetch('AWS_ACCOUNT_ID')}/#{SQS_NAME_PREFIX}#{name}"
31
33
  else
32
34
  select(:queue_url).find_by!(name: name).queue_url
33
35
  end
34
36
  end
35
-
36
- def self.database_maintenance_mode?
37
- ENV['BARBEQUE_DATABASE_MAINTENANCE'] == '1' && ENV['AWS_REGION'].present? && ENV['AWS_ACCOUNT_ID'].present?
38
- end
39
- private_class_method :database_maintenance_mode?
40
37
  end
@@ -0,0 +1,24 @@
1
+ class Barbeque::RetryConfig < Barbeque::ApplicationRecord
2
+ belongs_to :job_definition
3
+
4
+ validates :retry_limit, numericality: { only_integer: true, greater_than: 0 }, allow_nil: true
5
+ validates :base_delay, numericality: { greater_than: 0.0 }, allow_nil: true
6
+ validates :max_delay, numericality: { greater_than: 0 }, allow_nil: true
7
+
8
+ def should_retry?(retries)
9
+ retries < retry_limit
10
+ end
11
+
12
+ # This algorithm is based on "Exponential Backoff And Jitter" article
13
+ # https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/
14
+ def delay_seconds(retries)
15
+ delay = 2 ** retries * base_delay
16
+ if max_delay
17
+ delay = [delay, max_delay].min
18
+ end
19
+ if jitter
20
+ delay = Kernel.rand(0 .. delay)
21
+ end
22
+ delay
23
+ end
24
+ end
@@ -40,6 +40,7 @@
40
40
  = f.text_area :description, class: 'form-control', rows: 10
41
41
 
42
42
  = render 'slack_notification_field', job_definition: @job_definition
43
+ = render 'retry_configuration_field', job_definition: @job_definition
43
44
 
44
45
  .form-group
45
46
  = f.submit 'Save', class: 'btn btn-primary'
@@ -0,0 +1,38 @@
1
+ = fields_for(job_definition) do |job_definition_f|
2
+ = job_definition_f.fields_for(:retry_config) do |f|
3
+ = f.hidden_field :id
4
+
5
+ .row
6
+ .col-md-8
7
+ %label Retry configuration
8
+
9
+ - retry_enabled = f.object.persisted?
10
+ .row.form-group
11
+ .col-md-8.retry_configuration_wrapper
12
+ = f.label :_destroy_true do
13
+ = f.radio_button :_destroy, true, class: 'enable_retry_configuration', checked: !retry_enabled
14
+ No
15
+ = f.label :_destroy_false do
16
+ = f.radio_button :_destroy, false, class: 'enable_retry_configuration', checked: retry_enabled
17
+ Yes
18
+
19
+ .retry_configuration_field{ class: ('active' if retry_enabled) }
20
+ .row.form-group
21
+ .col-md-4
22
+ = f.label :retry_limit
23
+ = f.number_field :retry_limit, min: 1, class: 'form-control'
24
+
25
+ .row.form-group
26
+ .col-md-4
27
+ = f.label :base_delay
28
+ = f.number_field :base_delay, min: 0.1, step: 0.1, class: 'form-control'
29
+
30
+ .row.form-group
31
+ .col-md-4
32
+ = f.label :max_delay
33
+ = f.number_field :max_delay, min: 1, class: 'form-control'
34
+
35
+ .row.form-group
36
+ .col-md-4
37
+ = f.label :jitter
38
+ = f.check_box :jitter
@@ -36,6 +36,13 @@
36
36
  Yes (#{@job_definition.slack_notification.channel})
37
37
  - else
38
38
  No
39
+ %tr
40
+ %th Retry configuration
41
+ %td
42
+ - if @retry_config
43
+ Yes (retry_limit=#{@retry_config.retry_limit} base_delay=#{@retry_config.base_delay} max_delay=#{@retry_config.max_delay || '+inf'} jitter=#{@retry_config.jitter ? 'enabled' : 'disabled'})
44
+ - else
45
+ No
39
46
 
40
47
  = link_to 'Edit', edit_job_definition_path(@job_definition), class: 'btn btn-primary'
41
48
  = link_to 'Destroy', job_definition_path(@job_definition),
@@ -1,10 +1,9 @@
1
- - content_for(:title, "Job execution ##{@job_execution.id} of #{@job_execution.job_definition.job} - Barbeque")
1
+ - content_for(:title, "Job execution ##{@job_execution.id} of #{@job_definition.job} - Barbeque")
2
2
  - content_for(:header) do
3
3
  %ol.breadcrumb
4
- - job_definition = @job_execution.job_definition
5
4
  %li= link_to('Home', root_path)
6
- %li= link_to(job_definition.app.name, app_path(job_definition.app.id))
7
- %li= link_to(job_definition.job, job_definition_path(job_definition.id))
5
+ %li= link_to(@app.name, app_path(@app.id))
6
+ %li= link_to(@job_definition.job, job_definition_path(@job_definition.id))
8
7
  %li.active #{@job_execution.message_id}
9
8
 
10
9
  .row
@@ -15,12 +14,12 @@
15
14
  .col-md-10
16
15
  %h3.box-title.with_padding
17
16
  \##{@job_execution.id} of
18
- = link_to @job_execution.job_definition do
19
- #{@job_execution.job_definition.job}
17
+ = link_to @job_definition do
18
+ #{@job_definition.job}
20
19
  - if @job_execution.retryable?
21
20
  .col-md-2
22
21
  = link_to job_execution_retry_path(@job_execution), method: :post, class: 'btn btn-default btn-block pull-right',
23
- data: { disable_with: 'retrying...', confirm: "Are you sure to retry #{@job_execution.job_definition.job} ##{@job_execution.id}?" } do
22
+ data: { disable_with: 'retrying...', confirm: "Are you sure to retry #{@job_definition.job} ##{@job_execution.id}?" } do
24
23
  Retry
25
24
 
26
25
  .box-body
@@ -107,4 +106,4 @@
107
106
  - else
108
107
  Log was not found.
109
108
 
110
- = link_to 'Back', job_definition_path(@job_execution.job_definition)
109
+ = link_to 'Back', job_definition_path(@job_definition)
@@ -1,12 +1,10 @@
1
- - content_for(:title, "Job retry ##{@job_retry.id} of #{@job_retry.job_execution.job_definition.job} - Barbeque")
1
+ - content_for(:title, "Job retry ##{@job_retry.id} of #{@job_definition.job} - Barbeque")
2
2
  - content_for(:header) do
3
3
  %ol.breadcrumb
4
- - job_execution = @job_retry.job_execution
5
- - job_definition = job_execution.job_definition
6
4
  %li= link_to('Home', root_path)
7
- %li= link_to(job_definition.app.name, app_path(job_definition.app.id))
8
- %li= link_to(job_definition.job, job_definition_path(job_definition.id))
9
- %li= link_to(job_execution.message_id, job_execution_path(job_execution))
5
+ %li= link_to(@app.name, app_path(@app.id))
6
+ %li= link_to(@job_definition.job, job_definition_path(@job_definition.id))
7
+ %li= link_to(@job_execution.message_id, job_execution_path(@job_execution))
10
8
  %li.active ##{@job_retry.id}
11
9
 
12
10
  .row
@@ -17,8 +15,8 @@
17
15
  .col-md-10
18
16
  %h3.box-title.with_padding
19
17
  Retry ##{@job_retry.id} of
20
- = link_to @job_retry.job_definition do
21
- #{@job_retry.job_definition.job}
18
+ = link_to @job_definition do
19
+ #{@job_definition.job}
22
20
  = link_to @job_execution do
23
21
  \##{@job_execution.id}
24
22
 
@@ -0,0 +1,14 @@
1
+ class CreateBarbequeRetryConfigs < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :barbeque_retry_configs, options: 'ENGINE=InnoDB ROW_FORMAT=dynamic DEFAULT CHARSET=utf8mb4' do |t|
4
+ t.integer :job_definition_id, null: false
5
+ t.integer :retry_limit, null: false, default: 3
6
+ t.float :base_delay, null: false, default: '0.3'
7
+ t.integer :max_delay
8
+ t.boolean :jitter, null: false, default: true
9
+ t.timestamps
10
+
11
+ t.index [:job_definition_id], unique: true
12
+ end
13
+ end
14
+ end
@@ -25,6 +25,7 @@ module Barbeque
25
25
  Barbeque::ExecutionLog.try_save_stdout_and_stderr(job_execution, stdout, stderr)
26
26
  job_execution.update!(status: :failed, finished_at: Time.zone.now)
27
27
  Barbeque::SlackNotifier.notify_job_execution(job_execution)
28
+ job_execution.retry_if_possible!
28
29
  end
29
30
  end
30
31
 
@@ -48,6 +49,7 @@ module Barbeque
48
49
  job_execution.update!(status: :failed)
49
50
  end
50
51
  Barbeque::SlackNotifier.notify_job_retry(job_retry)
52
+ job_execution.retry_if_possible!
51
53
  end
52
54
  end
53
55
 
@@ -63,6 +65,9 @@ module Barbeque
63
65
  stdout, stderr = get_logs(container.container_id)
64
66
  Barbeque::ExecutionLog.save_stdout_and_stderr(job_execution, stdout, stderr)
65
67
  Barbeque::SlackNotifier.notify_job_execution(job_execution)
68
+ if exit_code != 0
69
+ job_execution.retry_if_possible!
70
+ end
66
71
  end
67
72
  end
68
73
 
@@ -83,6 +88,9 @@ module Barbeque
83
88
  stdout, stderr = get_logs(container.container_id)
84
89
  Barbeque::ExecutionLog.save_stdout_and_stderr(job_retry, stdout, stderr)
85
90
  Barbeque::SlackNotifier.notify_job_retry(job_retry)
91
+ if status == :failed
92
+ job_execution.retry_if_possible!
93
+ end
86
94
  end
87
95
  end
88
96
 
@@ -46,6 +46,7 @@ module Barbeque
46
46
  Barbeque::ExecutionLog.try_save_stdout_and_stderr(job_execution, stdout, stderr)
47
47
  job_execution.update!(status: :failed, finished_at: Time.zone.now)
48
48
  Barbeque::SlackNotifier.notify_job_execution(job_execution)
49
+ job_execution.retry_if_possible!
49
50
  end
50
51
  end
51
52
 
@@ -71,6 +72,7 @@ module Barbeque
71
72
  job_execution.update!(status: :failed)
72
73
  end
73
74
  Barbeque::SlackNotifier.notify_job_retry(job_retry)
75
+ job_execution.retry_if_possible!
74
76
  end
75
77
  end
76
78
 
@@ -87,6 +89,9 @@ module Barbeque
87
89
  end
88
90
  job_execution.update!(status: status, finished_at: task.stopped_at)
89
91
  Barbeque::SlackNotifier.notify_job_execution(job_execution)
92
+ if status == :failed
93
+ job_execution.retry_if_possible!
94
+ end
90
95
  end
91
96
  end
92
97
 
@@ -107,6 +112,9 @@ module Barbeque
107
112
  job_execution.update!(status: status)
108
113
  end
109
114
  Barbeque::SlackNotifier.notify_job_retry(job_retry)
115
+ if status == :failed
116
+ job_execution.retry_if_possible!
117
+ end
110
118
  end
111
119
  end
112
120
 
@@ -0,0 +1,7 @@
1
+ module Barbeque
2
+ module Maintenance
3
+ def self.database_maintenance_mode?
4
+ ENV['BARBEQUE_DATABASE_MAINTENANCE'] == '1' && ENV['AWS_REGION'].present? && ENV['AWS_ACCOUNT_ID'].present?
5
+ end
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Barbeque
2
- VERSION = '2.5.0'
2
+ VERSION = '2.6.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barbeque
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takashi Kokubun
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-24 00:00:00.000000000 Z
11
+ date: 2019-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: adminlte2-rails
@@ -268,14 +268,14 @@ dependencies:
268
268
  requirements:
269
269
  - - ">="
270
270
  - !ruby/object:Gem::Version
271
- version: '0'
271
+ version: 5.0.0
272
272
  type: :development
273
273
  prerelease: false
274
274
  version_requirements: !ruby/object:Gem::Requirement
275
275
  requirements:
276
276
  - - ">="
277
277
  - !ruby/object:Gem::Version
278
- version: '0'
278
+ version: 5.0.0
279
279
  - !ruby/object:Gem::Dependency
280
280
  name: listen
281
281
  requirement: !ruby/object:Gem::Requirement
@@ -351,6 +351,7 @@ files:
351
351
  - app/helpers/barbeque/job_definitions_helper.rb
352
352
  - app/helpers/barbeque/job_executions_helper.rb
353
353
  - app/models/barbeque/api/application_resource.rb
354
+ - app/models/barbeque/api/database_maintenance_resource.rb
354
355
  - app/models/barbeque/api/job_execution_resource.rb
355
356
  - app/models/barbeque/api/job_retry_resource.rb
356
357
  - app/models/barbeque/api/revision_lock_resource.rb
@@ -362,6 +363,7 @@ files:
362
363
  - app/models/barbeque/job_execution.rb
363
364
  - app/models/barbeque/job_queue.rb
364
365
  - app/models/barbeque/job_retry.rb
366
+ - app/models/barbeque/retry_config.rb
365
367
  - app/models/barbeque/slack_notification.rb
366
368
  - app/models/barbeque/sns_subscription.rb
367
369
  - app/services/barbeque/message_enqueuing_service.rb
@@ -373,6 +375,7 @@ files:
373
375
  - app/views/barbeque/apps/new.html.haml
374
376
  - app/views/barbeque/apps/show.html.haml
375
377
  - app/views/barbeque/job_definitions/_form.html.haml
378
+ - app/views/barbeque/job_definitions/_retry_configuration_field.html.haml
376
379
  - app/views/barbeque/job_definitions/_slack_notification_field.html.haml
377
380
  - app/views/barbeque/job_definitions/edit.html.haml
378
381
  - app/views/barbeque/job_definitions/index.html.haml
@@ -419,6 +422,7 @@ files:
419
422
  - db/migrate/20170712075449_create_barbeque_ecs_hako_tasks.rb
420
423
  - db/migrate/20170724025542_add_index_to_job_execution_status.rb
421
424
  - db/migrate/20180411070937_add_index_to_barbeque_job_executions_created_at.rb
425
+ - db/migrate/20190221050714_create_barbeque_retry_configs.rb
422
426
  - lib/barbeque.rb
423
427
  - lib/barbeque/config.rb
424
428
  - lib/barbeque/docker_image.rb
@@ -430,6 +434,7 @@ files:
430
434
  - lib/barbeque/executor/docker.rb
431
435
  - lib/barbeque/executor/hako.rb
432
436
  - lib/barbeque/hako_s3_client.rb
437
+ - lib/barbeque/maintenance.rb
433
438
  - lib/barbeque/message.rb
434
439
  - lib/barbeque/message/base.rb
435
440
  - lib/barbeque/message/invalid_message.rb
@@ -468,8 +473,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
468
473
  - !ruby/object:Gem::Version
469
474
  version: '0'
470
475
  requirements: []
471
- rubyforge_project:
472
- rubygems_version: 2.7.6
476
+ rubygems_version: 3.0.1
473
477
  signing_key:
474
478
  specification_version: 4
475
479
  summary: Job queue system to run job with Docker