| Class | Nearline::Models::Manifest |
| In: |
lib/nearline/manifest.rb
|
| Parent: | ActiveRecord::Base |
| backup_exclusions | [RW] | Just needed when you create a manifest |
| backup_paths | [RW] | Just needed when you create a manifest |
# File lib/nearline/manifest.rb, line 52
52: def self.backup(system, backup_paths, backup_exclusions)
53: manifest = self.new(:system => system)
54: manifest.save!
55: manifest.backup(backup_paths, backup_exclusions)
56: end
# File lib/nearline/manifest.rb, line 45
45: def self.new_for_name(system_name)
46: system = System.for_name(system_name)
47: system.manifests << m = Nearline::Models::Manifest.new
48: system.save!
49: m
50: end
# File lib/nearline/manifest.rb, line 123
123: def self.restore_all_missing(system, latest_date_time = Time.now)
124: manifest = system.latest_manifest_as_of(latest_date_time)
125: manifest.iterate_all_missing do |af|
126: af.restore
127: end
128: end
# File lib/nearline/manifest.rb, line 130
130: def self.what_would_restore(system, latest_date_time = Time.now)
131: manifest = system.latest_manifest_as_of(latest_date_time)
132: manifest.iterate_all_missing {}
133: end
# File lib/nearline/manifest.rb, line 149
149: def add_log(message)
150: puts message
151: log = Nearline::Models::Log.new({:message => message, :manifest_id => self.id})
152: log.save!
153: end
# File lib/nearline/manifest.rb, line 58
58: def backup(backup_paths, backup_exclusions)
59: FileFinder.recurse(backup_paths, backup_exclusions) do |file_path|
60: handle_file_path(file_path)
61: end
62: finish_remaining_file_infos
63:
64: self.completed_at = Time.now
65: self.save!
66: self
67: end
# File lib/nearline/manifest.rb, line 155
155: def before_destroy
156: destroy_archived_files_with_content
157: destroy_archived_files_without_content
158: destroy_archived_files_manifests
159: destroy_logs
160: self.destroy_without_habtm_shim_for_archived_files
161: end
# File lib/nearline/manifest.rb, line 104
104: def existing_archived_file_lookup
105: return {} if @file_infos.size == 0
106: path_hashes = @file_infos.collect {|e| "'#{e.path_hash}'"}.join(", ")
107: conditions = "path_hash in (#{path_hashes})"
108: hits = ArchivedFile.find(:all, :conditions => conditions)
109: existing_files = {}
110: hits.each { |e| existing_files[e.path_hash] = e }
111: existing_files
112: end
# File lib/nearline/manifest.rb, line 78
78: def finish_remaining_file_infos
79: process_file_infos
80: end
# File lib/nearline/manifest.rb, line 69
69: def handle_file_path(file_path)
70: @file_infos = @file_infos || []
71: @file_infos << FileInformation.new(file_path, self)
72:
73: if @file_infos.size > @@max_files_cached
74: process_file_infos
75: end
76: end
Iterate all missing files from this manifest, yielding each
# File lib/nearline/manifest.rb, line 136
136: def iterate_all_missing
137: files_iterated = []
138: self.archived_files.each do |af|
139: begin
140: File.lstat(af.path)
141: rescue
142: yield af
143: files_iterated << af.path
144: end
145: end
146: return files_iterated
147: end
# File lib/nearline/manifest.rb, line 82
82: def process_file_infos
83: return if @file_infos.size == 0
84:
85: lookup = existing_archived_file_lookup
86: @file_infos.each do |file_info|
87: $stdout.write file_info.file_path + " "
88: if (af = lookup[file_info.path_hash])
89: self.archived_files << af
90: else
91: af = ArchivedFile.create_for(file_info)
92: end
93: if (!af.nil?)
94: $stdout.write "#{Time.at(af.mtime).asctime}"
95: if (!af.file_content.nil?)
96: $stdout.write" (#{af.file_content.file_size} bytes)"
97: end
98: $stdout.write("\n")
99: end
100: end
101: @file_infos = []
102: end
A simple string reporting the performance of the manifest
# File lib/nearline/manifest.rb, line 247
247: def summary
248: completed = (completed_at.nil?) ? "DNF" : completed_at
249: "#{system.name} started: #{created_at}\n finished: #{completed}\n " +
250: "#{archived_files.size} files\n #{logs.size} Errors reported"
251: end