foreman_dlm 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -1
- data/app/controllers/api/v2/dlmlock_events_controller.rb +41 -0
- data/app/controllers/api/v2/dlmlocks_controller.rb +10 -4
- data/app/controllers/concerns/foreman_dlm/update_checkin_time.rb +21 -0
- data/app/controllers/foreman_dlm/application_controller.rb +19 -0
- data/app/controllers/foreman_dlm/dlmlocks_controller.rb +73 -0
- data/app/helpers/foreman_dlm/dlmlock_helper.rb +31 -0
- data/app/jobs/foreman_dlm/refresh_dlmlock_status.rb +17 -0
- data/app/models/concerns/foreman_dlm/dlm_facet_host_extensions.rb +13 -0
- data/app/models/concerns/foreman_dlm/expirable.rb +35 -0
- data/app/models/concerns/foreman_dlm/host_extensions.rb +11 -0
- data/app/models/concerns/foreman_dlm/user_extensions.rb +13 -0
- data/app/models/foreman_dlm/dlm_facet.rb +7 -0
- data/app/models/foreman_dlm/dlmlock.rb +136 -0
- data/app/models/foreman_dlm/dlmlock/update.rb +9 -0
- data/app/models/foreman_dlm/dlmlock_event.rb +23 -0
- data/app/models/host_status/dlmlock_status.rb +44 -0
- data/app/models/settings/dlm.rb +20 -0
- data/app/views/api/v2/dlmlock_events/index.json.rabl +2 -0
- data/app/views/foreman_dlm/api/v2/dlm_facets/base.json.rabl +1 -0
- data/app/views/foreman_dlm/api/v2/dlm_facets/base_with_root.json.rabl +3 -0
- data/app/views/foreman_dlm/api/v2/dlm_facets/show.json.rabl +3 -0
- data/app/views/foreman_dlm/dlmlocks/_details.html.erb +42 -0
- data/app/views/{dlmlocks → foreman_dlm/dlmlocks}/_list.html.erb +3 -1
- data/app/views/{dlmlocks → foreman_dlm/dlmlocks}/index.html.erb +0 -0
- data/app/views/foreman_dlm/dlmlocks/show.html.erb +10 -0
- data/app/views/{dlmlocks → foreman_dlm/dlmlocks}/welcome.html.erb +0 -0
- data/app/views/hosts/_dlmlocks_tab.html.erb +39 -0
- data/config/routes.rb +10 -3
- data/contrib/systemd/foreman-dlm-expire-events.service +10 -0
- data/contrib/systemd/foreman-dlm-expire-events.timer +8 -0
- data/db/migrate/20180627150003_rename_dlmlock_sti_models.rb +9 -0
- data/db/migrate/20180704162345_add_dlmlock_events.rb +11 -0
- data/db/migrate/20180711090022_add_hosts_fk_to_dlmlocks.rb +5 -0
- data/db/migrate/20180711111903_create_dlm_facets.foreman_dlm.rb +10 -0
- data/db/migrate/20180713113208_update_permissions_for_scoped_models.rb +13 -0
- data/lib/foreman_dlm/engine.rb +43 -7
- data/lib/foreman_dlm/version.rb +1 -1
- data/lib/tasks/dlmlock_events.rake +19 -0
- data/test/controllers/api/v2/dlmlocks_controller_test.rb +32 -11
- data/test/controllers/api/v2/dlmlocks_dlmlock_events_controller_test.rb +81 -0
- data/test/controllers/api/v2/hosts_controller_test.rb +28 -0
- data/test/controllers/foreman_dlm/dlmlocks_test.rb +55 -0
- data/test/controllers/hosts_controller_test.rb +12 -0
- data/test/factories/dlm_facets.rb +6 -0
- data/test/factories/dlmlock.rb +6 -2
- data/test/factories/dlmlock_events.rb +13 -0
- data/test/factories/host.rb +7 -0
- data/test/jobs/refresh_dlmlock_status_test.rb +10 -0
- data/test/models/foreman_dlm/dlm_facet_test.rb +13 -0
- data/test/models/foreman_dlm/dlmlock_event_test.rb +19 -0
- data/test/models/foreman_dlm/dlmlock_test.rb +299 -0
- data/test/models/host_managed_test.rb +23 -0
- data/test/models/host_status/dlmlock_status_test.rb +49 -0
- data/test/models/user_test.rb +5 -0
- metadata +63 -15
- data/app/controllers/dlmlocks_controller.rb +0 -12
- data/app/models/dlmlock.rb +0 -79
- data/app/models/dlmlock/update.rb +0 -7
- data/app/views/dlmlocks/_details.html.erb +0 -35
- data/app/views/dlmlocks/show.html.erb +0 -7
- data/test/controllers/dlmlocks_test.rb +0 -24
- data/test/models/dlmlock_test.rb +0 -201
@@ -0,0 +1,23 @@
|
|
1
|
+
module ForemanDlm
|
2
|
+
class DlmlockEvent < ApplicationRecord
|
3
|
+
include Authorizable
|
4
|
+
include Expirable
|
5
|
+
|
6
|
+
TYPES = %w[release acquire enable disable fail].freeze
|
7
|
+
validates :event_type, inclusion: { in: TYPES }
|
8
|
+
|
9
|
+
def self.humanize_class_name
|
10
|
+
N_('Distributed Lock Event')
|
11
|
+
end
|
12
|
+
|
13
|
+
belongs_to_host
|
14
|
+
belongs_to :dlmlock, inverse_of: :dlmlock_events, class_name: 'ForemanDlm::Dlmlock'
|
15
|
+
belongs_to :user, inverse_of: :dlmlock_events
|
16
|
+
|
17
|
+
scoped_search on: :event_type, complete_value: true
|
18
|
+
|
19
|
+
def humanized_type
|
20
|
+
_('Dlmlock Event')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module HostStatus
|
2
|
+
class DlmlockStatus < Status
|
3
|
+
OK = 0
|
4
|
+
STALE = 1
|
5
|
+
|
6
|
+
def self.status_name
|
7
|
+
N_('Distributed Lock')
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_label(_options = {})
|
11
|
+
case to_status
|
12
|
+
when OK
|
13
|
+
N_('Ok')
|
14
|
+
when STALE
|
15
|
+
N_('Stale')
|
16
|
+
else
|
17
|
+
N_('Unknown')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_global(_options = {})
|
22
|
+
case to_status
|
23
|
+
when OK
|
24
|
+
HostStatus::Global::OK
|
25
|
+
else
|
26
|
+
HostStatus::Global::ERROR
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_status(_options = {})
|
31
|
+
ok? ? OK : STALE
|
32
|
+
end
|
33
|
+
|
34
|
+
def relevant?(_options = {})
|
35
|
+
host.dlmlocks.any?
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def ok?
|
41
|
+
host.dlmlocks.stale.empty?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Setting
|
2
|
+
class Dlm < ::Setting
|
3
|
+
def self.load_defaults
|
4
|
+
return unless ActiveRecord::Base.connection.table_exists?('settings')
|
5
|
+
return unless super
|
6
|
+
|
7
|
+
Setting.transaction do
|
8
|
+
[
|
9
|
+
set('dlm_stale_time', N_('Number of hours after which locked Distributed Lock is stale'), 4, N_('Distributed Lock stale time'))
|
10
|
+
].compact.each { |s| Setting::General.create s.update(category: 'Setting::General') }
|
11
|
+
end
|
12
|
+
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.humanized_category
|
17
|
+
N_('Distributed Locks')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
attributes :id, :last_checkin_at
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<% if authorizer.can?(:view_dlmlock_events) %>
|
2
|
+
<table class="<%= table_css_classes('table-fixed') %>">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th><%= _("Host") %></th>
|
6
|
+
<th><%= _("User") %></th>
|
7
|
+
<th><%= _("Type") %></th>
|
8
|
+
<th><%= _("Timestamp") %></th>
|
9
|
+
</tr>
|
10
|
+
</thead>
|
11
|
+
<tbody>
|
12
|
+
<% @dlmlock.dlmlock_events.includes(:user).reorder(created_at: :desc).each do |event| %>
|
13
|
+
|
14
|
+
<tr>
|
15
|
+
<td>
|
16
|
+
<% if event.host %>
|
17
|
+
<%= link_to_if_authorized(event.host.name, hash_for_host_path(:id => event.host)) %>
|
18
|
+
<% end %>
|
19
|
+
</td>
|
20
|
+
|
21
|
+
<td>
|
22
|
+
<% if event.user %>
|
23
|
+
<% if event.user.hidden? %>
|
24
|
+
<em><%= event.user.name %></em>
|
25
|
+
<% else %>
|
26
|
+
<%= link_to_if_authorized(event.user.name, hash_for_edit_user_path(event.user)) %>
|
27
|
+
<% end %>
|
28
|
+
<% end %>
|
29
|
+
</td>
|
30
|
+
|
31
|
+
<td>
|
32
|
+
<%= _(event.event_type.humanize) %>
|
33
|
+
</td>
|
34
|
+
|
35
|
+
<td>
|
36
|
+
<%= event.created_at %>
|
37
|
+
</td>
|
38
|
+
</tr>
|
39
|
+
<% end %>
|
40
|
+
</tbody>
|
41
|
+
</table>
|
42
|
+
<% end %>
|
@@ -5,6 +5,7 @@
|
|
5
5
|
<th><%= sort :host, :as => _("Owner") %></th>
|
6
6
|
<th><%= sort :type, :as => _("Type") %></th>
|
7
7
|
<th><%= sort :enabled, :as => _("Enabled") %></th>
|
8
|
+
<th class="col-md-2"><%= _('Actions') %></th>
|
8
9
|
</tr>
|
9
10
|
</thead>
|
10
11
|
<tbody>
|
@@ -12,7 +13,7 @@
|
|
12
13
|
<tr class="<%= lock.enabled? ? '' : 'warning' %>">
|
13
14
|
<td>
|
14
15
|
<%= icon_text(dlmlock_status_icon_class(lock),
|
15
|
-
link_to_if_authorized(lock.name,
|
16
|
+
link_to_if_authorized(lock.name, hash_for_foreman_dlm_dlmlock_path(:id => lock)),
|
16
17
|
kind: 'fa',
|
17
18
|
class: "#{dlmlock_status_icon_color_class(lock)} fa-lg")
|
18
19
|
%>
|
@@ -38,6 +39,7 @@
|
|
38
39
|
<%= icon_text('toggle-off', 'Disabled', {kind: 'fa', class: 'center fa-lg', title: _('Disabled')}) %>
|
39
40
|
<% end %>
|
40
41
|
</td>
|
42
|
+
<td><%= action_buttons(*dlmlock_actions(lock, authorizer)) %></td>
|
41
43
|
</tr>
|
42
44
|
<% end %>
|
43
45
|
</tbody>
|
File without changes
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% title @dlmlock.name %>
|
2
|
+
<% breadcrumbs(
|
3
|
+
resource_url: api_dlmlocks_path
|
4
|
+
) if respond_to?(:breadcrumbs) # Requires Foreman >= 1.18 %>
|
5
|
+
|
6
|
+
<%= title_actions link_to(_('Back'), foreman_dlm_dlmlocks_path, :class => 'btn btn-default'),
|
7
|
+
((link_to(_("Host details"), @dlmlock.host, :class => 'btn btn-default') if @dlmlock.host.present?))
|
8
|
+
%>
|
9
|
+
|
10
|
+
<%= render 'details' %>
|
File without changes
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<% if @host.dlmlocks.any? %>
|
2
|
+
<%= alert class: 'alert-info',
|
3
|
+
header: '',
|
4
|
+
text: n_(
|
5
|
+
'This host holds %s lock.',
|
6
|
+
'This host holds %s locks.',
|
7
|
+
@host.dlmlocks.count
|
8
|
+
) % @host.dlmlocks.count
|
9
|
+
%>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<table class="<%= table_css_classes %> table-fixed">
|
13
|
+
<thead>
|
14
|
+
<tr>
|
15
|
+
<th colspan="2"><%= _('Locks') %></th>
|
16
|
+
</tr>
|
17
|
+
</thead>
|
18
|
+
<tbody>
|
19
|
+
<tr>
|
20
|
+
<td><%= _('Last checkin') %></td>
|
21
|
+
<td><%= @host.dlm_facet && @host.dlm_facet.last_checkin_at ? date_time_relative(@host.dlm_facet.last_checkin_at) : _('N/A') %></td>
|
22
|
+
</tr>
|
23
|
+
<tr>
|
24
|
+
<td><%= _('Holds Locks') %></td>
|
25
|
+
<td>
|
26
|
+
<% if @host.dlmlocks.any? %>
|
27
|
+
<% @host.dlmlocks.authorized(:view_dlmlocks).each do |lock| %>
|
28
|
+
<%= link_to_if_authorized(lock.name, hash_for_foreman_dlm_dlmlock_path(lock)) %>
|
29
|
+
<span class="label label-<%= lock.updated_at > 6.hours.ago ? 'info' : 'warning' %>">
|
30
|
+
<%= _('acquired') %> <%= date_time_relative_value(lock.updated_at) %>
|
31
|
+
</span>
|
32
|
+
<% end %>
|
33
|
+
<% else %>
|
34
|
+
<%= _('None') %>
|
35
|
+
<% end %>
|
36
|
+
</td>
|
37
|
+
</tr>
|
38
|
+
</tbody>
|
39
|
+
</table>
|
data/config/routes.rb
CHANGED
@@ -6,6 +6,8 @@ Rails.application.routes.draw do
|
|
6
6
|
:constraints => ApiConstraints.new(:version => 2, :default => true) do
|
7
7
|
constraints(id: /[^\/]+/) do
|
8
8
|
resources :dlmlocks, only: [:index, :show, :update, :destroy] do
|
9
|
+
resources :dlmlock_events, only: [:index]
|
10
|
+
|
9
11
|
get :lock, on: :member, action: :show, controller: 'dlmlocks'
|
10
12
|
put :lock, on: :member, action: :acquire, controller: 'dlmlocks'
|
11
13
|
delete :lock, on: :member, action: :release, controller: 'dlmlocks'
|
@@ -15,10 +17,15 @@ Rails.application.routes.draw do
|
|
15
17
|
end
|
16
18
|
end
|
17
19
|
|
18
|
-
|
19
|
-
resources :dlmlocks, only: [:index, :show] do
|
20
|
+
namespace :foreman_dlm do
|
21
|
+
resources :dlmlocks, only: [:index, :show, :destroy] do
|
20
22
|
collection do
|
21
|
-
get
|
23
|
+
get :auto_complete_search
|
24
|
+
end
|
25
|
+
member do
|
26
|
+
put :enable
|
27
|
+
put :disable
|
28
|
+
put :release
|
22
29
|
end
|
23
30
|
end
|
24
31
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
[Unit]
|
2
|
+
Description=Clean up expired Foreman DLM events
|
3
|
+
Documentation=https://github.com/dm-drogeriemarkt/foreman_dlm/blob/master/README.md
|
4
|
+
Requires=network.target
|
5
|
+
|
6
|
+
[Service]
|
7
|
+
Type=oneshot
|
8
|
+
EnvironmentFile=-/etc/sysconfig/foreman_dlm
|
9
|
+
ExecStart=/sbin/foreman-rake dlmlocks:expire
|
10
|
+
TimeoutSec=30m
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class RenameDlmlockStiModels < ActiveRecord::Migration[5.1]
|
2
|
+
def up
|
3
|
+
execute "UPDATE dlmlocks set type='ForemanDlm::Dlmlock::Update' where type='Dlmlock::Update';"
|
4
|
+
end
|
5
|
+
|
6
|
+
def down
|
7
|
+
execute "UPDATE dlmlocks set type='Dlmlock::Update' where type='ForemanDlm::Dlmlock::Update';"
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class AddDlmlockEvents < ActiveRecord::Migration[5.1]
|
2
|
+
def change
|
3
|
+
create_table :dlmlock_events do |t|
|
4
|
+
t.integer :dlmlock_id, index: true, null: false
|
5
|
+
t.string :event_type, index: true
|
6
|
+
t.integer :host_id, index: true
|
7
|
+
t.integer :user_id
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class CreateDlmFacets < ActiveRecord::Migration[5.1]
|
2
|
+
def change
|
3
|
+
create_table :dlm_facets do |t|
|
4
|
+
t.references :host, null: false, foreign_key: true, index: true, unique: true
|
5
|
+
t.column :last_checkin_at, :datetime
|
6
|
+
|
7
|
+
t.timestamps null: false
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class UpdatePermissionsForScopedModels < ActiveRecord::Migration[5.1]
|
2
|
+
class FakePermission < ApplicationRecord
|
3
|
+
self.table_name = 'permissions'
|
4
|
+
end
|
5
|
+
|
6
|
+
def up
|
7
|
+
FakePermission.where(resource_type: 'Dlmlock').update_all(resource_type: 'ForemanDlm::Dlmlock')
|
8
|
+
end
|
9
|
+
|
10
|
+
def down
|
11
|
+
FakePermission.where(resource_type: 'ForemanDlm::Dlmlock').update_all(resource_type: 'Dlmlock')
|
12
|
+
end
|
13
|
+
end
|
data/lib/foreman_dlm/engine.rb
CHANGED
@@ -4,6 +4,15 @@ module ForemanDlm
|
|
4
4
|
|
5
5
|
config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
|
6
6
|
config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
|
7
|
+
config.autoload_paths += Dir["#{config.root}/app/jobs"]
|
8
|
+
|
9
|
+
initializer 'foreman_dlm.load_default_settings', before: :load_config_initializers do
|
10
|
+
require_dependency File.expand_path('../../app/models/settings/dlm.rb', __dir__) if begin
|
11
|
+
Setting.table_exists?
|
12
|
+
rescue StandardError
|
13
|
+
(false)
|
14
|
+
end
|
15
|
+
end
|
7
16
|
|
8
17
|
# Add any db migrations
|
9
18
|
initializer 'foreman_dlm.load_app_instance_data' do |app|
|
@@ -21,32 +30,57 @@ module ForemanDlm
|
|
21
30
|
# Add permissions
|
22
31
|
security_block :foreman_dlm do
|
23
32
|
permission :view_dlmlocks, {
|
24
|
-
:dlmlocks => [:index, :show, :auto_complete_search],
|
33
|
+
:'foreman_dlm/dlmlocks' => [:index, :show, :auto_complete_search],
|
25
34
|
:'api/v2/dlmlocks' => [:index, :show]
|
26
|
-
}, :resource_type => 'Dlmlock'
|
35
|
+
}, :resource_type => 'ForemanDlm::Dlmlock'
|
27
36
|
|
28
37
|
permission :create_dlmlocks, {
|
29
38
|
:'api/v2/dlmlocks' => [:create]
|
30
|
-
}, :resource_type => 'Dlmlock'
|
39
|
+
}, :resource_type => 'ForemanDlm::Dlmlock'
|
31
40
|
|
32
41
|
permission :edit_dlmlocks, {
|
42
|
+
:'foreman_dlm/dlmlocks' => [:release, :enable, :disable],
|
33
43
|
:'api/v2/dlmlocks' => [:update, :acquire, :release]
|
34
|
-
}, :resource_type => 'Dlmlock'
|
44
|
+
}, :resource_type => 'ForemanDlm::Dlmlock'
|
35
45
|
|
36
46
|
permission :destroy_dlmlocks, {
|
47
|
+
:'foreman_dlm/dlmlocks' => [:destroy],
|
37
48
|
:'api/v2/dlmlocks' => [:destroy]
|
38
|
-
}, :resource_type => 'Dlmlock'
|
49
|
+
}, :resource_type => 'ForemanDlm::Dlmlock'
|
50
|
+
|
51
|
+
permission :view_dlmlock_events, {
|
52
|
+
:'api/v2/dlmlock_events' => [:index]
|
53
|
+
}, :resource_type => 'ForemanDlm::DlmlockEvent'
|
39
54
|
end
|
40
55
|
|
41
56
|
# Add a new role called 'Distributed Lock Manager' if it doesn't exist
|
42
|
-
role 'Distributed Lock Manager', [:view_dlmlocks,
|
57
|
+
role 'Distributed Lock Manager', [:view_dlmlocks,
|
58
|
+
:create_dlmlocks,
|
59
|
+
:edit_dlmlocks,
|
60
|
+
:destroy_dlmlocks,
|
61
|
+
:view_dlmlock_events]
|
43
62
|
|
44
63
|
# add menu entry
|
45
64
|
menu :top_menu, :distributed_locks,
|
46
|
-
url_hash: { controller: :dlmlocks, action: :index },
|
65
|
+
url_hash: { controller: :'foreman_dlm/dlmlocks', action: :index },
|
47
66
|
caption: N_('Distributed Locks'),
|
48
67
|
parent: :monitor_menu,
|
49
68
|
after: :audits
|
69
|
+
|
70
|
+
# Dlm Facet
|
71
|
+
register_facet(ForemanDlm::DlmFacet, :dlm_facet) do
|
72
|
+
api_view list: 'foreman_dlm/api/v2/dlm_facets/base_with_root', single: 'foreman_dlm/api/v2/dlm_facets/show'
|
73
|
+
end
|
74
|
+
|
75
|
+
register_custom_status HostStatus::DlmlockStatus
|
76
|
+
|
77
|
+
# extend host show page
|
78
|
+
extend_page('hosts/show') do |context|
|
79
|
+
context.add_pagelet :main_tabs,
|
80
|
+
:name => N_('Locks'),
|
81
|
+
:partial => 'hosts/dlmlocks_tab',
|
82
|
+
:onlyif => proc { |host| host.dlm_facet }
|
83
|
+
end
|
50
84
|
end
|
51
85
|
end
|
52
86
|
|
@@ -54,6 +88,8 @@ module ForemanDlm
|
|
54
88
|
config.to_prepare do
|
55
89
|
begin
|
56
90
|
Host::Managed.send(:include, ForemanDlm::HostExtensions)
|
91
|
+
User.send(:include, ForemanDlm::UserExtensions)
|
92
|
+
Host::Managed.send(:include, ForemanDlm::DlmFacetHostExtensions)
|
57
93
|
|
58
94
|
Host::Managed.send(:include, ForemanDlm::HostMonitoringExtensions) if ForemanDlm.with_monitoring?
|
59
95
|
rescue StandardError => e
|
data/lib/foreman_dlm/version.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
desc <<-TASK_DESCRIPTION
|
2
|
+
Expire lock events automatically
|
3
|
+
|
4
|
+
Available conditions:
|
5
|
+
* days => number of days to keep reports (defaults to 14)
|
6
|
+
* batch_size => number of records deleted in single SQL transaction (defaults to 1k)
|
7
|
+
* sleep_time => delay in seconds between batches (defaults to 0.2)
|
8
|
+
|
9
|
+
TASK_DESCRIPTION
|
10
|
+
|
11
|
+
namespace :dlmlocks do
|
12
|
+
task expire: :environment do
|
13
|
+
created_before = ENV['days'].to_i.days if ENV['days']
|
14
|
+
batch_size = ENV['batch_size'].to_i if ENV['batch_size']
|
15
|
+
sleep_time = ENV['sleep_time'].to_f if ENV['sleep_time']
|
16
|
+
|
17
|
+
ForemanDlm::DlmlockEvent.expire(created_before: created_before, batch_size: batch_size, sleep_time: sleep_time)
|
18
|
+
end
|
19
|
+
end
|