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.
116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/elasticsearch/extensions/backup.rb', line 116 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.
109 110 111 |
# File 'lib/elasticsearch/extensions/backup.rb', line 109 def indices @indices end |
#mode ⇒ Object
Returns the value of attribute mode.
114 115 116 |
# File 'lib/elasticsearch/extensions/backup.rb', line 114 def mode @mode end |
#scroll ⇒ Object
Returns the value of attribute scroll.
109 110 111 |
# File 'lib/elasticsearch/extensions/backup.rb', line 109 def scroll @scroll end |
#size ⇒ Object
Returns the value of attribute size.
109 110 111 |
# File 'lib/elasticsearch/extensions/backup.rb', line 109 def size @size end |
#url ⇒ Object
Returns the value of attribute url.
109 110 111 |
# File 'lib/elasticsearch/extensions/backup.rb', line 109 def url @url end |
Instance Method Details
#__perform_single ⇒ Object
160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/elasticsearch/extensions/backup.rb', line 160 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
141 142 143 |
# File 'lib/elasticsearch/extensions/backup.rb', line 141 def client @client ||= ::Elasticsearch::Client.new url: url, logger: logger end |
#logger ⇒ Object
149 150 151 152 153 154 155 156 157 |
# File 'lib/elasticsearch/extensions/backup.rb', line 149 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
145 146 147 |
# File 'lib/elasticsearch/extensions/backup.rb', line 145 def path Pathname.new File.join(dump_path , dump_filename.downcase) end |
#perform! ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/elasticsearch/extensions/backup.rb', line 128 def perform! super case mode when 'single' __perform_single else raise Error, "Unsupported mode [#{mode}]" end log!(:finished) end |