Sha256: 0a721c178ce597b5b90f82a4915e1fbb0b3e87d3526ef0d6b0fb8e7ea8722121

Contents?: true

Size: 1.62 KB

Versions: 2

Compression:

Stored size: 1.62 KB

Contents

module EY
  module Backup
    class Mongodb < Engine
      register 'mongodb'

      def dump(database_name, basename)
        # Mongo dumps in directories. Compressing 
        file = basename
        
        command = "mongodump --host #{host} -o #{file} --db #{database_name}; tar -cz #{file}"
          
        if gpg?
          command << " | " << GPGEncryptor.command_for(key_id)
          file << GPGEncryptor.extension
        end

        command << " > #{file}"

        run(command)

        file
      end

      def load(database_name, file)
        if database_exists?(database_name)
          cycle_database(database_name)
        else
          create_database(database_name)
        end

        command = "cat #{file}"

        if gpg?
          raise "Cannot load a GPG backup"
        end

        command << " | mongorestore --host #{host} --db #{database_name}"

        run(command)
      end

      def database_exists?(database_name)
        runs?("mongo --host #{host}  --quiet --eval \"for each(var db in db.runCommand('listDatabases').databases) if(db.sizeOnDisk > 1) print(db.name);\" admin | grep '#{database_name}'")
      end

      def drop_database(database_name)
        runs?("mongo --host #{host} #{database_name} --quiet --eval 'printjson(db.dropDatabase());'")
      end

      def create_database(database_name) 
        runs?("mongo --host #{host} #{database_name} --quiet --eval 'db.createCollection('ey_backup');'")
      end

      def cycle_database(database_name)
        drop_database(database_name)
        create_database(database_name)
      end

      def suffix
        /\.(gz)$/
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ey_cloud_server-1.4.28 lib/ey_backup/engines/mongodb_engine.rb
ey_cloud_server-1.4.28.pre lib/ey_backup/engines/mongodb_engine.rb