From bb8168c33f9501fe877345a7bbc7b7f7b64cdfc7 Mon Sep 17 00:00:00 2001 From: Stefan Wintermeyer Date: Tue, 5 Feb 2013 12:40:42 +0100 Subject: Added a BackupJob scaffold. --- app/models/backup_job.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 app/models/backup_job.rb (limited to 'app/models/backup_job.rb') diff --git a/app/models/backup_job.rb b/app/models/backup_job.rb new file mode 100644 index 0000000..d579b79 --- /dev/null +++ b/app/models/backup_job.rb @@ -0,0 +1,14 @@ +class BackupJob < ActiveRecord::Base + attr_accessible :started_at, :finished_at, :state, :directory, :size_of_the_backup + + after_save :start_the_backup + + private + def start_the_backup + if self.finished_at.nil? + sh "backup perform --trigger gs5 --config_file #{Rails.root.join('config','backup.rb')}" + self.finished_at = Time.now + self.save + end + end +end -- cgit v1.2.3 From c7389cb6f1a305bc7e5cfefd9548c1e1bf7b6018 Mon Sep 17 00:00:00 2001 From: Stefan Wintermeyer Date: Tue, 5 Feb 2013 13:44:10 +0100 Subject: Bugfix --- app/models/backup_job.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'app/models/backup_job.rb') diff --git a/app/models/backup_job.rb b/app/models/backup_job.rb index d579b79..5149553 100644 --- a/app/models/backup_job.rb +++ b/app/models/backup_job.rb @@ -1,12 +1,12 @@ class BackupJob < ActiveRecord::Base attr_accessible :started_at, :finished_at, :state, :directory, :size_of_the_backup - after_save :start_the_backup + after_create :start_the_backup private def start_the_backup if self.finished_at.nil? - sh "backup perform --trigger gs5 --config_file #{Rails.root.join('config','backup.rb')}" + system "backup perform --trigger gs5 --config_file #{Rails.root.join('config','backup.rb')}" self.finished_at = Time.now self.save end -- cgit v1.2.3 From 75b36967fed9db8268391ac10b02f5c0870c32ca Mon Sep 17 00:00:00 2001 From: Stefan Wintermeyer Date: Tue, 5 Feb 2013 15:11:56 +0100 Subject: Finetuning backup. --- app/models/backup_job.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'app/models/backup_job.rb') diff --git a/app/models/backup_job.rb b/app/models/backup_job.rb index 5149553..b0a588f 100644 --- a/app/models/backup_job.rb +++ b/app/models/backup_job.rb @@ -6,8 +6,9 @@ class BackupJob < ActiveRecord::Base private def start_the_backup if self.finished_at.nil? - system "backup perform --trigger gs5 --config_file #{Rails.root.join('config','backup.rb')}" + system "backup perform --trigger GS5 --config_file #{Rails.root.join('config','backup.rb')}" self.finished_at = Time.now + self.status = 'done' self.save end end -- cgit v1.2.3 From b1f9f3b2c39d31d0621da36420318406f33a1f92 Mon Sep 17 00:00:00 2001 From: Stefan Wintermeyer Date: Tue, 5 Feb 2013 16:21:02 +0100 Subject: DelayedJob table upgrade. --- app/models/backup_job.rb | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'app/models/backup_job.rb') diff --git a/app/models/backup_job.rb b/app/models/backup_job.rb index b0a588f..a90726c 100644 --- a/app/models/backup_job.rb +++ b/app/models/backup_job.rb @@ -1,14 +1,25 @@ class BackupJob < ActiveRecord::Base attr_accessible :started_at, :finished_at, :state, :directory, :size_of_the_backup - after_create :start_the_backup + after_create :initiate_backup private - def start_the_backup - if self.finished_at.nil? + def initiate_backup + self.delay.make_a_backup + end + + def make_a_backup + if self.finished_at.nil? + original_directories = Dir.glob('/var/backups/GS5/*') system "backup perform --trigger GS5 --config_file #{Rails.root.join('config','backup.rb')}" - self.finished_at = Time.now - self.status = 'done' + self.directory = (Dir.glob('/var/backups/GS5/*') - original_directories).first + if self.directory.blank? + self.state = 'unsuccessful' + else + self.size_of_the_backup = (`du -hs #{new_directory}`).split(/\t/).first + self.finished_at = Time.now + self.state = 'successful' + end self.save end end -- cgit v1.2.3 From 3edd6e58ea3f5d25068ea9d47f639ae89e5f2c0c Mon Sep 17 00:00:00 2001 From: Stefan Wintermeyer Date: Wed, 6 Feb 2013 11:07:04 +0100 Subject: Improved the backup. --- app/models/backup_job.rb | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'app/models/backup_job.rb') diff --git a/app/models/backup_job.rb b/app/models/backup_job.rb index a90726c..c9bde2b 100644 --- a/app/models/backup_job.rb +++ b/app/models/backup_job.rb @@ -1,26 +1,43 @@ class BackupJob < ActiveRecord::Base attr_accessible :started_at, :finished_at, :state, :directory, :size_of_the_backup + before_create :set_state_to_queued after_create :initiate_backup + after_destroy :delete_the_backup_directory private + def set_state_to_queued + self.state = 'queued' + self.started_at = Time.now + end + def initiate_backup self.delay.make_a_backup end def make_a_backup - if self.finished_at.nil? + if self.finished_at.nil? && self.state == 'queued' + self.state = 'running' + self.save original_directories = Dir.glob('/var/backups/GS5/*') system "backup perform --trigger GS5 --config_file #{Rails.root.join('config','backup.rb')}" self.directory = (Dir.glob('/var/backups/GS5/*') - original_directories).first if self.directory.blank? - self.state = 'unsuccessful' + self.state = 'failed' else - self.size_of_the_backup = (`du -hs #{new_directory}`).split(/\t/).first + file = File::Stat.new(self.directory) + self.size_of_the_backup = file.size self.finished_at = Time.now self.state = 'successful' end self.save end end + + def delete_the_backup_directory + if !self.directory.blank? + require 'fileutils' + FileUtils.rm_rf self.directory + end + end end -- cgit v1.2.3 From 07d49f54067cfb8666f650323c7ffefe1e860b24 Mon Sep 17 00:00:00 2001 From: Stefan Wintermeyer Date: Wed, 6 Feb 2013 16:03:43 +0100 Subject: Use CarrierWave to store the backup file. --- app/models/backup_job.rb | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) (limited to 'app/models/backup_job.rb') diff --git a/app/models/backup_job.rb b/app/models/backup_job.rb index c9bde2b..c1f12e4 100644 --- a/app/models/backup_job.rb +++ b/app/models/backup_job.rb @@ -1,6 +1,8 @@ class BackupJob < ActiveRecord::Base attr_accessible :started_at, :finished_at, :state, :directory, :size_of_the_backup + mount_uploader :backup_file, BackupFileUploader + before_create :set_state_to_queued after_create :initiate_backup after_destroy :delete_the_backup_directory @@ -16,17 +18,26 @@ class BackupJob < ActiveRecord::Base end def make_a_backup + backup_directory = '/var/backups/GS5' + backup_name_prefix = 'GS5-backup-' if self.finished_at.nil? && self.state == 'queued' self.state = 'running' self.save - original_directories = Dir.glob('/var/backups/GS5/*') + original_directories = Dir.glob("#{backup_directory}/*") system "backup perform --trigger GS5 --config_file #{Rails.root.join('config','backup.rb')}" - self.directory = (Dir.glob('/var/backups/GS5/*') - original_directories).first - if self.directory.blank? + tmp_backup_directory = (Dir.glob("#{backup_directory}/*") - original_directories).first + if tmp_backup_directory.blank? self.state = 'failed' else - file = File::Stat.new(self.directory) + system "cd #{backup_directory} && tar czf #{backup_name_prefix}#{tmp_backup_directory}.tar.gz #{tmp_backup_directory}" + require 'fileutils' + FileUtils.rm_rf tmp_backup_directory + file = File::Stat.new("#{backup_directory}/#{backup_name_prefix}#{tmp_backup_directory}.tar.gz") + self.size_of_the_backup = file.size + + self.backup_file = File.open("#{backup_directory}/#{backup_name_prefix}#{tmp_backup_directory}.tar.gz") + self.finished_at = Time.now self.state = 'successful' end @@ -35,9 +46,9 @@ class BackupJob < ActiveRecord::Base end def delete_the_backup_directory - if !self.directory.blank? - require 'fileutils' - FileUtils.rm_rf self.directory - end + # if !tmp_backup_directory.blank? + # require 'fileutils' + # FileUtils.rm_rf tmp_backup_directory + # end end end -- cgit v1.2.3 From 72f100c680ddcf9c36448ae3ee367eab19052adc Mon Sep 17 00:00:00 2001 From: Stefan Wintermeyer Date: Thu, 7 Feb 2013 09:27:43 +0100 Subject: Use CarrierWave to store the tar.gz. Removed size_of_the_backup attribute. --- app/models/backup_job.rb | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'app/models/backup_job.rb') diff --git a/app/models/backup_job.rb b/app/models/backup_job.rb index c1f12e4..78d95a7 100644 --- a/app/models/backup_job.rb +++ b/app/models/backup_job.rb @@ -5,7 +5,6 @@ class BackupJob < ActiveRecord::Base before_create :set_state_to_queued after_create :initiate_backup - after_destroy :delete_the_backup_directory private def set_state_to_queued @@ -29,14 +28,14 @@ class BackupJob < ActiveRecord::Base if tmp_backup_directory.blank? self.state = 'failed' else - system "cd #{backup_directory} && tar czf #{backup_name_prefix}#{tmp_backup_directory}.tar.gz #{tmp_backup_directory}" + system "cd #{backup_directory} && tar czf #{backup_name_prefix}#{File.basename(tmp_backup_directory)}.tar.gz #{File.basename(tmp_backup_directory)}" require 'fileutils' FileUtils.rm_rf tmp_backup_directory - file = File::Stat.new("#{backup_directory}/#{backup_name_prefix}#{tmp_backup_directory}.tar.gz") + file = File::Stat.new("#{backup_directory}/#{backup_name_prefix}#{File.basename(tmp_backup_directory)}.tar.gz") - self.size_of_the_backup = file.size + self.directory = File.basename(tmp_backup_directory) - self.backup_file = File.open("#{backup_directory}/#{backup_name_prefix}#{tmp_backup_directory}.tar.gz") + self.backup_file = File.open("#{backup_directory}/#{backup_name_prefix}#{File.basename(tmp_backup_directory)}.tar.gz") self.finished_at = Time.now self.state = 'successful' @@ -45,10 +44,4 @@ class BackupJob < ActiveRecord::Base end end - def delete_the_backup_directory - # if !tmp_backup_directory.blank? - # require 'fileutils' - # FileUtils.rm_rf tmp_backup_directory - # end - end end -- cgit v1.2.3 From 5e8237d8a8cf17009189fcf0259fb1b8a50ab429 Mon Sep 17 00:00:00 2001 From: Stefan Wintermeyer Date: Thu, 7 Feb 2013 10:49:01 +0100 Subject: Bugfixes. --- app/models/backup_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/models/backup_job.rb') diff --git a/app/models/backup_job.rb b/app/models/backup_job.rb index 78d95a7..8bb7959 100644 --- a/app/models/backup_job.rb +++ b/app/models/backup_job.rb @@ -1,5 +1,5 @@ class BackupJob < ActiveRecord::Base - attr_accessible :started_at, :finished_at, :state, :directory, :size_of_the_backup + attr_accessible :started_at, :finished_at, :state, :directory mount_uploader :backup_file, BackupFileUploader -- cgit v1.2.3 From 515dcaf96c05e4b5d6aaaf4ff1e438ebf9a3c56a Mon Sep 17 00:00:00 2001 From: Stefan Wintermeyer Date: Thu, 7 Feb 2013 14:30:21 +0100 Subject: Breadcrumbs for BackupJobs. --- app/models/backup_job.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'app/models/backup_job.rb') diff --git a/app/models/backup_job.rb b/app/models/backup_job.rb index 8bb7959..96574a7 100644 --- a/app/models/backup_job.rb +++ b/app/models/backup_job.rb @@ -6,6 +6,10 @@ class BackupJob < ActiveRecord::Base before_create :set_state_to_queued after_create :initiate_backup + def to_s + self.started_at.to_s + end + private def set_state_to_queued self.state = 'queued' -- cgit v1.2.3