class Aebus::Config::Volume

Attributes

config[R]
id[R]

Public Class Methods

new(current_time_utc, volume_id, config, default_backups) click to toggle source
# File lib/config/volume.rb, line 57
def initialize(current_time_utc, volume_id, config, default_backups)

  @config = config
  @id = volume_id
  @backups = default_backups ? default_backups.dup : Hash.new
  if config && config['backups']
    @backups.merge(BackupSchedule.parse_backups_config(current_time_utc,config['backups']))
  end
end

Public Instance Methods

backups_to_be_run(snapshots,current_time_utc) click to toggle source
# File lib/config/volume.rb, line 67
def backups_to_be_run(snapshots,current_time_utc)

  result = Array.new
  max_delay = 0
  @backups.each_pair do |k,v|

    unless recent_backup?(k, snapshots, v.last_deadline)
      result << k
      max_delay = [max_delay, current_time_utc.to_i - v.last_deadline.to_i].max
    end

  end
  [max_delay, result]
end
last_backup() click to toggle source
# File lib/config/volume.rb, line 115
def last_backup
  @backups.values.map{|backup| backup.last_deadline}.max
end
next_backup() click to toggle source
# File lib/config/volume.rb, line 119
def next_backup
  @backups.values.map{|backup| backup.next_deadline}.min
end
purgeable_snapshot_ids(snapshots) click to toggle source
# File lib/config/volume.rb, line 95
def purgeable_snapshot_ids(snapshots)
  return [] unless snapshots
  removables = snapshots.select{|snapshot| snapshot.aebus_removable_snapshot?}
  available_backups = @backups.each_with_object({}) { | (k, v) , h | h[k] = v.keep}
  removables.each do |snapshot|
    snapshot.aebus_tags.each do |tag|
      if (available_backups.include? tag) && (available_backups[tag] > 0) then
          snapshot.keep = true
          available_backups[tag] -= 1
      end
    end
  end

  removables.inject([]) do |acc, snapshot|
    acc << snapshot.id unless snapshot.keep?
    acc
  end

end
recent_backup?(label, snapshots, last_deadline) click to toggle source
# File lib/config/volume.rb, line 82
def recent_backup?(label, snapshots, last_deadline)
  return false unless snapshots
  snapshots.each do |snapshot|

    if snapshot.aebus_tags_include?(label) && (snapshot.start_time > last_deadline)
      return true
    end

  end
  false
end