ej 0.1.4 → 0.1.5
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 +4 -4
 - data/.travis.yml +17 -0
 - data/README.md +24 -10
 - data/ej.gemspec +2 -2
 - data/lib/ej.rb +6 -0
 - data/lib/ej/cluster.rb +17 -0
 - data/lib/ej/commands.rb +43 -32
 - data/lib/ej/constants.rb +3 -0
 - data/lib/ej/core.rb +60 -164
 - data/lib/ej/indices.rb +86 -0
 - data/lib/ej/nodes.rb +17 -0
 - data/lib/ej/util.rb +23 -0
 - data/lib/ej/values.rb +18 -0
 - data/lib/ej/version.rb +1 -1
 - data/spec/commands_spec.rb +1 -1
 - data/spec/core_spec.rb +8 -17
 - data/spec/util_spec.rb +36 -0
 - metadata +20 -12
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: b0e265c64a78dc3bbee03d836b6014ff02230cf5
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 99a5bc9767afe77467139e167c6e29f9ba15f295
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: fa8937a41e19a3ef15ffc673a90625be86a59907005de7398e75e7d3f3fd80c4aa71c16ea3b6673250e697cf3b26e618e1f0bb70ae39e4ebaec50eae4fb4cf04
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: fa7f6f3316420ff29b4a064c23968b389cbb1b49f0b5e30ac34df9c9cd81dd0f0aac08157c3354353082769ee5e3618424dbe7d6d4f35b81ccc01eb7fd8904c6
         
     | 
    
        data/.travis.yml
    ADDED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,8 +1,11 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Ej
         
     | 
| 
      
 1 
     | 
    
         
            +
            # Ej 
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            [](http://travis-ci.org/toyama0919/ej)
         
     | 
| 
      
 4 
     | 
    
         
            +
            [](http://badge.fury.io/rb/ej)
         
     | 
| 
       2 
5 
     | 
    
         | 
| 
       3 
6 
     | 
    
         
             
            elasticsearch command line utility
         
     | 
| 
       4 
7 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
            support ruby version >= 2.1
         
     | 
| 
       6 
9 
     | 
    
         | 
| 
       7 
10 
     | 
    
         
             
            
         
     | 
| 
       8 
11 
     | 
    
         | 
| 
         @@ -35,7 +38,7 @@ ej -s -h other_host:9201 
     | 
|
| 
       35 
38 
     | 
    
         | 
| 
       36 
39 
     | 
    
         
             
            ### query search and index
         
     | 
| 
       37 
40 
     | 
    
         
             
            ```bash
         
     | 
| 
       38 
     | 
    
         
            -
            ej -s "ip_address: 127.0.0.1" -i logstash-2014.07.01
         
     | 
| 
      
 41 
     | 
    
         
            +
            ej -s "ip_address: 127.0.0.1" -i logstash-2014.07.01 -h other_host
         
     | 
| 
       39 
42 
     | 
    
         
             
            ```
         
     | 
| 
       40 
43 
     | 
    
         | 
| 
       41 
44 
     | 
    
         
             
            ### index list
         
     | 
| 
         @@ -45,17 +48,12 @@ ej -l -h other_host 
     | 
|
| 
       45 
48 
     | 
    
         | 
| 
       46 
49 
     | 
    
         
             
            ### count
         
     | 
| 
       47 
50 
     | 
    
         
             
            ```bash
         
     | 
| 
       48 
     | 
    
         
            -
            ej -c "log_date: 2014-01-15"
         
     | 
| 
       49 
     | 
    
         
            -
            ```
         
     | 
| 
       50 
     | 
    
         
            -
             
     | 
| 
       51 
     | 
    
         
            -
            ### facet
         
     | 
| 
       52 
     | 
    
         
            -
            ```bash
         
     | 
| 
       53 
     | 
    
         
            -
            ej -f session_id -q "log_date: 2014-01-15"
         
     | 
| 
      
 51 
     | 
    
         
            +
            ej -c "log_date: 2014-01-15" -h other_host
         
     | 
| 
       54 
52 
     | 
    
         
             
            ```
         
     | 
| 
       55 
53 
     | 
    
         | 
| 
       56 
54 
     | 
    
         
             
            ### mapping
         
     | 
| 
       57 
55 
     | 
    
         
             
            ```bash
         
     | 
| 
       58 
     | 
    
         
            -
            ej -m
         
     | 
| 
      
 56 
     | 
    
         
            +
            ej -m -h other_host
         
     | 
| 
       59 
57 
     | 
    
         
             
            ```
         
     | 
| 
       60 
58 
     | 
    
         | 
| 
       61 
59 
     | 
    
         
             
            ### delete index
         
     | 
| 
         @@ -63,6 +61,22 @@ ej -m 
     | 
|
| 
       63 
61 
     | 
    
         
             
            ej delete -i logstash-2014.07.01 -h other_host
         
     | 
| 
       64 
62 
     | 
    
         
             
            ```
         
     | 
| 
       65 
63 
     | 
    
         | 
| 
      
 64 
     | 
    
         
            +
            ### copy index from remote to remote
         
     | 
| 
      
 65 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 66 
     | 
    
         
            +
            ej copy --source remote_host1:9200 --dest remote_host2:9200 -i logstash-2017.01.27 -q 'size: 631'
         
     | 
| 
      
 67 
     | 
    
         
            +
            ```
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            ## monitor
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            ### node stats
         
     | 
| 
      
 72 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 73 
     | 
    
         
            +
            ej nodes_stats -h remote_host1
         
     | 
| 
      
 74 
     | 
    
         
            +
            ```
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            ### settings
         
     | 
| 
      
 77 
     | 
    
         
            +
            ```bash
         
     | 
| 
      
 78 
     | 
    
         
            +
            ej settings -h remote_host1
         
     | 
| 
      
 79 
     | 
    
         
            +
            ```
         
     | 
| 
       66 
80 
     | 
    
         | 
| 
       67 
81 
     | 
    
         
             
            ## Contributing
         
     | 
| 
       68 
82 
     | 
    
         | 
    
        data/ej.gemspec
    CHANGED
    
    | 
         @@ -18,8 +18,8 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       18 
18 
     | 
    
         
             
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         
     | 
| 
       19 
19 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
              spec.add_development_dependency "bundler" 
     | 
| 
       22 
     | 
    
         
            -
              spec.add_development_dependency "rake"
         
     | 
| 
      
 21 
     | 
    
         
            +
              spec.add_development_dependency "bundler"
         
     | 
| 
      
 22 
     | 
    
         
            +
              spec.add_development_dependency "rake", '< 11.0'
         
     | 
| 
       23 
23 
     | 
    
         
             
              spec.add_development_dependency "pry"
         
     | 
| 
       24 
24 
     | 
    
         
             
              spec.add_development_dependency "pry-doc"
         
     | 
| 
       25 
25 
     | 
    
         
             
              spec.add_development_dependency 'rspec', '~> 2.4'
         
     | 
    
        data/lib/ej.rb
    CHANGED
    
    
    
        data/lib/ej/cluster.rb
    ADDED
    
    
    
        data/lib/ej/commands.rb
    CHANGED
    
    | 
         @@ -1,5 +1,3 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #!/usr/bin/env ruby
         
     | 
| 
       2 
     | 
    
         
            -
            # coding: utf-8
         
     | 
| 
       3 
1 
     | 
    
         
             
            require 'ej/core'
         
     | 
| 
       4 
2 
     | 
    
         
             
            require 'thor'
         
     | 
| 
       5 
3 
     | 
    
         
             
            require 'yajl'
         
     | 
| 
         @@ -17,13 +15,16 @@ module Ej 
     | 
|
| 
       17 
15 
     | 
    
         
             
                map '-l' => :indices
         
     | 
| 
       18 
16 
     | 
    
         
             
                map '-a' => :aliases
         
     | 
| 
       19 
17 
     | 
    
         
             
                map '-m' => :mapping
         
     | 
| 
       20 
     | 
    
         
            -
                map '-e' => :debug_eval
         
     | 
| 
       21 
18 
     | 
    
         
             
                map '--health' => :health
         
     | 
| 
       22 
19 
     | 
    
         | 
| 
       23 
20 
     | 
    
         
             
                def initialize(args = [], options = {}, config = {})
         
     | 
| 
       24 
21 
     | 
    
         
             
                  super(args, options, config)
         
     | 
| 
       25 
22 
     | 
    
         
             
                  @global_options = config[:shell].base.options
         
     | 
| 
       26 
     | 
    
         
            -
                   
     | 
| 
      
 23 
     | 
    
         
            +
                  values = Values.new(@global_options)
         
     | 
| 
      
 24 
     | 
    
         
            +
                  @core = Ej::Core.new(values)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @indices = Ej::Indices.new(values)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  @cluster = Ej::Cluster.new(values)
         
     | 
| 
      
 27 
     | 
    
         
            +
                  @nodes = Ej::Nodes.new(values)
         
     | 
| 
       27 
28 
     | 
    
         
             
                end
         
     | 
| 
       28 
29 
     | 
    
         | 
| 
       29 
30 
     | 
    
         
             
                desc '-s [lucene query]', 'search'
         
     | 
| 
         @@ -31,7 +32,7 @@ module Ej 
     | 
|
| 
       31 
32 
     | 
    
         
             
                option :size, type: :numeric, aliases: '-n', default: nil, desc: 'size'
         
     | 
| 
       32 
33 
     | 
    
         
             
                option :from, type: :numeric, aliases: '--from', default: 0, desc: 'from'
         
     | 
| 
       33 
34 
     | 
    
         
             
                option :fields, type: :array, aliases: '--fields', default: nil, desc: 'fields'
         
     | 
| 
       34 
     | 
    
         
            -
                option : 
     | 
| 
      
 35 
     | 
    
         
            +
                option :meta, type: :boolean, default: false, desc: 'meta'
         
     | 
| 
       35 
36 
     | 
    
         
             
                option :query, type: :string, aliases: '-q', default: nil, desc: 'query'
         
     | 
| 
       36 
37 
     | 
    
         
             
                option :sort, type: :hash, aliases: '--sort', default: nil, desc: 'ex. --sort @timestamp:desc'
         
     | 
| 
       37 
38 
     | 
    
         
             
                def search(query = options[:query])
         
     | 
| 
         @@ -39,7 +40,7 @@ module Ej 
     | 
|
| 
       39 
40 
     | 
    
         
             
                                         query,
         
     | 
| 
       40 
41 
     | 
    
         
             
                                         options[:size],
         
     | 
| 
       41 
42 
     | 
    
         
             
                                         options[:from],
         
     | 
| 
       42 
     | 
    
         
            -
                                         options[: 
     | 
| 
      
 43 
     | 
    
         
            +
                                         options[:meta],
         
     | 
| 
       43 
44 
     | 
    
         
             
                                         nil,
         
     | 
| 
       44 
45 
     | 
    
         
             
                                         options[:fields],
         
     | 
| 
       45 
46 
     | 
    
         
             
                                         options[:sort]
         
     | 
| 
         @@ -65,16 +66,14 @@ module Ej 
     | 
|
| 
       65 
66 
     | 
    
         
             
                option :dest, type: :string, aliases: '--dest', required: true, desc: 'dest host'
         
     | 
| 
       66 
67 
     | 
    
         
             
                option :query, type: :string, aliases: '-q', default: nil, desc: 'query'
         
     | 
| 
       67 
68 
     | 
    
         
             
                option :per, type: :numeric, default: nil, desc: 'per'
         
     | 
| 
       68 
     | 
    
         
            -
                option : 
     | 
| 
       69 
     | 
    
         
            -
                option :from, type: :numeric, default: 0, desc: 'from'
         
     | 
| 
      
 69 
     | 
    
         
            +
                option :scroll, type: :string, default: "1m", desc: 'scroll'
         
     | 
| 
       70 
70 
     | 
    
         
             
                def copy
         
     | 
| 
       71 
71 
     | 
    
         
             
                  @core.copy(
         
     | 
| 
       72 
72 
     | 
    
         
             
                    options[:source],
         
     | 
| 
       73 
73 
     | 
    
         
             
                    options[:dest],
         
     | 
| 
       74 
74 
     | 
    
         
             
                    options[:query],
         
     | 
| 
       75 
75 
     | 
    
         
             
                    options[:per],
         
     | 
| 
       76 
     | 
    
         
            -
                    options[: 
     | 
| 
       77 
     | 
    
         
            -
                    options[:from]
         
     | 
| 
      
 76 
     | 
    
         
            +
                    options[:scroll]
         
     | 
| 
       78 
77 
     | 
    
         
             
                  )
         
     | 
| 
       79 
78 
     | 
    
         
             
                end
         
     | 
| 
       80 
79 
     | 
    
         | 
| 
         @@ -112,51 +111,63 @@ module Ej 
     | 
|
| 
       112 
111 
     | 
    
         
             
                  puts_with_format(@core.max(options[:term]))
         
     | 
| 
       113 
112 
     | 
    
         
             
                end
         
     | 
| 
       114 
113 
     | 
    
         | 
| 
       115 
     | 
    
         
            -
                desc '-b', 'bulk import  
     | 
| 
      
 114 
     | 
    
         
            +
                desc '-b', 'bulk import JSON'
         
     | 
| 
       116 
115 
     | 
    
         
             
                option :index, aliases: '-i', type: :string, default: "logstash-#{Time.now.strftime('%Y.%m.%d')}", required: true, desc: 'index'
         
     | 
| 
       117 
116 
     | 
    
         
             
                option :type, type: :string, aliases: '-t', default: nil, required: true, desc: 'type'
         
     | 
| 
       118 
117 
     | 
    
         
             
                option :timestamp_key, aliases: '--timestamp_key', type: :string, desc: 'timestamp key', default: nil
         
     | 
| 
       119 
118 
     | 
    
         
             
                option :add_timestamp, type: :boolean, default: true, desc: 'add_timestamp'
         
     | 
| 
       120 
119 
     | 
    
         
             
                option :id_keys, type: :array, aliases: '--id', default: nil, desc: 'id'
         
     | 
| 
      
 120 
     | 
    
         
            +
                option :inputs, type: :array, aliases: '--inputs', default: [], desc: 'input files path.'
         
     | 
| 
       121 
121 
     | 
    
         
             
                def bulk
         
     | 
| 
       122 
     | 
    
         
            -
                   
     | 
| 
      
 122 
     | 
    
         
            +
                  inputs = options[:inputs].empty? ? [STDIN] : options[:inputs]
         
     | 
| 
      
 123 
     | 
    
         
            +
                  inputs.each do |key|
         
     | 
| 
      
 124 
     | 
    
         
            +
                    buffer = (key.class == STDIN.class) ? STDIN.read : File.read(key)
         
     | 
| 
      
 125 
     | 
    
         
            +
                    @core.bulk(
         
     | 
| 
      
 126 
     | 
    
         
            +
                      options[:timestamp_key],
         
     | 
| 
      
 127 
     | 
    
         
            +
                      options[:type],
         
     | 
| 
      
 128 
     | 
    
         
            +
                      options[:add_timestamp],
         
     | 
| 
      
 129 
     | 
    
         
            +
                      options[:id_keys],
         
     | 
| 
      
 130 
     | 
    
         
            +
                      options[:index],
         
     | 
| 
      
 131 
     | 
    
         
            +
                      Util.parse_json(buffer)
         
     | 
| 
      
 132 
     | 
    
         
            +
                    )
         
     | 
| 
      
 133 
     | 
    
         
            +
                  end
         
     | 
| 
       123 
134 
     | 
    
         
             
                end
         
     | 
| 
       124 
135 
     | 
    
         | 
| 
       125 
136 
     | 
    
         
             
                desc 'health', 'health'
         
     | 
| 
       126 
137 
     | 
    
         
             
                def health
         
     | 
| 
       127 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 138 
     | 
    
         
            +
                  puts_with_format(@cluster.health)
         
     | 
| 
       128 
139 
     | 
    
         
             
                end
         
     | 
| 
       129 
140 
     | 
    
         | 
| 
       130 
141 
     | 
    
         
             
                desc '-a', 'list aliases'
         
     | 
| 
       131 
142 
     | 
    
         
             
                def aliases
         
     | 
| 
       132 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 143 
     | 
    
         
            +
                  puts_with_format(@indices.aliases)
         
     | 
| 
       133 
144 
     | 
    
         
             
                end
         
     | 
| 
       134 
145 
     | 
    
         | 
| 
       135 
146 
     | 
    
         
             
                desc 'state', 'state'
         
     | 
| 
       136 
147 
     | 
    
         
             
                def state
         
     | 
| 
       137 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 148 
     | 
    
         
            +
                  puts_with_format(@cluster.state)
         
     | 
| 
       138 
149 
     | 
    
         
             
                end
         
     | 
| 
       139 
150 
     | 
    
         | 
| 
       140 
151 
     | 
    
         
             
                desc 'indices', 'show indices summary'
         
     | 
| 
       141 
152 
     | 
    
         
             
                def indices
         
     | 
| 
       142 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 153 
     | 
    
         
            +
                  puts_with_format(@indices.indices)
         
     | 
| 
       143 
154 
     | 
    
         
             
                end
         
     | 
| 
       144 
155 
     | 
    
         | 
| 
       145 
156 
     | 
    
         
             
                desc 'stats', 'index stats'
         
     | 
| 
       146 
157 
     | 
    
         
             
                def stats
         
     | 
| 
       147 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 158 
     | 
    
         
            +
                  puts_with_format(@indices.stats)
         
     | 
| 
       148 
159 
     | 
    
         
             
                end
         
     | 
| 
       149 
160 
     | 
    
         | 
| 
       150 
161 
     | 
    
         
             
                desc 'mapping', 'show mapping'
         
     | 
| 
       151 
162 
     | 
    
         
             
                def mapping
         
     | 
| 
       152 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 163 
     | 
    
         
            +
                  puts_with_format(@indices.mapping)
         
     | 
| 
       153 
164 
     | 
    
         
             
                end
         
     | 
| 
       154 
165 
     | 
    
         | 
| 
       155 
166 
     | 
    
         
             
                desc 'not_analyzed', 'not analyzed'
         
     | 
| 
       156 
167 
     | 
    
         
             
                def not_analyzed
         
     | 
| 
       157 
168 
     | 
    
         
             
                  json = File.read(File.expand_path('../../../template/not_analyze_template.json', __FILE__))
         
     | 
| 
       158 
169 
     | 
    
         
             
                  hash = Yajl::Parser.parse(json)
         
     | 
| 
       159 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 170 
     | 
    
         
            +
                  puts_with_format(@indices.put_template('ej_init', hash))
         
     | 
| 
       160 
171 
     | 
    
         
             
                end
         
     | 
| 
       161 
172 
     | 
    
         | 
| 
       162 
173 
     | 
    
         
             
                desc 'put_routing', "put routing.\nexsample. ej put_routing -i someindex -t sometype --path somecolumn"
         
     | 
| 
         @@ -165,69 +176,69 @@ module Ej 
     | 
|
| 
       165 
176 
     | 
    
         
             
                option :path, type: :string, default: nil, required: true, desc: 'path'
         
     | 
| 
       166 
177 
     | 
    
         
             
                def put_routing
         
     | 
| 
       167 
178 
     | 
    
         
             
                  body = { options[:type] => {"_routing"=>{"required"=>true, "path"=>options[:path]}}}
         
     | 
| 
       168 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 179 
     | 
    
         
            +
                  puts_with_format(@indices.put_mapping(options[:index], options[:type], body))
         
     | 
| 
       169 
180 
     | 
    
         
             
                end
         
     | 
| 
       170 
181 
     | 
    
         | 
| 
       171 
182 
     | 
    
         
             
                desc 'put_template', 'put template'
         
     | 
| 
       172 
183 
     | 
    
         
             
                def put_template(name)
         
     | 
| 
       173 
184 
     | 
    
         
             
                  hash = Yajl::Parser.parse(STDIN.read)
         
     | 
| 
       174 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 185 
     | 
    
         
            +
                  puts_with_format(@indices.put_template(name, hash))
         
     | 
| 
       175 
186 
     | 
    
         
             
                end
         
     | 
| 
       176 
187 
     | 
    
         | 
| 
       177 
188 
     | 
    
         
             
                desc 'create_aliases', 'create aliases'
         
     | 
| 
       178 
189 
     | 
    
         
             
                option :alias, type: :string, aliases: '-a', default: nil, required: true, desc: 'alias name'
         
     | 
| 
       179 
190 
     | 
    
         
             
                option :indices, type: :array, aliases: '-x', default: nil, required: true, desc: 'index array'
         
     | 
| 
       180 
191 
     | 
    
         
             
                def create_aliases
         
     | 
| 
       181 
     | 
    
         
            -
                  @ 
     | 
| 
      
 192 
     | 
    
         
            +
                  @indices.create_aliases(options[:alias], options[:indices])
         
     | 
| 
       182 
193 
     | 
    
         
             
                end
         
     | 
| 
       183 
194 
     | 
    
         | 
| 
       184 
195 
     | 
    
         
             
                desc 'recovery', 'recovery'
         
     | 
| 
       185 
196 
     | 
    
         
             
                def recovery
         
     | 
| 
       186 
     | 
    
         
            -
                  @ 
     | 
| 
      
 197 
     | 
    
         
            +
                  @indices.recovery
         
     | 
| 
       187 
198 
     | 
    
         
             
                end
         
     | 
| 
       188 
199 
     | 
    
         | 
| 
       189 
200 
     | 
    
         
             
                desc 'delete', 'delete'
         
     | 
| 
       190 
201 
     | 
    
         
             
                option :index, aliases: '-i', type: :string, default: nil, required: true, desc: 'index'
         
     | 
| 
       191 
202 
     | 
    
         
             
                option :type, type: :string, aliases: '-t', default: nil, desc: 'type'
         
     | 
| 
       192 
     | 
    
         
            -
                option :query, type: : 
     | 
| 
      
 203 
     | 
    
         
            +
                option :query, type: :hash, aliases: '-q', default: nil, desc: 'query'
         
     | 
| 
       193 
204 
     | 
    
         
             
                def delete
         
     | 
| 
       194 
     | 
    
         
            -
                  @ 
     | 
| 
      
 205 
     | 
    
         
            +
                  @indices.delete(options[:index], options[:type], options[:query])
         
     | 
| 
       195 
206 
     | 
    
         
             
                end
         
     | 
| 
       196 
207 
     | 
    
         | 
| 
       197 
208 
     | 
    
         
             
                desc 'delete_template --name [name]', 'delete_template'
         
     | 
| 
       198 
209 
     | 
    
         
             
                option :name, type: :string, default: nil, required: true, desc: 'template name'
         
     | 
| 
       199 
210 
     | 
    
         
             
                def delete_template
         
     | 
| 
       200 
     | 
    
         
            -
                  @ 
     | 
| 
      
 211 
     | 
    
         
            +
                  @indices.delete_template(options[:name])
         
     | 
| 
       201 
212 
     | 
    
         
             
                end
         
     | 
| 
       202 
213 
     | 
    
         | 
| 
       203 
214 
     | 
    
         
             
                desc 'template', 'show template'
         
     | 
| 
       204 
215 
     | 
    
         
             
                def template
         
     | 
| 
       205 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 216 
     | 
    
         
            +
                  puts_with_format(@indices.template)
         
     | 
| 
       206 
217 
     | 
    
         
             
                end
         
     | 
| 
       207 
218 
     | 
    
         | 
| 
       208 
219 
     | 
    
         
             
                desc 'settings', 'show template'
         
     | 
| 
       209 
220 
     | 
    
         
             
                def settings
         
     | 
| 
       210 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 221 
     | 
    
         
            +
                  puts_with_format(@indices.settings)
         
     | 
| 
       211 
222 
     | 
    
         
             
                end
         
     | 
| 
       212 
223 
     | 
    
         | 
| 
       213 
224 
     | 
    
         
             
                desc 'warmer', 'warmer'
         
     | 
| 
       214 
225 
     | 
    
         
             
                def warmer
         
     | 
| 
       215 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 226 
     | 
    
         
            +
                  puts_with_format(@indices.warmer)
         
     | 
| 
       216 
227 
     | 
    
         
             
                end
         
     | 
| 
       217 
228 
     | 
    
         | 
| 
       218 
229 
     | 
    
         
             
                desc 'refresh', 'refresh'
         
     | 
| 
       219 
230 
     | 
    
         
             
                def refresh
         
     | 
| 
       220 
     | 
    
         
            -
                  puts_with_format(@ 
     | 
| 
      
 231 
     | 
    
         
            +
                  puts_with_format(@indices.refresh)
         
     | 
| 
       221 
232 
     | 
    
         
             
                end
         
     | 
| 
       222 
233 
     | 
    
         | 
| 
       223 
234 
     | 
    
         
             
                desc 'nodes_info', 'view nodes info'
         
     | 
| 
       224 
235 
     | 
    
         
             
                def nodes_info
         
     | 
| 
       225 
     | 
    
         
            -
                  puts_with_format @ 
     | 
| 
      
 236 
     | 
    
         
            +
                  puts_with_format @nodes.nodes_info
         
     | 
| 
       226 
237 
     | 
    
         
             
                end
         
     | 
| 
       227 
238 
     | 
    
         | 
| 
       228 
239 
     | 
    
         
             
                desc 'nodes_stats', 'view nodes stats'
         
     | 
| 
       229 
240 
     | 
    
         
             
                def nodes_stats
         
     | 
| 
       230 
     | 
    
         
            -
                  puts_with_format @ 
     | 
| 
      
 241 
     | 
    
         
            +
                  puts_with_format @nodes.nodes_stats
         
     | 
| 
       231 
242 
     | 
    
         
             
                end
         
     | 
| 
       232 
243 
     | 
    
         | 
| 
       233 
244 
     | 
    
         
             
                private
         
     | 
    
        data/lib/ej/constants.rb
    ADDED
    
    
    
        data/lib/ej/core.rb
    CHANGED
    
    | 
         @@ -1,5 +1,3 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            #!/usr/bin/env ruby
         
     | 
| 
       2 
     | 
    
         
            -
            # coding: utf-8
         
     | 
| 
       3 
1 
     | 
    
         
             
            require 'yajl'
         
     | 
| 
       4 
2 
     | 
    
         
             
            require 'elasticsearch'
         
     | 
| 
       5 
3 
     | 
    
         
             
            require 'hashie'
         
     | 
| 
         @@ -12,16 +10,13 @@ end 
     | 
|
| 
       12 
10 
     | 
    
         | 
| 
       13 
11 
     | 
    
         
             
            module Ej
         
     | 
| 
       14 
12 
     | 
    
         
             
              class Core
         
     | 
| 
       15 
     | 
    
         
            -
                 
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
                  @ 
     | 
| 
       18 
     | 
    
         
            -
                  @ 
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                  @index = index
         
     | 
| 
       21 
     | 
    
         
            -
                  @client = Elasticsearch::Client.new hosts: host, logger: @logger, index: @index
         
     | 
| 
      
 13 
     | 
    
         
            +
                def initialize(values)
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @logger =  values.logger
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @index = values.index
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @client = values.client
         
     | 
| 
       22 
17 
     | 
    
         
             
                end
         
     | 
| 
       23 
18 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
                def search(type, query, size, from,  
     | 
| 
      
 19 
     | 
    
         
            +
                def search(type, query, size, from, meta, routing = nil, fields = nil, sort = nil)
         
     | 
| 
       25 
20 
     | 
    
         
             
                  body = { from: from }
         
     | 
| 
       26 
21 
     | 
    
         
             
                  body[:size] = size unless size.nil?
         
     | 
| 
       27 
22 
     | 
    
         
             
                  if sort
         
     | 
| 
         @@ -36,7 +31,7 @@ module Ej 
     | 
|
| 
       36 
31 
     | 
    
         
             
                  search_option[:routing] = routing unless routing.nil?
         
     | 
| 
       37 
32 
     | 
    
         
             
                  search_option[:_source] = fields.nil? ? nil : fields.join(',')
         
     | 
| 
       38 
33 
     | 
    
         
             
                  results = HashWrapper.new(@client.search(search_option))
         
     | 
| 
       39 
     | 
    
         
            -
                   
     | 
| 
      
 34 
     | 
    
         
            +
                  meta ? results : Util.get_sources(results)
         
     | 
| 
       40 
35 
     | 
    
         
             
                end
         
     | 
| 
       41 
36 
     | 
    
         | 
| 
       42 
37 
     | 
    
         
             
                def distinct(term, type, query)
         
     | 
| 
         @@ -45,42 +40,6 @@ module Ej 
     | 
|
| 
       45 
40 
     | 
    
         
             
                  @client.search index: @index, type: type, body: body
         
     | 
| 
       46 
41 
     | 
    
         
             
                end
         
     | 
| 
       47 
42 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                def copy(source, dest, query, per_size, proc_num, define_from = 0)
         
     | 
| 
       49 
     | 
    
         
            -
                  per = per_size || DEFAULT_PER
         
     | 
| 
       50 
     | 
    
         
            -
                  logger = Logger.new($stdout)
         
     | 
| 
       51 
     | 
    
         
            -
                  source_client = Elasticsearch::Client.new hosts: source, index: @index
         
     | 
| 
       52 
     | 
    
         
            -
                  dest_client = Elasticsearch::Client.new hosts: dest
         
     | 
| 
       53 
     | 
    
         
            -
                  calculate_body = { size: 0 }
         
     | 
| 
       54 
     | 
    
         
            -
                  calculate_body[:query] = { query_string: { query: query } } unless query.nil?
         
     | 
| 
       55 
     | 
    
         
            -
                  calculate_data = HashWrapper.new(source_client.search index: @index, body: calculate_body)
         
     | 
| 
       56 
     | 
    
         
            -
                  total = calculate_data.hits.total
         
     | 
| 
       57 
     | 
    
         
            -
                  payloads = ((total/per) + 1).times.to_a
         
     | 
| 
       58 
     | 
    
         
            -
                  Parallel.map(payloads, in_processes: proc_num) do |num|
         
     | 
| 
       59 
     | 
    
         
            -
                    from = num * per
         
     | 
| 
       60 
     | 
    
         
            -
                    if from < define_from
         
     | 
| 
       61 
     | 
    
         
            -
                      logger.info("skip index (#{num} #{from}-#{from + per})/#{total}")
         
     | 
| 
       62 
     | 
    
         
            -
                      next
         
     | 
| 
       63 
     | 
    
         
            -
                    end
         
     | 
| 
       64 
     | 
    
         
            -
                    body = { size: per, from: from }
         
     | 
| 
       65 
     | 
    
         
            -
                    body[:query] = { query_string: { query: query } } unless query.nil?
         
     | 
| 
       66 
     | 
    
         
            -
                    data = HashWrapper.new(source_client.search index: @index, body: body)
         
     | 
| 
       67 
     | 
    
         
            -
                    docs = data.hits.hits
         
     | 
| 
       68 
     | 
    
         
            -
                    bulk_message = []
         
     | 
| 
       69 
     | 
    
         
            -
                    docs.each do |doc|
         
     | 
| 
       70 
     | 
    
         
            -
                      source = doc.delete('_source')
         
     | 
| 
       71 
     | 
    
         
            -
                      doc.delete('_score')
         
     | 
| 
       72 
     | 
    
         
            -
                      ['_id', '_type', '_index'].each do |meta_field|
         
     | 
| 
       73 
     | 
    
         
            -
                        source.delete(meta_field)
         
     | 
| 
       74 
     | 
    
         
            -
                      end
         
     | 
| 
       75 
     | 
    
         
            -
                      bulk_message << { index: doc.to_h }
         
     | 
| 
       76 
     | 
    
         
            -
                      bulk_message << source
         
     | 
| 
       77 
     | 
    
         
            -
                    end
         
     | 
| 
       78 
     | 
    
         
            -
                    send_with_retry(dest_client, bulk_message)
         
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
                    logger.info("copy complete (#{num} #{from}-#{from + docs.size})/#{total}")
         
     | 
| 
       81 
     | 
    
         
            -
                  end
         
     | 
| 
       82 
     | 
    
         
            -
                end
         
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
       84 
43 
     | 
    
         
             
                def dump(query, per_size)
         
     | 
| 
       85 
44 
     | 
    
         
             
                  per = per_size || DEFAULT_PER
         
     | 
| 
       86 
45 
     | 
    
         
             
                  num = 0
         
     | 
| 
         @@ -170,151 +129,88 @@ module Ej 
     | 
|
| 
       170 
129 
     | 
    
         
             
                  @client.search index: @index, body: body, size: 0
         
     | 
| 
       171 
130 
     | 
    
         
             
                end
         
     | 
| 
       172 
131 
     | 
    
         | 
| 
       173 
     | 
    
         
            -
                def  
     | 
| 
       174 
     | 
    
         
            -
                   
     | 
| 
       175 
     | 
    
         
            -
             
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
       178 
     | 
    
         
            -
             
     | 
| 
       179 
     | 
    
         
            -
                end
         
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
     | 
    
         
            -
                def state
         
     | 
| 
       182 
     | 
    
         
            -
                  @client.cluster.state
         
     | 
| 
       183 
     | 
    
         
            -
                end
         
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
       185 
     | 
    
         
            -
                def indices
         
     | 
| 
       186 
     | 
    
         
            -
                  @client.cat.indices format: 'json'
         
     | 
| 
       187 
     | 
    
         
            -
                end
         
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
                def stats
         
     | 
| 
       190 
     | 
    
         
            -
                  @client.indices.stats index: @index
         
     | 
| 
       191 
     | 
    
         
            -
                end
         
     | 
| 
       192 
     | 
    
         
            -
             
     | 
| 
       193 
     | 
    
         
            -
                def put_mapping(index, type, body)
         
     | 
| 
       194 
     | 
    
         
            -
                  @client.indices.create index: index unless @client.indices.exists index: index
         
     | 
| 
       195 
     | 
    
         
            -
                  @client.indices.put_mapping index: index, type: type, body: body
         
     | 
| 
       196 
     | 
    
         
            -
                end
         
     | 
| 
       197 
     | 
    
         
            -
             
     | 
| 
       198 
     | 
    
         
            -
                def mapping
         
     | 
| 
       199 
     | 
    
         
            -
                  data = @client.indices.get_mapping index: @index
         
     | 
| 
       200 
     | 
    
         
            -
                  @index == '_all' ? data : data[@index]['mappings']
         
     | 
| 
       201 
     | 
    
         
            -
                end
         
     | 
| 
       202 
     | 
    
         
            -
             
     | 
| 
       203 
     | 
    
         
            -
                def put_template(name, hash)
         
     | 
| 
       204 
     | 
    
         
            -
                  @client.indices.put_template name: name, body: hash
         
     | 
| 
       205 
     | 
    
         
            -
                end
         
     | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
       207 
     | 
    
         
            -
                def create_aliases(als, indices)
         
     | 
| 
       208 
     | 
    
         
            -
                  actions = []
         
     | 
| 
       209 
     | 
    
         
            -
                  indices.each do |index|
         
     | 
| 
       210 
     | 
    
         
            -
                    actions << { add: { index: index, alias: als } }
         
     | 
| 
       211 
     | 
    
         
            -
                  end
         
     | 
| 
       212 
     | 
    
         
            -
                  @client.indices.update_aliases body: {
         
     | 
| 
       213 
     | 
    
         
            -
                    actions: actions
         
     | 
| 
       214 
     | 
    
         
            -
                  }
         
     | 
| 
       215 
     | 
    
         
            -
                end
         
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
       217 
     | 
    
         
            -
                def recovery
         
     | 
| 
       218 
     | 
    
         
            -
                  @client.indices.recovery index: @index
         
     | 
| 
       219 
     | 
    
         
            -
                end
         
     | 
| 
       220 
     | 
    
         
            -
             
     | 
| 
       221 
     | 
    
         
            -
                def delete(index, type, query)
         
     | 
| 
       222 
     | 
    
         
            -
                  if query.nil?
         
     | 
| 
       223 
     | 
    
         
            -
                    if type.nil?
         
     | 
| 
       224 
     | 
    
         
            -
                      @client.indices.delete index: index
         
     | 
| 
      
 132 
     | 
    
         
            +
                def bulk(timestamp_key, type, add_timestamp, id_keys, index, data)
         
     | 
| 
      
 133 
     | 
    
         
            +
                  template = id_keys.map { |key| '%s' }.join('_') unless id_keys.nil?
         
     | 
| 
      
 134 
     | 
    
         
            +
                  bulk_message = []
         
     | 
| 
      
 135 
     | 
    
         
            +
                  data.each do |record|
         
     | 
| 
      
 136 
     | 
    
         
            +
                    if timestamp_key.nil?
         
     | 
| 
      
 137 
     | 
    
         
            +
                      timestamp = Time.now.to_datetime.to_s
         
     | 
| 
       225 
138 
     | 
    
         
             
                    else
         
     | 
| 
       226 
     | 
    
         
            -
                       
     | 
| 
      
 139 
     | 
    
         
            +
                      timestamp = record[timestamp_key].to_time.to_datetime.to_s
         
     | 
| 
       227 
140 
     | 
    
         
             
                    end
         
     | 
| 
       228 
     | 
    
         
            -
             
     | 
| 
       229 
     | 
    
         
            -
                     
     | 
| 
      
 141 
     | 
    
         
            +
                    record.merge!('@timestamp' => timestamp) if add_timestamp
         
     | 
| 
      
 142 
     | 
    
         
            +
                    meta = { index: { _index: index, _type: type } }
         
     | 
| 
      
 143 
     | 
    
         
            +
                    meta[:index][:_id] = Util.generate_id(template, record, id_keys) unless id_keys.nil?
         
     | 
| 
      
 144 
     | 
    
         
            +
                    bulk_message << meta
         
     | 
| 
      
 145 
     | 
    
         
            +
                    bulk_message << record
         
     | 
| 
       230 
146 
     | 
    
         
             
                  end
         
     | 
| 
      
 147 
     | 
    
         
            +
                  connect_with_retry { @client.bulk body: bulk_message unless bulk_message.empty? }
         
     | 
| 
       231 
148 
     | 
    
         
             
                end
         
     | 
| 
       232 
149 
     | 
    
         | 
| 
       233 
     | 
    
         
            -
                def  
     | 
| 
       234 
     | 
    
         
            -
                   
     | 
| 
       235 
     | 
    
         
            -
             
     | 
| 
      
 150 
     | 
    
         
            +
                def copy(source, dest, query, per_size, scroll)
         
     | 
| 
      
 151 
     | 
    
         
            +
                  source_client = Elasticsearch::Client.new hosts: source
         
     | 
| 
      
 152 
     | 
    
         
            +
                  dest_client = Elasticsearch::Client.new hosts: dest
         
     | 
| 
       236 
153 
     | 
    
         | 
| 
       237 
     | 
    
         
            -
             
     | 
| 
       238 
     | 
    
         
            -
                   
     | 
| 
       239 
     | 
    
         
            -
             
     | 
| 
      
 154 
     | 
    
         
            +
                  scroll_option = get_scroll_option(@index, query, per_size, scroll)
         
     | 
| 
      
 155 
     | 
    
         
            +
                  r = connect_with_retry { source_client.search(scroll_option) }
         
     | 
| 
      
 156 
     | 
    
         
            +
                  total = r['hits']['total']
         
     | 
| 
      
 157 
     | 
    
         
            +
                  i = 0
         
     | 
| 
      
 158 
     | 
    
         
            +
                  i += bulk_results(r, dest_client, i, total)
         
     | 
| 
       240 
159 
     | 
    
         | 
| 
       241 
     | 
    
         
            -
             
     | 
| 
       242 
     | 
    
         
            -
             
     | 
| 
       243 
     | 
    
         
            -
             
     | 
| 
       244 
     | 
    
         
            -
             
     | 
| 
       245 
     | 
    
         
            -
                def warmer
         
     | 
| 
       246 
     | 
    
         
            -
                  @client.indices.get_warmer index: @index
         
     | 
| 
      
 160 
     | 
    
         
            +
                  while r = connect_with_retry { source_client.scroll(scroll_id: r['_scroll_id'], scroll: scroll) } and
         
     | 
| 
      
 161 
     | 
    
         
            +
                    (not r['hits']['hits'].empty?) do
         
     | 
| 
      
 162 
     | 
    
         
            +
                    i += bulk_results(r, dest_client, i, total)
         
     | 
| 
      
 163 
     | 
    
         
            +
                  end
         
     | 
| 
       247 
164 
     | 
    
         
             
                end
         
     | 
| 
       248 
165 
     | 
    
         | 
| 
       249 
     | 
    
         
            -
                 
     | 
| 
       250 
     | 
    
         
            -
                  @client.indices.refresh index: @index
         
     | 
| 
       251 
     | 
    
         
            -
                end
         
     | 
| 
      
 166 
     | 
    
         
            +
                private
         
     | 
| 
       252 
167 
     | 
    
         | 
| 
       253 
     | 
    
         
            -
                def  
     | 
| 
       254 
     | 
    
         
            -
                   
     | 
| 
      
 168 
     | 
    
         
            +
                def bulk_results(results, dest_client, before_size, total)
         
     | 
| 
      
 169 
     | 
    
         
            +
                  bulk_message = convert_results(results)
         
     | 
| 
      
 170 
     | 
    
         
            +
                  connect_with_retry do
         
     | 
| 
      
 171 
     | 
    
         
            +
                    dest_client.bulk body: bulk_message unless bulk_message.empty?
         
     | 
| 
      
 172 
     | 
    
         
            +
                    to_size = before_size + (bulk_message.size/2)
         
     | 
| 
      
 173 
     | 
    
         
            +
                    @logger.info "copy complete (#{before_size}-#{to_size})/#{total}"
         
     | 
| 
      
 174 
     | 
    
         
            +
                  end
         
     | 
| 
      
 175 
     | 
    
         
            +
                  return (bulk_message.size/2)
         
     | 
| 
       255 
176 
     | 
    
         
             
                end
         
     | 
| 
       256 
177 
     | 
    
         | 
| 
       257 
     | 
    
         
            -
                def  
     | 
| 
       258 
     | 
    
         
            -
                   
     | 
| 
      
 178 
     | 
    
         
            +
                def get_scroll_option(index, query, size, scroll)
         
     | 
| 
      
 179 
     | 
    
         
            +
                  body = {}
         
     | 
| 
      
 180 
     | 
    
         
            +
                  body[:query] = { query_string: { query: query } } unless query.nil?
         
     | 
| 
      
 181 
     | 
    
         
            +
                  search_option = { index: index, scroll: scroll, body: body, size: (size || DEFAULT_PER) }
         
     | 
| 
      
 182 
     | 
    
         
            +
                  search_option
         
     | 
| 
       259 
183 
     | 
    
         
             
                end
         
     | 
| 
       260 
184 
     | 
    
         | 
| 
       261 
     | 
    
         
            -
                def  
     | 
| 
       262 
     | 
    
         
            -
                  data =  
     | 
| 
       263 
     | 
    
         
            -
                   
     | 
| 
      
 185 
     | 
    
         
            +
                def convert_results(search_results)
         
     | 
| 
      
 186 
     | 
    
         
            +
                  data = HashWrapper.new(search_results)
         
     | 
| 
      
 187 
     | 
    
         
            +
                  docs = data.hits.hits
         
     | 
| 
       264 
188 
     | 
    
         
             
                  bulk_message = []
         
     | 
| 
       265 
     | 
    
         
            -
                   
     | 
| 
       266 
     | 
    
         
            -
                     
     | 
| 
       267 
     | 
    
         
            -
             
     | 
| 
       268 
     | 
    
         
            -
                     
     | 
| 
       269 
     | 
    
         
            -
                       
     | 
| 
      
 189 
     | 
    
         
            +
                  docs.each do |doc|
         
     | 
| 
      
 190 
     | 
    
         
            +
                    source = doc.delete('_source')
         
     | 
| 
      
 191 
     | 
    
         
            +
                    doc.delete('_score')
         
     | 
| 
      
 192 
     | 
    
         
            +
                    ['_id', '_type', '_index'].each do |meta_field|
         
     | 
| 
      
 193 
     | 
    
         
            +
                      source.delete(meta_field)
         
     | 
| 
       270 
194 
     | 
    
         
             
                    end
         
     | 
| 
       271 
     | 
    
         
            -
                     
     | 
| 
       272 
     | 
    
         
            -
                     
     | 
| 
       273 
     | 
    
         
            -
                    meta[:index][:_id] = generate_id(template, record, id_keys) unless id_keys.nil?
         
     | 
| 
       274 
     | 
    
         
            -
                    bulk_message << meta
         
     | 
| 
       275 
     | 
    
         
            -
                    bulk_message << record
         
     | 
| 
       276 
     | 
    
         
            -
                  end
         
     | 
| 
       277 
     | 
    
         
            -
                  bulk_message.each_slice(10000).each do |block|
         
     | 
| 
       278 
     | 
    
         
            -
                    send_with_retry(@client, block)
         
     | 
| 
      
 195 
     | 
    
         
            +
                    bulk_message << { index: doc.to_h }
         
     | 
| 
      
 196 
     | 
    
         
            +
                    bulk_message << source
         
     | 
| 
       279 
197 
     | 
    
         
             
                  end
         
     | 
| 
      
 198 
     | 
    
         
            +
                  bulk_message
         
     | 
| 
       280 
199 
     | 
    
         
             
                end
         
     | 
| 
       281 
200 
     | 
    
         | 
| 
       282 
     | 
    
         
            -
                 
     | 
| 
       283 
     | 
    
         
            -
             
     | 
| 
       284 
     | 
    
         
            -
                def send_with_retry(client, bulk_message, retry_on_failure = 5)
         
     | 
| 
      
 201 
     | 
    
         
            +
                def connect_with_retry(retry_on_failure = 5)
         
     | 
| 
       285 
202 
     | 
    
         
             
                  retries = 0
         
     | 
| 
       286 
203 
     | 
    
         
             
                  begin
         
     | 
| 
       287 
     | 
    
         
            -
                     
     | 
| 
      
 204 
     | 
    
         
            +
                    yield if block_given?
         
     | 
| 
       288 
205 
     | 
    
         
             
                  rescue => e
         
     | 
| 
       289 
206 
     | 
    
         
             
                    if retries < retry_on_failure
         
     | 
| 
       290 
207 
     | 
    
         
             
                      retries += 1
         
     | 
| 
       291 
     | 
    
         
            -
                      @logger.warn "Could not  
     | 
| 
      
 208 
     | 
    
         
            +
                      @logger.warn "Could not connect to Elasticsearch, resetting connection and trying again. #{e.message}"
         
     | 
| 
       292 
209 
     | 
    
         
             
                      sleep 2**retries
         
     | 
| 
       293 
210 
     | 
    
         
             
                      retry
         
     | 
| 
       294 
211 
     | 
    
         
             
                    end
         
     | 
| 
       295 
     | 
    
         
            -
                    raise "Could not  
     | 
| 
       296 
     | 
    
         
            -
                  end
         
     | 
| 
       297 
     | 
    
         
            -
                end
         
     | 
| 
       298 
     | 
    
         
            -
             
     | 
| 
       299 
     | 
    
         
            -
                def parse_json(buffer)
         
     | 
| 
       300 
     | 
    
         
            -
                  begin
         
     | 
| 
       301 
     | 
    
         
            -
                    data = Yajl::Parser.parse(buffer)
         
     | 
| 
       302 
     | 
    
         
            -
                  rescue => e
         
     | 
| 
       303 
     | 
    
         
            -
                    data = []
         
     | 
| 
       304 
     | 
    
         
            -
                    buffer.split("\n").each do |line|
         
     | 
| 
       305 
     | 
    
         
            -
                      data << Yajl::Parser.parse(line)
         
     | 
| 
       306 
     | 
    
         
            -
                    end
         
     | 
| 
      
 212 
     | 
    
         
            +
                    raise "Could not connect to Elasticsearch after #{retries} retries. #{e.message}"
         
     | 
| 
       307 
213 
     | 
    
         
             
                  end
         
     | 
| 
       308 
     | 
    
         
            -
                  data.class == Array ? data : [data]
         
     | 
| 
       309 
214 
     | 
    
         
             
                end
         
     | 
| 
       310 
     | 
    
         
            -
             
     | 
| 
       311 
     | 
    
         
            -
                def generate_id(template, record, id_keys)
         
     | 
| 
       312 
     | 
    
         
            -
                  template % id_keys.map { |key| record[key] }
         
     | 
| 
       313 
     | 
    
         
            -
                end
         
     | 
| 
       314 
     | 
    
         
            -
             
     | 
| 
       315 
     | 
    
         
            -
                def get_sources(results)
         
     | 
| 
       316 
     | 
    
         
            -
                  results.hits.hits.map { |result| result._source }
         
     | 
| 
       317 
     | 
    
         
            -
                end
         
     | 
| 
       318 
     | 
    
         
            -
             
     | 
| 
       319 
215 
     | 
    
         
             
              end
         
     | 
| 
       320 
216 
     | 
    
         
             
            end
         
     | 
    
        data/lib/ej/indices.rb
    ADDED
    
    | 
         @@ -0,0 +1,86 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Ej
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Indices
         
     | 
| 
      
 3 
     | 
    
         
            +
                def initialize(values)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  @logger =  values.logger
         
     | 
| 
      
 5 
     | 
    
         
            +
                  @index = values.index
         
     | 
| 
      
 6 
     | 
    
         
            +
                  @client = values.client
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def aliases
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @client.indices.get_aliases
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                def indices
         
     | 
| 
      
 14 
     | 
    
         
            +
                  @client.cat.indices format: 'json'
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def stats
         
     | 
| 
      
 18 
     | 
    
         
            +
                  @client.indices.stats index: @index
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def put_template(name, hash)
         
     | 
| 
      
 22 
     | 
    
         
            +
                  @client.indices.put_template name: name, body: hash
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def create_aliases(als, indices)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  actions = []
         
     | 
| 
      
 27 
     | 
    
         
            +
                  indices.each do |index|
         
     | 
| 
      
 28 
     | 
    
         
            +
                    actions << { add: { index: index, alias: als } }
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @client.indices.update_aliases body: {
         
     | 
| 
      
 31 
     | 
    
         
            +
                    actions: actions
         
     | 
| 
      
 32 
     | 
    
         
            +
                  }
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                def recovery
         
     | 
| 
      
 36 
     | 
    
         
            +
                  @client.indices.recovery index: @index
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                def put_mapping(index, type, body)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  @client.indices.create index: index unless @client.indices.exists index: index
         
     | 
| 
      
 41 
     | 
    
         
            +
                  @client.indices.put_mapping index: index, type: type, body: body
         
     | 
| 
      
 42 
     | 
    
         
            +
                end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                def mapping
         
     | 
| 
      
 45 
     | 
    
         
            +
                  data = @client.indices.get_mapping index: @index
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @index == '_all' ? data : data[@index]['mappings']
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def delete(index, type, query)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  if query.nil?
         
     | 
| 
      
 51 
     | 
    
         
            +
                    if type.nil?
         
     | 
| 
      
 52 
     | 
    
         
            +
                      @client.indices.delete index: index
         
     | 
| 
      
 53 
     | 
    
         
            +
                    else
         
     | 
| 
      
 54 
     | 
    
         
            +
                      @client.delete_by_query index: index, type: type, q: '*'
         
     | 
| 
      
 55 
     | 
    
         
            +
                    end
         
     | 
| 
      
 56 
     | 
    
         
            +
                  else
         
     | 
| 
      
 57 
     | 
    
         
            +
                    body = {
         
     | 
| 
      
 58 
     | 
    
         
            +
                      query: {
         
     | 
| 
      
 59 
     | 
    
         
            +
                        match: query
         
     | 
| 
      
 60 
     | 
    
         
            +
                      }
         
     | 
| 
      
 61 
     | 
    
         
            +
                    }
         
     | 
| 
      
 62 
     | 
    
         
            +
                    @client.delete_by_query index: index, body: body
         
     | 
| 
      
 63 
     | 
    
         
            +
                  end
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                def template
         
     | 
| 
      
 67 
     | 
    
         
            +
                  @client.indices.get_template
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                def delete_template(name)
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @client.indices.delete_template name: name
         
     | 
| 
      
 72 
     | 
    
         
            +
                end
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                def settings
         
     | 
| 
      
 75 
     | 
    
         
            +
                  @client.indices.get_settings
         
     | 
| 
      
 76 
     | 
    
         
            +
                end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                def warmer
         
     | 
| 
      
 79 
     | 
    
         
            +
                  @client.indices.get_warmer index: @index
         
     | 
| 
      
 80 
     | 
    
         
            +
                end
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                def refresh
         
     | 
| 
      
 83 
     | 
    
         
            +
                  @client.indices.refresh index: @index
         
     | 
| 
      
 84 
     | 
    
         
            +
                end
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/ej/nodes.rb
    ADDED
    
    
    
        data/lib/ej/util.rb
    ADDED
    
    | 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Ej
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Util
         
     | 
| 
      
 3 
     | 
    
         
            +
                def self.parse_json(buffer)
         
     | 
| 
      
 4 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 5 
     | 
    
         
            +
                    data = Yajl::Parser.parse(buffer)
         
     | 
| 
      
 6 
     | 
    
         
            +
                  rescue => e
         
     | 
| 
      
 7 
     | 
    
         
            +
                    data = []
         
     | 
| 
      
 8 
     | 
    
         
            +
                    buffer.lines.each do |line|
         
     | 
| 
      
 9 
     | 
    
         
            +
                      data << Yajl::Parser.parse(line)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    end
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
                  data.class == Array ? data : [data]
         
     | 
| 
      
 13 
     | 
    
         
            +
                end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def self.generate_id(template, record, id_keys)
         
     | 
| 
      
 16 
     | 
    
         
            +
                  template % id_keys.map { |key| record[key] }
         
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                def self.get_sources(results)
         
     | 
| 
      
 20 
     | 
    
         
            +
                  results.hits.hits.map { |result| result._source }
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/ej/values.rb
    ADDED
    
    | 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Ej
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Values
         
     | 
| 
      
 3 
     | 
    
         
            +
                attr_reader :client
         
     | 
| 
      
 4 
     | 
    
         
            +
                attr_reader :index
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_reader :logger
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                def initialize(global_options)
         
     | 
| 
      
 8 
     | 
    
         
            +
                  @logger =  Logger.new($stderr)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  @logger.level = global_options[:debug] ? Logger::DEBUG : Logger::INFO
         
     | 
| 
      
 10 
     | 
    
         
            +
                  @client = Elasticsearch::Client.new(
         
     | 
| 
      
 11 
     | 
    
         
            +
                    hosts: global_options[:host],
         
     | 
| 
      
 12 
     | 
    
         
            +
                    logger: @logger,
         
     | 
| 
      
 13 
     | 
    
         
            +
                    index: global_options[:index]
         
     | 
| 
      
 14 
     | 
    
         
            +
                  )
         
     | 
| 
      
 15 
     | 
    
         
            +
                  @index = global_options[:index]
         
     | 
| 
      
 16 
     | 
    
         
            +
                end
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/ej/version.rb
    CHANGED
    
    
    
        data/spec/commands_spec.rb
    CHANGED
    
    
    
        data/spec/core_spec.rb
    CHANGED
    
    | 
         @@ -3,29 +3,20 @@ require 'ej' 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
            describe Ej::Core do
         
     | 
| 
       5 
5 
     | 
    
         
             
              before do
         
     | 
| 
       6 
     | 
    
         
            -
                 
     | 
| 
      
 6 
     | 
    
         
            +
                values = Values.new(
         
     | 
| 
      
 7 
     | 
    
         
            +
                  {
         
     | 
| 
      
 8 
     | 
    
         
            +
                    index: '_all',
         
     | 
| 
      
 9 
     | 
    
         
            +
                    host: 'localhost',
         
     | 
| 
      
 10 
     | 
    
         
            +
                    debug: false
         
     | 
| 
      
 11 
     | 
    
         
            +
                  }
         
     | 
| 
      
 12 
     | 
    
         
            +
                )
         
     | 
| 
      
 13 
     | 
    
         
            +
                @core = Core.new(values)
         
     | 
| 
       7 
14 
     | 
    
         
             
              end
         
     | 
| 
       8 
15 
     | 
    
         | 
| 
       9 
16 
     | 
    
         
             
              it "core not nil" do
         
     | 
| 
       10 
17 
     | 
    
         
             
                @core.should_not nil
         
     | 
| 
       11 
18 
     | 
    
         
             
              end
         
     | 
| 
       12 
19 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
              it "parse json" do
         
     | 
| 
       14 
     | 
    
         
            -
                @core.send(:parse_json, '{"id":1, "name":"rspec"}').should == [{"id" => 1, "name" => "rspec"}]
         
     | 
| 
       15 
     | 
    
         
            -
              end
         
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
              it "parse json" do
         
     | 
| 
       18 
     | 
    
         
            -
                json = %[{"id":1, "name":"rspec"}
         
     | 
| 
       19 
     | 
    
         
            -
                  {"id":1, "name":"rspec"}
         
     | 
| 
       20 
     | 
    
         
            -
                  {"id":1, "name":"rspec"}
         
     | 
| 
       21 
     | 
    
         
            -
                  {"id":1, "name":"rspec"}] 
         
     | 
| 
       22 
     | 
    
         
            -
                @core.send(:parse_json, json).should == [{"id" => 1, "name" => "rspec"}, {"id" => 1, "name" => "rspec"}, {"id" => 1, "name" => "rspec"}, {"id" => 1, "name" => "rspec"}]
         
     | 
| 
       23 
     | 
    
         
            -
              end
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
              it "generate id" do
         
     | 
| 
       26 
     | 
    
         
            -
                @core.send(:generate_id, '%s_%s', {"id" => 1, "name" => "rspec"}, ['id', 'name']).should == '1_rspec'
         
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
20 
     | 
    
         
             
              after do
         
     | 
| 
       30 
21 
     | 
    
         
             
              end
         
     | 
| 
       31 
22 
     | 
    
         
             
            end
         
     | 
    
        data/spec/util_spec.rb
    ADDED
    
    | 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'spec_helper'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'ej'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            describe Ej::Util do
         
     | 
| 
      
 5 
     | 
    
         
            +
              before do
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "parse json" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                Util.parse_json('{"id":1, "name":"rspec"}').should == [{"id" => 1, "name" => "rspec"}]
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              it "parse jsonl" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                json = %[{"id":1, "name":"rspec"}
         
     | 
| 
      
 14 
     | 
    
         
            +
                  {"id":1, "name":"rspec"}
         
     | 
| 
      
 15 
     | 
    
         
            +
                  {"id":1, "name":"rspec"}
         
     | 
| 
      
 16 
     | 
    
         
            +
                  {"id":1, "name":"rspec"}]
         
     | 
| 
      
 17 
     | 
    
         
            +
                Util.parse_json(json).should == [{"id" => 1, "name" => "rspec"}, {"id" => 1, "name" => "rspec"}, {"id" => 1, "name" => "rspec"}, {"id" => 1, "name" => "rspec"}]
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              it "parse json array" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                json = %[[
         
     | 
| 
      
 22 
     | 
    
         
            +
                  {"id":1, "name":"rspec"},
         
     | 
| 
      
 23 
     | 
    
         
            +
                  {"id":2, "name":"rspec"},
         
     | 
| 
      
 24 
     | 
    
         
            +
                  {"id":3, "name":"rspec"},
         
     | 
| 
      
 25 
     | 
    
         
            +
                  {"id":4, "name":"rspec"}
         
     | 
| 
      
 26 
     | 
    
         
            +
                ]]
         
     | 
| 
      
 27 
     | 
    
         
            +
                Util.parse_json(json).should == [{"id" => 1, "name" => "rspec"}, {"id" => 2, "name" => "rspec"}, {"id" => 3, "name" => "rspec"}, {"id" => 4, "name" => "rspec"}]
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              it "generate id" do
         
     | 
| 
      
 31 
     | 
    
         
            +
                Util.generate_id('%s_%s', {"id" => 1, "name" => "rspec"}, ['id', 'name']).should == '1_rspec'
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              after do
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,43 +1,43 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: ej
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - toyama0919
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-04-06 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
       15 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
     | 
    
         
            -
                - - " 
     | 
| 
      
 17 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       20 
20 
     | 
    
         
             
              type: :development
         
     | 
| 
       21 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       22 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       23 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       24 
     | 
    
         
            -
                - - " 
     | 
| 
      
 24 
     | 
    
         
            +
                - - ">="
         
     | 
| 
       25 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       26 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       27 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       28 
28 
     | 
    
         
             
              name: rake
         
     | 
| 
       29 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       30 
30 
     | 
    
         
             
                requirements:
         
     | 
| 
       31 
     | 
    
         
            -
                - - " 
     | 
| 
      
 31 
     | 
    
         
            +
                - - "<"
         
     | 
| 
       32 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       33 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '11.0'
         
     | 
| 
       34 
34 
     | 
    
         
             
              type: :development
         
     | 
| 
       35 
35 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       36 
36 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       37 
37 
     | 
    
         
             
                requirements:
         
     | 
| 
       38 
     | 
    
         
            -
                - - " 
     | 
| 
      
 38 
     | 
    
         
            +
                - - "<"
         
     | 
| 
       39 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
     | 
    
         
            -
                    version: '0'
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '11.0'
         
     | 
| 
       41 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       42 
42 
     | 
    
         
             
              name: pry
         
     | 
| 
       43 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -160,6 +160,7 @@ extra_rdoc_files: [] 
     | 
|
| 
       160 
160 
     | 
    
         
             
            files:
         
     | 
| 
       161 
161 
     | 
    
         
             
            - ".gitignore"
         
     | 
| 
       162 
162 
     | 
    
         
             
            - ".pryrc"
         
     | 
| 
      
 163 
     | 
    
         
            +
            - ".travis.yml"
         
     | 
| 
       163 
164 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       164 
165 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
       165 
166 
     | 
    
         
             
            - README.md
         
     | 
| 
         @@ -167,13 +168,20 @@ files: 
     | 
|
| 
       167 
168 
     | 
    
         
             
            - bin/ej
         
     | 
| 
       168 
169 
     | 
    
         
             
            - ej.gemspec
         
     | 
| 
       169 
170 
     | 
    
         
             
            - lib/ej.rb
         
     | 
| 
      
 171 
     | 
    
         
            +
            - lib/ej/cluster.rb
         
     | 
| 
       170 
172 
     | 
    
         
             
            - lib/ej/commands.rb
         
     | 
| 
      
 173 
     | 
    
         
            +
            - lib/ej/constants.rb
         
     | 
| 
       171 
174 
     | 
    
         
             
            - lib/ej/core.rb
         
     | 
| 
      
 175 
     | 
    
         
            +
            - lib/ej/indices.rb
         
     | 
| 
      
 176 
     | 
    
         
            +
            - lib/ej/nodes.rb
         
     | 
| 
      
 177 
     | 
    
         
            +
            - lib/ej/util.rb
         
     | 
| 
      
 178 
     | 
    
         
            +
            - lib/ej/values.rb
         
     | 
| 
       172 
179 
     | 
    
         
             
            - lib/ej/version.rb
         
     | 
| 
       173 
180 
     | 
    
         
             
            - spec/commands_spec.rb
         
     | 
| 
       174 
181 
     | 
    
         
             
            - spec/core_spec.rb
         
     | 
| 
       175 
182 
     | 
    
         
             
            - spec/ej_spec.rb
         
     | 
| 
       176 
183 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
      
 184 
     | 
    
         
            +
            - spec/util_spec.rb
         
     | 
| 
       177 
185 
     | 
    
         
             
            - template/ejrc.erb
         
     | 
| 
       178 
186 
     | 
    
         
             
            - template/not_analyze_template.json
         
     | 
| 
       179 
187 
     | 
    
         
             
            homepage: https://github.com/toyama0919/ej
         
     | 
| 
         @@ -196,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       196 
204 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       197 
205 
     | 
    
         
             
            requirements: []
         
     | 
| 
       198 
206 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       199 
     | 
    
         
            -
            rubygems_version: 2. 
     | 
| 
      
 207 
     | 
    
         
            +
            rubygems_version: 2.6.11
         
     | 
| 
       200 
208 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       201 
209 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       202 
210 
     | 
    
         
             
            summary: elasticsearch command line utility.
         
     | 
| 
         @@ -205,4 +213,4 @@ test_files: 
     | 
|
| 
       205 
213 
     | 
    
         
             
            - spec/core_spec.rb
         
     | 
| 
       206 
214 
     | 
    
         
             
            - spec/ej_spec.rb
         
     | 
| 
       207 
215 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       208 
     | 
    
         
            -
             
     | 
| 
      
 216 
     | 
    
         
            +
            - spec/util_spec.rb
         
     |