From: Tomas Sedovic tsedovic@redhat.com
https://www.aeolusproject.org/redmine/issues/2140
This makes sure events survive even when the instance is deleted and the deletion event is logged as well. --- src/app/models/event.rb | 10 ++++++++++ src/app/models/instance.rb | 2 +- src/app/models/instance_observer.rb | 6 ++++++ src/spec/models/instance_observer_spec.rb | 7 +++++++ 4 files changed, 24 insertions(+), 1 deletions(-)
diff --git a/src/app/models/event.rb b/src/app/models/event.rb index 1e17f35..c897a33 100644 --- a/src/app/models/event.rb +++ b/src/app/models/event.rb @@ -39,4 +39,14 @@ class Event < ActiveRecord::Base
validates_presence_of :source_id validates_presence_of :source_type + + def source + begin + model = Kernel.const_get(source_type) + model.find source_id + rescue ActiveRecord::RecordNotFound + model = model.const_get('Archive') + model.find source_id + end + end end diff --git a/src/app/models/instance.rb b/src/app/models/instance.rb index 9c06a30..e80e224 100644 --- a/src/app/models/instance.rb +++ b/src/app/models/instance.rb @@ -78,7 +78,7 @@ class Instance < ActiveRecord::Base has_many :permissions, :as => :permission_object, :dependent => :destroy, :include => [:role], :order => "permissions.id ASC" - has_many :events, :as => :source, :dependent => :destroy + has_many :events, :as => :source after_create "assign_owner_roles(owner)"
validates_presence_of :pool_id diff --git a/src/app/models/instance_observer.rb b/src/app/models/instance_observer.rb index a7b53ed..983a04d 100644 --- a/src/app/models/instance_observer.rb +++ b/src/app/models/instance_observer.rb @@ -88,6 +88,12 @@ class InstanceObserver < ActiveRecord::Observer end end
+ def after_destroy(instance) + event = Event.new(:source => instance, :event_time => DateTime.now, + :summary => "deleted") + event.save! + end + end
InstanceObserver.instance diff --git a/src/spec/models/instance_observer_spec.rb b/src/spec/models/instance_observer_spec.rb index c4d0a42..9df12fc 100644 --- a/src/spec/models/instance_observer_spec.rb +++ b/src/spec/models/instance_observer_spec.rb @@ -189,6 +189,13 @@ describe InstanceObserver do @instance = Instance.find(@instance.id) @instance.events.should have(3).items @instance.events[2].summary.should match /state.*stopped/ + + @instance.destroy + + Event.all.should have(4).items + Event.last.summary.should match /deleted/ + Event.last.source.id.should == @instance.id + Event.last.source.name.should == @instance.name end
it "should destroy the instance key when the instance is stopped" do