class Qdumpfs::Option
Attributes
backup_at[R]
cmd[R]
debug[R]
delete_dirs[R]
delete_from[R]
delete_to[R]
dirs[R]
dst[R]
interval_proc[R]
keep_day[R]
keep_month[R]
keep_week[R]
keep_year[R]
logdir[R]
logger[R]
logpath[R]
matcher[R]
reporter[R]
src[R]
verifypath[R]
Public Class Methods
new(opts, dirs)
click to toggle source
# File lib/qdumpfs/option.rb, line 104 def initialize(opts, dirs) @opts = opts @dirs = dirs @src = dirs[0] if dirs.size > 0 @dst = dirs[1] if dirs.size > 1 @cmd = @opts[:c] || 'backup' # @logger = NullLogger.new logfile = 'qdumpfs.log' #ログディレクトリの作成 @logdir = @opts[:logdir] || Dir.pwd Dir.mkdir(@logdir) unless FileTest.directory?(@logdir) @logpath = File.join(@logdir, logfile) @logger = SimpleLogger.new(@logpath) verifyfile = 'verify.txt' @verifypath = File.join(@logdir, verifyfile) @matcher = NullMatcher.new size = @opts[:es] globs = @opts[:eg] patterns = @opts[:ep] if size || globs || patterns @matcher = FileMatcher.new(:size => size, :globs => globs, :patterns => patterns) end # 同期用のオプションは日常使いのpdumpfs-cleanのオプションより期間短めに設定 @limit = @opts[:limit] @keep_year = 100 @keep_month = 12 @keep_week = 12 @keep_day = 30 keep = @opts[:keep] @keep_year = $1.to_i if keep =~ /(\d+)Y/ @keep_month = $1.to_i if keep =~ /(\d+)M/ @keep_week = $1.to_i if keep =~ /(\d+)W/ @keep_day = $1.to_i if keep =~ /(\d+)D/ @delete_from = @opts[:delete_from] @delete_to = @opts[:delete_to] @delete_dirs = @opts[:delete_dirs] || [] @backup_at = @opts[:backup_at] @today = Date.today @debug = @opts[:d] end
Public Instance Methods
detect_delete_dirs(backup_dirs, delete_from, delete_to)
click to toggle source
# File lib/qdumpfs/option.rb, line 228 def detect_delete_dirs(backup_dirs, delete_from, delete_to) backup_dirs.each do |backup_dir| backup_dir.keep = true if delete_from && delete_to if backup_dir.date >= delete_from && backup_dir.date <= delete_to backup_dir.keep = false end elsif delete_from if backup_dir.date >= delete_from backup_dir.keep = false end elsif delete_to if backup_dir.date <= delete_to backup_dir.keep = false end end end end
detect_expire_dirs(backup_dirs)
click to toggle source
# File lib/qdumpfs/option.rb, line 221 def detect_expire_dirs(backup_dirs) detect_year_keep_dirs(backup_dirs) detect_month_keep_dirs(backup_dirs) detect_week_keep_dirs(backup_dirs) detect_day_keep_dirs(backup_dirs) end
dry_run()
click to toggle source
# File lib/qdumpfs/option.rb, line 191 def dry_run @opts[:n] end
limit_sec()
click to toggle source
# File lib/qdumpfs/option.rb, line 195 def limit_sec @limit.to_i * 3600 end
log(msg, console = true)
click to toggle source
# File lib/qdumpfs/option.rb, line 185 def log(msg, console = true) return if (msg.nil? || msg == '') puts msg if console @logger.print(msg) end
open_listfile()
click to toggle source
# File lib/qdumpfs/option.rb, line 255 def open_listfile filename = File.join(@logdir, "list_" + @src.gsub(/[:\/]/, '_') + '.txt') if FileTest.file?(filename) File.unlink(filename) end File.open(filename, 'a') end
open_verifyfile()
click to toggle source
# File lib/qdumpfs/option.rb, line 248 def open_verifyfile if FileTest.file?(@verifypath) File.unlink(@verifypath) end File.open(@verifypath, 'a') end
report(type, filename)
click to toggle source
# File lib/qdumpfs/option.rb, line 156 def report(type, filename) if @opts[:v] stat = File.stat(filename) size = stat.size format_size = convert_bytes(size) msg = format_report_with_size(type, filename, size, format_size) elsif @opts[:r] if type =~ /^new_file/ stat = File.stat(filename) size = stat.size format_size = convert_bytes(size) msg = format_report_with_size(type, filename, size, format_size) end else # 何も指定されていない場合 if type == 'new_file' stat = File.stat(filename) size = stat.size msg = format_report(type, filename, size) end end log(msg) end
report_error(filename, reason)
click to toggle source
# File lib/qdumpfs/option.rb, line 180 def report_error(filename, reason) msg = sprintf("err_file\t%s\t%s\n", filename, reason) log(msg) end
validate_directories(min_count)
click to toggle source
# File lib/qdumpfs/option.rb, line 205 def validate_directories(min_count) @dirs.each do |dir| validate_directory(dir) end if @dirs.size == 2 && windows? # ディレクトリが2つだけ指定されている場合、コピー先はntfsである必要がある unless ntfs?(dst) fstype = get_filesystem_type(dst) raise sprintf("only NTFS is supported but %s is %s.", dst, fstype) end end if @dirs.size < min_count raise "#{min_count} directories required." end end
validate_directory(dir)
click to toggle source
# File lib/qdumpfs/option.rb, line 199 def validate_directory(dir) if dir.nil? || !File.directory?(dir) raise ArgumentError, "No such directory: #{dir}" end end
Private Instance Methods
convert_bytes(bytes)
click to toggle source
# File lib/qdumpfs/option.rb, line 280 def convert_bytes(bytes) if bytes < 1024 sprintf("%dB", bytes) elsif bytes < 1024 * 1000 # 1000kb sprintf("%.1fKB", bytes.to_f / 1024) elsif bytes < 1024 * 1024 * 1000 # 1000mb sprintf("%.1fMB", bytes.to_f / 1024 / 1024) else sprintf("%.1fGB", bytes.to_f / 1024 / 1024 / 1024) end end
detect_day_keep_dirs(backup_dirs)
click to toggle source
# File lib/qdumpfs/option.rb, line 326 def detect_day_keep_dirs(backup_dirs) keep_dirs(backup_dirs, @keep_day) do |i| base_date = @today - i from_date = base_date to_date = base_date [from_date, to_date] end end
detect_month_keep_dirs(backup_dirs)
click to toggle source
# File lib/qdumpfs/option.rb, line 308 def detect_month_keep_dirs(backup_dirs) keep_dirs(backup_dirs, @keep_month) do |i| base_date = @today << i from_date = Date.new(base_date.year, base_date.month, 1) to_date = from_date >> 1 [from_date, to_date] end end
detect_week_keep_dirs(backup_dirs)
click to toggle source
# File lib/qdumpfs/option.rb, line 317 def detect_week_keep_dirs(backup_dirs) keep_dirs(backup_dirs, @keep_week) do |i| base_date = @today - 7 * i from_date = base_date - base_date.cwday # 1 to_date = from_date + 6 [from_date, to_date] end end
detect_year_keep_dirs(backup_dirs)
click to toggle source
# File lib/qdumpfs/option.rb, line 300 def detect_year_keep_dirs(backup_dirs) keep_dirs(backup_dirs, @keep_year) do |i| from_date = Date.new(@today.year - i, 1, 1) to_date = Date.new(@today.year - i, 12, 31) [from_date, to_date] end end
format_report(type, filename, size)
click to toggle source
# File lib/qdumpfs/option.rb, line 264 def format_report(type, filename, size) sprintf("%s\t%s\t%d\n", type, filename, size) end
format_report_as_csv(type, filename)
click to toggle source
# File lib/qdumpfs/option.rb, line 276 def format_report_as_csv(type, filename) sprintf("%s,%s\n", type, filename.encode('cp932', undef: :replace)) end
format_report_with_size(type, filename, size, format_size)
click to toggle source
# File lib/qdumpfs/option.rb, line 268 def format_report_with_size(type, filename, size, format_size) sprintf("%s\t%s\t%d\t%s\n", type, filename, size, format_size) end
format_report_with_size_as_csv(type, filename, size, format_size)
click to toggle source
# File lib/qdumpfs/option.rb, line 272 def format_report_with_size_as_csv(type, filename, size, format_size) sprintf("%s,%s,%d,%s\n", type, filename.encode('cp932', undef: :replace), size, format_size) end
keep_dirs(backup_dirs, num) { |i| ... }
click to toggle source
# File lib/qdumpfs/option.rb, line 292 def keep_dirs(backup_dirs, num) num.downto(0) do |i| from_date, to_date = yield(i) dirs = BackupDir.find(backup_dirs, from_date, to_date) dirs[0].keep = true if dirs.size > 0 end end