Class: Backup::Database::Elasticsearch
- Inherits:
-
Base
- Object
- Base
- Backup::Database::Elasticsearch
- Defined in:
- lib/elasticsearch/extensions/backup.rb
Overview
Integration with the Backup gem [backup.github.io/backup/v4/]
This extension allows to backup Elasticsearch indices as flat JSON files on the disk.
Perform the backup with the Backup gem’s command line utility:
$ backup perform -t elasticsearch_backup
The Backup gem can store your backup files on S3, Dropbox and other cloud providers, send notifications about the operation, and so on; read more in the gem documentation.
Defined Under Namespace
Classes: Error
Instance Attribute Summary collapse
-
#indices ⇒ Object
Returns the value of attribute indices.
-
#mode ⇒ Object
Returns the value of attribute mode.
-
#scroll ⇒ Object
Returns the value of attribute scroll.
-
#size ⇒ Object
Returns the value of attribute size.
-
#url ⇒ Object
Returns the value of attribute url.
Instance Method Summary collapse
- #__perform_single ⇒ Object
- #client ⇒ Object
-
#initialize(model, database_id = nil, &block) ⇒ Elasticsearch
constructor
A new instance of Elasticsearch.
- #logger ⇒ Object
- #path ⇒ Object
- #perform! ⇒ Object
Constructor Details
#initialize(model, database_id = nil, &block) ⇒ Elasticsearch
Returns a new instance of Elasticsearch.
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/elasticsearch/extensions/backup.rb', line 106 def initialize(model, database_id = nil, &block) super @url ||= 'http://localhost:9200' @indices ||= '_all' @size ||= 100 @scroll ||= '10m' @mode ||= 'single' instance_eval(&block) if block_given? end |
Instance Attribute Details
#indices ⇒ Object
Returns the value of attribute indices.
99 100 101 |
# File 'lib/elasticsearch/extensions/backup.rb', line 99 def indices @indices end |
#mode ⇒ Object
Returns the value of attribute mode.
104 105 106 |
# File 'lib/elasticsearch/extensions/backup.rb', line 104 def mode @mode end |
#scroll ⇒ Object
Returns the value of attribute scroll.
99 100 101 |
# File 'lib/elasticsearch/extensions/backup.rb', line 99 def scroll @scroll end |
#size ⇒ Object
Returns the value of attribute size.
99 100 101 |
# File 'lib/elasticsearch/extensions/backup.rb', line 99 def size @size end |
#url ⇒ Object
Returns the value of attribute url.
99 100 101 |
# File 'lib/elasticsearch/extensions/backup.rb', line 99 def url @url end |
Instance Method Details
#__perform_single ⇒ Object
150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/elasticsearch/extensions/backup.rb', line 150 def __perform_single r = client.search index: indices, search_type: 'scan', scroll: scroll, size: size raise Error, "No scroll_id returned in response:\n#{r.inspect}" unless r['_scroll_id'] while r = client.scroll(scroll_id: r['_scroll_id'], scroll: scroll) and not r['hits']['hits'].empty? do r['hits']['hits'].each do |hit| FileUtils.mkdir_p "#{path.join hit['_index'], hit['_type']}" File.open("#{path.join hit['_index'], hit['_type'], hit['_id']}.json", 'w') do |file| file.write MultiJson.dump(hit) end end end end |
#client ⇒ Object
131 132 133 |
# File 'lib/elasticsearch/extensions/backup.rb', line 131 def client @client ||= ::Elasticsearch::Client.new url: url, logger: logger end |
#logger ⇒ Object
139 140 141 142 143 144 145 146 147 |
# File 'lib/elasticsearch/extensions/backup.rb', line 139 def logger logger = Backup::Logger.__send__(:logger) logger.instance_eval do def debug(*args);end # alias :debug :info alias :fatal :warn end logger end |
#path ⇒ Object
135 136 137 |
# File 'lib/elasticsearch/extensions/backup.rb', line 135 def path Pathname.new File.join(dump_path , dump_filename.downcase) end |
#perform! ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/elasticsearch/extensions/backup.rb', line 118 def perform! super case mode when 'single' __perform_single else raise Error, "Unsupported mode [#{mode}]" end log!(:finished) end |