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