app/models/vm_or_template/snapshotting.rb
module VmOrTemplate::Snapshotting
extend ActiveSupport::Concern
included do
has_many :snapshots, :dependent => :destroy
virtual_total :v_total_snapshots, :snapshots
virtual_column :v_snapshot_oldest_name, :type => :string, :uses => :snapshots
virtual_column :v_snapshot_oldest_description, :type => :string, :uses => :snapshots
virtual_column :v_snapshot_oldest_total_size, :type => :integer, :uses => :snapshots
virtual_column :v_snapshot_oldest_timestamp, :type => :datetime, :uses => :snapshots
virtual_column :v_snapshot_newest_name, :type => :string, :uses => :snapshots
virtual_column :v_snapshot_newest_description, :type => :string, :uses => :snapshots
virtual_column :v_snapshot_newest_total_size, :type => :integer, :uses => :snapshots
virtual_column :v_snapshot_newest_timestamp, :type => :datetime, :uses => :snapshots
end
def newest_snapshot
snapshots.max_by(&:create_time)
end
def oldest_snapshot
snapshots.min_by(&:create_time)
end
def v_snapshot_oldest_name
oldest = oldest_snapshot
return nil if oldest.nil?
oldest.name
end
def v_snapshot_oldest_description
oldest = oldest_snapshot
return nil if oldest.nil?
oldest.description
end
def v_snapshot_oldest_total_size
oldest = oldest_snapshot
return nil if oldest.nil?
oldest.total_size
end
def v_snapshot_oldest_timestamp
oldest = oldest_snapshot
return nil if oldest.nil?
oldest.create_time
end
def v_snapshot_newest_name
newest = newest_snapshot
return nil if newest.nil?
newest.name
end
def v_snapshot_newest_description
newest = newest_snapshot
return nil if newest.nil?
newest.description
end
def v_snapshot_newest_total_size
newest = newest_snapshot
return nil if newest.nil?
newest.total_size
end
def v_snapshot_newest_timestamp
newest = newest_snapshot
return nil if newest.nil?
newest.create_time
end
def snapshot_storage
snapshots.inject(0) { |t, s| t + s.total_size.to_i }
end
end