foreman-tasks 8.1.1 → 8.1.3

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
2
  SHA256:
3
- metadata.gz: 9ea7c09f93e56822f799d7183bff19c4faa2f1c39170308c32bde7e6f7dbbc7e
4
- data.tar.gz: cc0302fdb82270c60189a84643ae7cc664d514344118ef5e66d31e448c33d786
3
+ metadata.gz: 6b47d3165d26d95f9799243481ff75c14aaa59ec3966edcf8afe95ee1da77a97
4
+ data.tar.gz: 2b0eb29411d81b496169b970f0edb93abda50f6a109ee13d21830f918e52e29f
5
5
  SHA512:
6
- metadata.gz: 50a5504d7b2ff8ef38dec48b1126772f5b5b846660c8eb6dc6957c53556d1467183c42185ee140a7ce519222750811134428f6af2ecd129ea0652010ad67340e
7
- data.tar.gz: 5962c5f10d1962c9dd91e44b48e226c35ac4adb675813f0b623850f8ebc3b07c34069cfeeb31a837b1a5a04715ceb47c13bc79f1e297803de74670bb43ee966f
6
+ metadata.gz: 686ecd66afcaab661bb7916746547dad1a8b33dc9087a2dfd874a87e87d0d426b4fe05f9807337be8fcd13a2861a02dc98c4ae03326df482a7970eed89745fa9
7
+ data.tar.gz: 4424d6de0469d10129d6c53d5abc190307e497524b6a80a4349be630a383ce1c4fcde172241c64567ea843ba5ef0f804e3c93d7e54ff5f36dd350c12a3ba289a
@@ -8,12 +8,10 @@ module Actions
8
8
  def plan
9
9
  time = Time.now.utc
10
10
  cutoff = time - INTERVAL
11
- notification = ::ForemanTasks::TasksMailNotification.find_by(name: "long_running_tasks")
12
- org_admin_role = Role.find_by(name: 'Organization admin')
13
- users = User.left_joins(:roles)
14
- .where(id: UserMailNotification.where(mail_notification_id: notification.id).select(:role_id))
15
- .or(User.where(admin: true))
16
- .or(User.where(id: UserRole.where(id: [org_admin_role.id] + org_admin_role.cloned_role_ids).select(:owner_id)))
11
+ users = User.joins(:mail_notifications)
12
+ .where(mail_enabled: true, mail_notifications: { name: 'long_running_tasks' })
13
+ .where.not(mail: [nil, ''])
14
+ .where(disabled: [nil, false])
17
15
 
18
16
  query = "state ^ (#{STATES.join(', ')}) AND state_updated_at <= \"#{cutoff}\""
19
17
  users.each do |user|
@@ -41,5 +39,9 @@ module Actions
41
39
  def humanized_name
42
40
  _('Check for long running tasks')
43
41
  end
42
+
43
+ def rescue_strategy_for_self
44
+ Dynflow::Action::Rescue::Skip
45
+ end
44
46
  end
45
47
  end
@@ -18,5 +18,9 @@ module Actions
18
18
  def humanized_name
19
19
  _('Deliver notifications about long running tasks')
20
20
  end
21
+
22
+ def rescue_strategy_for_self
23
+ ::Dynflow::Action::Rescue::Skip
24
+ end
21
25
  end
22
26
  end
@@ -25,6 +25,11 @@ module Actions
25
25
  pass(*args)
26
26
  end
27
27
 
28
+ def hook(*args)
29
+ reload_setting_values
30
+ pass(*args)
31
+ end
32
+
28
33
  private
29
34
 
30
35
  def reload_setting_values
@@ -8,6 +8,23 @@ module ForemanTasks
8
8
  has_many :tasks, :dependent => :nullify,
9
9
  :class_name => ::ForemanTasks::Task.name
10
10
  # rubocop:enable Rails/ReflectionClassName
11
+
12
+ before_validation :attach_task_mail_notifications, on: :create
13
+ end
14
+
15
+ def attach_task_mail_notifications
16
+ org_admin_role = Role.find_by(name: 'Organization admin')
17
+ admin_role_ids = ([org_admin_role.id] + org_admin_role.cloned_role_ids)
18
+ role_ids = roles.map(&:id)
19
+
20
+ return unless admin || (role_ids & admin_role_ids).any?
21
+
22
+ notification = MailNotification.find_by(name: 'long_running_tasks')
23
+ return if notification.nil?
24
+
25
+ if user_mail_notifications.none? { |n| n.mail_notification_id == notification.id }
26
+ user_mail_notifications.build(mail_notification_id: notification.id, interval: 'Subscribe')
27
+ end
11
28
  end
12
29
  end
13
30
  end
@@ -8,11 +8,11 @@
8
8
  <div class="dashboard">
9
9
  <table>
10
10
  <tr>
11
- <th>_("ID")</th>
12
- <th>_("Action")</th>
13
- <th>_("Label")</th>
14
- <th>_("State")</th>
15
- <th>_("State updated at")</th>
11
+ <th><%= _("ID") %></th>
12
+ <th><%= _("Action") %></th>
13
+ <th><%= _("Label") %></th>
14
+ <th><%= _("State") %></th>
15
+ <th><%= _("State updated at") %></th>
16
16
  </tr>
17
17
  <% @report.tasks.each do |task| %>
18
18
  <tr>
@@ -26,4 +26,4 @@
26
26
  </table>
27
27
  </div>
28
28
 
29
- <%= link_to 'More details', foreman_tasks_tasks_url(search: @report.query) %>
29
+ <%= link_to _('More details'), foreman_tasks_tasks_url(search: @report.query) %>
@@ -6,11 +6,11 @@
6
6
  More details: <%= foreman_tasks_tasks_url(search: @report.query) %>
7
7
 
8
8
  <% @report.tasks.each do |task| %>
9
- ID: <%= task.id %>
10
- Action: <%= task.action %>
11
- Label: <%= task.label %>
12
- State: <%= task.state %>
13
- State updated at: <%= task.state_updated_at %>
14
- Details: <%= foreman_tasks_task_url(task) %>
9
+ <%= _('ID') %>: <%= task.id %>
10
+ <%= _('Action') %>: <%= task.action %>
11
+ <%= _('Label') %>: <%= task.label %>
12
+ <%= _('State') %>: <%= task.state %>
13
+ <%= _('State updated at') %>: <%= task.state_updated_at %>
14
+ <%= _('Details') %>: <%= foreman_tasks_task_url(task) %>
15
15
 
16
16
  <% end %>
@@ -20,5 +20,19 @@ notifications.each do |notification|
20
20
  raise ::Foreman::Exception.new(N_("Unable to create mail notification: %s"),
21
21
  SeedHelper.format_errors(created_notification))
22
22
  end
23
+
24
+ org_admin_role = Role.find_by(name: 'Organization admin')
25
+
26
+ users = User.left_joins(:roles)
27
+ .joins(:auth_source)
28
+ .where(admin: true)
29
+ .or(User.where(id: UserRole.where(id: [org_admin_role.id] + org_admin_role.cloned_role_ids).select(:owner_id)))
30
+ .where.not(auth_source: { name: 'Hidden' })
31
+ users.each do |user|
32
+ mail = UserMailNotification.create(mail_notification_id: created_notification.id, user_id: user.id, interval: 'Subscribe')
33
+ if mail.nil? || mail.errors.any?
34
+ raise ::Foreman::Exception.new(N_("Unable to enable mail notification to user '%s': %s"), user.login, SeedHelper.format_errors(mail))
35
+ end
36
+ end
23
37
  end
24
38
  end
@@ -1,3 +1,3 @@
1
1
  module ForemanTasks
2
- VERSION = '8.1.1'.freeze
2
+ VERSION = '8.1.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.1.1
4
+ version: 8.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-21 00:00:00.000000000 Z
11
+ date: 2023-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dynflow