Browse Source

Fixes #3769 - Usage of inactive object attributes in SLAs will crash admin SLA interface

Mantas 3 years ago
parent
commit
4c72d5b9d9

+ 23 - 9
app/models/object_manager/attribute.rb

@@ -678,7 +678,7 @@ to send no browser reload event, pass false
 
 =begin
 
-where attributes are used by triggers, overviews or schedulers
+where attributes are used in conditions
 
   result = ObjectManager::Attribute.attribute_to_references_hash
 
@@ -696,22 +696,36 @@ where attributes are used by triggers, overviews or schedulers
 =end
 
   def self.attribute_to_references_hash
-    objects = Trigger.select(:name, :condition) + Overview.select(:name, :condition) + Job.select(:name, :condition)
     attribute_list = {}
-    objects.each do |item|
-      item.condition.each do |condition_key, _condition_attributes|
-        attribute_list[condition_key] ||= {}
-        attribute_list[condition_key][item.class.name] ||= []
-        next if attribute_list[condition_key][item.class.name].include?(item.name)
 
-        attribute_list[condition_key][item.class.name].push item.name
+    attribute_to_references_hash_objects
+      .map { |elem| elem.select(:name, :condition) }
+      .flatten
+      .each do |item|
+        item.condition.each do |condition_key, _condition_attributes|
+          attribute_list[condition_key] ||= {}
+          attribute_list[condition_key][item.class.name] ||= []
+          next if attribute_list[condition_key][item.class.name].include?(item.name)
+
+          attribute_list[condition_key][item.class.name].push item.name
+        end
       end
-    end
+
     attribute_list
   end
 
 =begin
 
+models that may reference attributes
+
+=end
+
+  def self.attribute_to_references_hash_objects
+    Models.all.keys.select { |elem| elem.include? ChecksConditionValidation }
+  end
+
+=begin
+
 is certain attribute used by triggers, overviews or schedulers
 
   ObjectManager::Attribute.attribute_used_by_references?('Ticket', 'attribute_name')

+ 1 - 0
app/models/report/profile.rb

@@ -2,6 +2,7 @@
 
 class Report::Profile < ApplicationModel
   self.table_name = 'report_profiles'
+  include ChecksConditionValidation
   validates :name, presence: true
   store     :condition
 

+ 8 - 0
spec/models/object_manager/attribute_spec.rb

@@ -148,4 +148,12 @@ RSpec.describe ObjectManager::Attribute, type: :model do
       it { is_expected.to be_valid }
     end
   end
+
+  describe 'Class methods:' do
+    describe '.attribute_to_references_hash_objects' do
+      it 'returns classes with conditions' do
+        expect(described_class.attribute_to_references_hash_objects).to match_array [Trigger, Overview, Job, Sla, Report::Profile ]
+      end
+    end
+  end
 end