Class: Chef::Provider::HouseKeeping::PurgeFlushBinge
- Defined in:
- lib/garcon/chef/provider/house_keeping.rb
Instance Method Summary collapse
- #exclude(regexp) ⇒ Object
-
#initialize(new_resource) ⇒ PurgeFlushBinge
constructor
A new instance of PurgeFlushBinge.
- #larger_than(size) ⇒ Object
- #num_files ⇒ Object
- #older_than(days) ⇒ Object
- #to_dir_size(size) ⇒ Object
Constructor Details
#initialize(new_resource) ⇒ PurgeFlushBinge
Returns a new instance of PurgeFlushBinge.
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# 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 |
Instance Method Details
#exclude(regexp) ⇒ Object
172 173 174 |
# 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) ⇒ Object
149 150 151 152 153 154 |
# 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 |
#num_files ⇒ Object
176 177 178 |
# File 'lib/garcon/chef/provider/house_keeping.rb', line 176 def num_files @file_map.length end |
#older_than(days) ⇒ Object
144 145 146 147 |
# 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) ⇒ Object
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# 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 |