summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/backup_job.rb27
-rw-r--r--app/uploaders/backup_file_uploader.rb55
-rw-r--r--config/backup.rb2
-rw-r--r--db/migrate/20130206144829_add_backup_file_to_backup_job.rb5
-rw-r--r--db/schema.rb23
5 files changed, 102 insertions, 10 deletions
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
diff --git a/app/uploaders/backup_file_uploader.rb b/app/uploaders/backup_file_uploader.rb
new file mode 100644
index 0000000..8b126a9
--- /dev/null
+++ b/app/uploaders/backup_file_uploader.rb
@@ -0,0 +1,55 @@
+# encoding: utf-8
+
+class BackupFileUploader < CarrierWave::Uploader::Base
+
+ # Include RMagick or MiniMagick support:
+ # include CarrierWave::RMagick
+ # include CarrierWave::MiniMagick
+
+ # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
+ # include Sprockets::Helpers::RailsHelper
+ # include Sprockets::Helpers::IsolatedHelper
+
+ # Choose what kind of storage to use for this uploader:
+ storage :file
+ # storage :fog
+
+ # Override the directory where uploaded files will be stored.
+ # This is a sensible default for uploaders that are meant to be mounted:
+ def store_dir
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
+ end
+
+ # Provide a default URL as a default if there hasn't been a file uploaded:
+ # def default_url
+ # # For Rails 3.1+ asset pipeline compatibility:
+ # # asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
+ #
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
+ # end
+
+ # Process files as they are uploaded:
+ # process :scale => [200, 300]
+ #
+ # def scale(width, height)
+ # # do something
+ # end
+
+ # Create different versions of your uploaded files:
+ # version :thumb do
+ # process :scale => [50, 50]
+ # end
+
+ # Add a white list of extensions which are allowed to be uploaded.
+ # For images you might use something like this:
+ # def extension_white_list
+ # %w(jpg jpeg gif png)
+ # end
+
+ # Override the filename of the uploaded files:
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
+ # def filename
+ # "something.jpg" if original_filename
+ # end
+
+end
diff --git a/config/backup.rb b/config/backup.rb
index d57a47e..d1cbcdc 100644
--- a/config/backup.rb
+++ b/config/backup.rb
@@ -11,7 +11,7 @@ Backup::Model.new(:GS5, 'GS5 backup') do
# Split the backup file in to chunks of 2 GB
# if the backup file size exceeds 2 GB
#
- split_into_chunks_of 2048
+ # split_into_chunks_of 2048
##
# MySQL [Database]
diff --git a/db/migrate/20130206144829_add_backup_file_to_backup_job.rb b/db/migrate/20130206144829_add_backup_file_to_backup_job.rb
new file mode 100644
index 0000000..e02f2b3
--- /dev/null
+++ b/db/migrate/20130206144829_add_backup_file_to_backup_job.rb
@@ -0,0 +1,5 @@
+class AddBackupFileToBackupJob < ActiveRecord::Migration
+ def change
+ add_column :backup_jobs, :backup_file, :string
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 5d4b5e3..5e51305 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20130202140927) do
+ActiveRecord::Schema.define(:version => 20130206144829) do
create_table "access_authorizations", :force => true do |t|
t.string "access_authorizationable_type"
@@ -124,6 +124,26 @@ ActiveRecord::Schema.define(:version => 20130202140927) do
t.string "music"
end
+ create_table "backup_jobs", :force => true do |t|
+ t.datetime "started_at"
+ t.datetime "finished_at"
+ t.string "state"
+ t.string "directory"
+ t.integer "size_of_the_backup"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.string "backup_file"
+ end
+
+ create_table "backups", :force => true do |t|
+ t.datetime "start_at"
+ t.datetime "end_at"
+ t.string "directory"
+ t.string "size"
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ end
+
create_table "call_forward_cases", :force => true do |t|
t.string "value"
t.datetime "created_at", :null => false
@@ -358,6 +378,7 @@ ActiveRecord::Schema.define(:version => 20130202140927) do
t.string "locked_by"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
+ t.string "queue"
end
add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"