elasticshelf 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: df5d7240ce8328b331e0fa12a50fa8dc643026fe
4
- data.tar.gz: 9d3171890bd33fdb4d0d792336b691eab28b7be4
3
+ metadata.gz: abdcc3dbfb9c017411bb49eada9cef12bfbad2f8
4
+ data.tar.gz: 9b0b0c3f1351b5eccff17774921fe84cd97349f9
5
5
  SHA512:
6
- metadata.gz: c0c30720d27c9028e9a207ddac05b4f9bbaeca3d813a2582fe3b1542e0de2f2701313f4f9102e46febadac9cd49f59ff9ac0f3abee8244291478ee1aef0f3a3f
7
- data.tar.gz: e16ffb10bcf847d4325d2af1daafebee8de7166574eabc7a4d4f0edfc7df29c3429e2eea9c7ab3c5b6bbe731c8c595579cdce9387787bb480b182fafc6374cd5
6
+ metadata.gz: 5038aa06df2f86dc47092ffead86f9cbedf5729885ce531b2eee1b074ab956f8d9734fb53f5581c578e834dd79ab415619f0a3e1128be1283548998349444d57
7
+ data.tar.gz: 7849cc89dc49c8bdba15df9f67b0bad84ce910aa2d67b6f9c9b572f8fedbc3f42794eadaeafff4f77e81cad9859f46abcaf7905910c9e8fbf433f35004adf7b9
data/Gemfile CHANGED
@@ -1,4 +1,7 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- # Specify your gem's dependencies in shelver.gemspec
3
+ # Specify your gem's dependencies in elasticshelf.gemspec
4
4
  gemspec
5
+
6
+ # gem 'time_diff', '0.3.0'
7
+ # gem 'elasticsearch', '1.0.1'
data/README.md CHANGED
@@ -5,26 +5,51 @@ Ruby integrations for Elasticsearch indices management using close, open, delete
5
5
  Inspired by Curator at https://github.com/elasticsearch/curator.git, but if
6
6
  you are an ophidiophobe, no worries, this is written in Ruby :-)
7
7
 
8
+ Honestly, there is nothing special here that can not already be done with the elasticsearch-ruby gem,
9
+ but it's just packaged up as a convenience gem.
10
+
11
+ The goal is to perform the following on Elasticsearch indices:
12
+ * **wither** (aka disable bloom filter)
13
+ * **close**
14
+ * **open**
15
+ * **delete**
16
+ * **snapshot**
17
+ * **restore**
18
+
19
+ ## TODO's:
20
+
21
+ Loop thru expired indices hash and perform an action:
22
+ close, open, delete, wither, snapshot, or restore
23
+
8
24
  ## Installation
9
25
 
10
26
  Add this line to your application's Gemfile:
11
27
 
12
- gem 'elasticshelf'
28
+ ```gem 'elasticshelf'```
13
29
 
14
30
  And then execute:
15
31
 
16
- $ bundle
32
+ ```$ bundle```
17
33
 
18
34
  Or install it yourself as:
19
35
 
20
- $ gem install elasticshelf
36
+ ```$ gem install elasticshelf```
21
37
 
22
38
  ## Usage
23
39
 
24
- The goal is to close, delete, snapshot, and restore Elasticsearch indices.
40
+ ```
41
+ $ es = Elasticshelf::Client.new(:host => '127.0.0.1:9200')
42
+
43
+ $ es.wither_index("index_name") ... only if it's not closed already
44
+
45
+ $ es.index_closed?("index_name")
46
+
47
+ $ es.find_expired_indices() ... default is 'logstash-*' is not specified
48
+ ```
25
49
 
26
- But for now you can:
50
+ Other lesser goodies:
27
51
 
52
+ ```
28
53
  $ es = Elasticshelf::Client.new(:host => '127.0.0.1:9200')
29
54
 
30
55
  $ es.version
@@ -35,9 +60,10 @@ But for now you can:
35
60
 
36
61
  $ es.get_info
37
62
 
38
- $ es.get_cluster_state("some-index")
63
+ $ es.get_cluster_state("index_name")
39
64
 
40
- $ es.get_index_state("some-index")
65
+ $ es.get_index_state("index_name")
66
+ ```
41
67
 
42
68
  ## Contributing
43
69
 
data/elasticshelf.gemspec CHANGED
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "elasticsearch", '1.0.1'
22
+ spec.add_dependency "time_diff", '0.3.0'
22
23
 
23
24
  spec.add_development_dependency "bundler", "~> 1.5"
24
25
  spec.add_development_dependency "rake"
data/lib/elasticshelf.rb CHANGED
@@ -4,6 +4,7 @@ require "elasticshelf/version"
4
4
  module Elasticshelf
5
5
 
6
6
  module Client
7
+
7
8
  attr_reader :client, :get_info, :version
8
9
 
9
10
  def new(arguments={})
@@ -12,6 +13,48 @@ module Elasticshelf
12
13
  end
13
14
  extend self
14
15
 
16
+ # ************************************************************
17
+ # * TODO: loop thru expired indices hash and perform action:
18
+ # * close, open, delete, wither, snapshot, or restore
19
+ # ************************************************************
20
+
21
+ def find_expired_indices(cutoff_days, prefix='logstash-', separator='.')
22
+ expired_indices = {}
23
+ cutoff_date = DateTime.now.utc - cutoff_days
24
+ cutoff_date_beginning_of_day = set_time_to_beginning_of_day(cutoff_date.strftime("%Y.%m.%d"))
25
+ required_date_parts = 3 # for now, we only do days not hours
26
+ # the following should only return 'closed' indices but it returns all indices ???
27
+ sorted_indices = @client.indices.get_settings(:index => prefix, :expand_wildcards => 'closed').keys
28
+ sorted_indices.each do |index_name|
29
+ unprefixed_index_name = index_name.slice(prefix.size-1..-1)
30
+ date_parts = unprefixed_index_name.split(separator)
31
+ next unless date_parts.size == required_date_parts
32
+ index_time = set_time_to_beginning_of_day(unprefixed_index_name, separator=separator)
33
+ if (cutoff_date_beginning_of_day - index_time).to_i >= cutoff_days
34
+ expired_indices[index_name] = (cutoff_date_beginning_of_day - index_time).to_i
35
+ puts "index #{index_name} expired #{expired_indices[index_name]} days ago!"
36
+ end
37
+ end
38
+ expired_indices
39
+ end
40
+
41
+ def index_closed?(index_name)
42
+ index_metadata = @client.cluster.state(:index => index_name, :metric => 'metadata')
43
+ index_metadata['metadata']['indices'][index_name]['state'] == 'close'
44
+ end
45
+
46
+ def wither_index(index_name)
47
+ # don't try to disable bloom filter on a closed index, it will re-open them:
48
+ if index_closed?(index_name)
49
+ puts "Unable to wither (disable bloom filter) index #{index_name}: It's already closed."
50
+ return true
51
+ else
52
+ result = @client.indices.put_settings(:index => index_name, :body => 'index.codec.bloom.load=false')
53
+ puts "result=#{result.inspect}"
54
+ end
55
+ result
56
+ end
57
+
15
58
  def get_index_state(index_name, metric='metadata')
16
59
  index_metadata = @client.cluster.state(:index => index_name, :metric => metric)
17
60
  index_metadata['metadata']['indices'][index_name]['state']
@@ -47,6 +90,13 @@ module Elasticshelf
47
90
  def version
48
91
  Elasticshelf::VERSION
49
92
  end
93
+
94
+ private
95
+
96
+ def set_time_to_beginning_of_day(index_timestamp, separator='.')
97
+ return DateTime.strptime(index_timestamp, ['%Y', '%m', '%d'].join(separator))
98
+ end
99
+
50
100
  end
51
101
 
52
102
  end
@@ -1,4 +1,4 @@
1
1
  module Elasticshelf
2
2
  # Elasticshelf::VERSION
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elasticshelf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - cLee Smith
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: time_diff
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.3.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.3.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement