class Chef::Provider::HouseKeeping

Public Class Methods

new(new_resource) click to toggle source
# File lib/garcon/chef/provider/house_keeping.rb, line 125
def initialize(new_resource)
  search_path = if new_resource.recursive
    ::File.join(new_resource.path, '**', '*')
  else
    ::File.join(new_resource.path, '*')
  end
  @file_map = Hash.new
  @dir_size = 0

  Dir[search_path].select { |f| ::File.file?(f) }.map do |file|
    fstat = ::File.stat(file)
    @dir_size += fstat.size
    @file_map.store(file,
      ctime: fstat.ctime.to_i,
      mtime: fstat.mtime.to_i,
      size:  fstat.size)
  end
end

Public Instance Methods

action_purge(r = new_resource) click to toggle source
# File lib/garcon/chef/provider/house_keeping.rb, line 92
def action_purge(r = new_resource)
  if @current_resource.num_files > 1
    path  = r.path
    age   = r.age
    size  = r.size
    dsize = r.directory_size
    num   = @current_resource.num_files
    purge = {}
    purge.merge!(@current_resource.older_than(age))    unless age.nil?
    purge.merge!(@current_resource.larger_than(size))  unless size.nil?
    purge.merge!(@current_resource.to_dir_size(dsize)) unless dsize.nil?
    num_purged = purge.length

    converge_by "Processed #{num} files from #{path}, " \
                "#{num_purged} purged" do
      if purge.length > 1
        purge.each do |file, data|
          file file do
            force_unlink          r.force_unlink
            manage_symlink_source r.manage_symlink_source
            backup  false
            action :delete
          end
        end
        r.updated_by_last_action(true)
      end
    end
  end
end
exclude(regexp) click to toggle source
# File lib/garcon/chef/provider/house_keeping.rb, line 172
def exclude(regexp)
  @file_map.delete_if { |file| file.match(Regexp.new(regexp)) }
end
larger_than(size) click to toggle source
# File lib/garcon/chef/provider/house_keeping.rb, line 149
def larger_than(size)
  @file_map.select do |file, data|
    c = Humanize.new(size.to_s)
    data[:size].to_f > c.to_size(:b).to_f
  end
end
load_current_resource(r = new_resource) click to toggle source

Load and return the current resource

@return [Chef::Provider::HouseKeeping]

@api private

# File lib/garcon/chef/provider/house_keeping.rb, line 86
def load_current_resource(r = new_resource)
  @current_resource ||= PurgeFlushBinge.new(r)
  @current_resource.exclude(r.exclude) if r.exclude
  @current_resource
end
num_files() click to toggle source
# File lib/garcon/chef/provider/house_keeping.rb, line 176
def num_files
  @file_map.length
end
older_than(days) click to toggle source
# File lib/garcon/chef/provider/house_keeping.rb, line 144
def older_than(days)
  purge_time = Time.now - (60 * 60 * 24 * days.to_i)
  @file_map.select { |file, data| data[:mtime] < purge_time.to_i }
end
to_dir_size(size) click to toggle source
# File lib/garcon/chef/provider/house_keeping.rb, line 156
def to_dir_size(size)
  sorted = @file_map.sort_by { |k,v| v[:mtime] }
  c = Humanize.new(size.to_s)
  delete_size = @dir_size - c.to_size(:b).to_f
  return {} if delete_size <= 0

  f_size = 0
  list   = {}
  sorted.each do |f|
    list[f[0]] = f[1]
    f_size += f[1][:size]
    break if f_size >= delete_size
  end
  list
end
whyrun_supported?() click to toggle source

Boolean indicating if WhyRun is supported by this provider

@return [TrueClass, FalseClass]

@api private

# File lib/garcon/chef/provider/house_keeping.rb, line 77
def whyrun_supported?
  true
end