def perform!
@started_at = Time.now
@time = @started_at.strftime("%Y.%m.%d.%H.%M.%S")
log!(:started)
if databases.any? or archives.any?
procedures.each do |procedure|
(procedure.call; next) if procedure.is_a?(Proc)
procedure.each(&:perform!)
end
end
syncers.each(&:perform!)
notifiers.each(&:perform!)
log!(:finished)
rescue Exception => err
fatal = !err.is_a?(StandardError)
err = Errors::ModelError.wrap(err, "Backup for \#{label} (\#{trigger}) Failed!\nAn Error occured which has caused this Backup to abort before completion.\n")
Logger.error err
Logger.error "\nBacktrace:\n\s\s" + err.backtrace.join("\n\s\s") + "\n\n"
Cleaner.warnings(self)
if fatal
Logger.error Errors::ModelError.new("This Error was Fatal and Backup will now exit.\nIf you have other Backup jobs (triggers) configured to run,\nthey will not be processed.\n")
else
Logger.message Errors::ModelError.new("If you have other Backup jobs (triggers) configured to run,\nBackup will now attempt to continue...\n")
end
notifiers.each do |n|
begin
n.perform!(true)
rescue Exception; end
end
exit(1) if fatal
end