-
Notifications
You must be signed in to change notification settings - Fork 31
/
Copy pathdelete_host.rb
77 lines (59 loc) · 1.85 KB
/
delete_host.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# frozen_string_literal: true
# Job meant to delete hosts and associated objects asynchronously
class DeleteHost
include Sidekiq::Worker
MODELS = [RuleResult, TestResult, PolicyHost].freeze
# https://github.com/yabeda-rb/yabeda-sidekiq#custom-tags
def yabeda_tags(message, *_args)
{ qe: OpenshiftEnvironment.qe_account?(message['org_id']) }
end
def perform(message)
host_id = message['id']
begin
num_removed = remove_related(host_id)
rescue StandardError => e
audit_fail(host_id, e)
raise
end
audit_success(host_id) if num_removed.positive?
end
private
def remove_related(host_id)
Sidekiq.logger.info("Deleting related records for host #{host_id}")
[
remove_related_rule_results(host_id),
remove_related_test_results(host_id),
remove_related_policy_hosts(host_id)
].sum
end
def remove_related_rule_results(host_id)
RuleResult.where(host_id: host_id).delete_all
end
def remove_related_test_results(host_id)
to_remove = TestResult.where(host_id: host_id)
profiles_to_adjust = Profile.where(id: to_remove.pluck(:profile_id).uniq)
num_removed = to_remove.delete_all
profiles_to_adjust.find_each do |profile|
profile.calculate_score!
profile.policy.update_counters!
end
num_removed
end
def remove_related_policy_hosts(host_id)
to_remove = PolicyHost.where(host_id: host_id)
policies_to_adjust = Policy.where(id: to_remove.pluck(:policy_id).uniq)
num_removed = to_remove.delete_all
policies_to_adjust.find_each(&:update_counters!)
num_removed
end
def audit_success(host_id)
Rails.logger.audit_success(
"Deleted related records for host #{host_id}"
)
end
def audit_fail(host_id, exc)
Rails.logger.audit_fail(
"Failed to delete related records for host #{host_id}: #{exc}"
)
end
end