class Duracloud::SyncValidation
Constants
- CHANGED
- CheckResult
- FOUND
- MANIFEST_CSV_OPTS
- MD5_CSV_OPTS
- MISSING
- TWO_SPACES
Public Class Methods
call(*args)
click to toggle source
# File lib/duracloud/sync_validation.rb, line 22 def self.call(*args) new(*args).call end
Public Instance Methods
audit()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 60 def audit outfile = File.join(FileUtils.pwd, audit_filename) infile = File.join(FileUtils.pwd, converted_manifest_filename) pid = spawn("md5deep", "-X", infile, "-l", "-r", ".", chdir: content_dir, out: outfile) Process.wait(pid) case $?.exitstatus when 0 true when 1, 2 recheck when 64, 128 raise Error, "md5deep error." else raise Error, "Unknown error." end end
call()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 36 def call in_work_dir do download_manifest convert_manifest audit end end
convert_manifest()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 52 def convert_manifest File.open(converted_manifest_filename, "w") do |f| CSV.foreach(manifest_filename, MANIFEST_CSV_OPTS) do |row| f.puts [ row[2], row[1] ].join(TWO_SPACES) end end end
download_manifest()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 44 def download_manifest File.open(manifest_filename, "w") do |manifest| Manifest.download(space_id, store_id) do |chunk| manifest.write(chunk) end end end
in_work_dir() { || ... }
click to toggle source
# File lib/duracloud/sync_validation.rb, line 26 def in_work_dir if work_dir FileUtils.cd(work_dir) { yield } else Dir.mktmpdir("#{space_id}-validation-") do |tmpdir| FileUtils.cd(tmpdir) { yield } end end end
recheck()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 77 def recheck success = true recheck_file do |csv| do_recheck.each do |result| csv << result.to_a success &&= result.found? end end success end
Private Instance Methods
audit_filename()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 142 def audit_filename filename("audit.txt") end
check(content_id, md5 = nil)
click to toggle source
# File lib/duracloud/sync_validation.rb, line 104 def check(content_id, md5 = nil) status = begin exist?(content_id, md5) ? FOUND : MISSING rescue MessageDigestError => e CHANGED end CheckResult.new(status, md5 || "-", content_id) end
converted_manifest_filename()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 138 def converted_manifest_filename filename("converted-manifest.txt") end
do_recheck()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 117 def do_recheck Enumerator.new do |e| CSV.foreach(audit_filename, MD5_CSV_OPTS) do |md5, path| content_id = path.sub(/^\.\//, "") e << check(content_id, md5) end end end
exist?(content_id, md5 = nil)
click to toggle source
# File lib/duracloud/sync_validation.rb, line 113 def exist?(content_id, md5 = nil) Duracloud::Content.exist?(space_id: space_id, store_id: store_id, content_id: content_id, md5: md5) end
filename(suffix)
click to toggle source
# File lib/duracloud/sync_validation.rb, line 130 def filename(suffix) [ prefix, suffix ].join("-") end
manifest_filename()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 134 def manifest_filename filename("manifest.tsv") end
prefix()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 126 def prefix space_id end
recheck_file() { |csv| ... }
click to toggle source
# File lib/duracloud/sync_validation.rb, line 96 def recheck_file if work_dir CSV.open(recheck_filename, "w", col_sep: "\t") { |csv| yield(csv) } else CSV($stdout, col_sep: "\t") { |csv| yield(csv) } end end
recheck_filename()
click to toggle source
# File lib/duracloud/sync_validation.rb, line 146 def recheck_filename filename("recheck.txt") end