antbird 0.2.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0233525863b99bccb8734b00d5c92901924403113dd6bade6936ff566a00fa3a'
4
- data.tar.gz: 00e9494e1a04c47adf6970bdc283a6854818186b112660c1830b9ada9370998c
3
+ metadata.gz: 3c8c8fecccb123dbea652666e8c3afe9c0bb82b05addd4c16184285fc8d883fa
4
+ data.tar.gz: 300f03046a12082dc0f7ee92dc0283f1228cdc6dc1975cfa965e56d7baf065db
5
5
  SHA512:
6
- metadata.gz: '0191b07ce7917e9d57bf2b96e75e4f45d735e578209fe8e093bdf2bab43b08f76a61c6150cbae034e7a723c248571bf68b22cedd2def7962aab06f7ad353063f'
7
- data.tar.gz: ede40233ca26abddba033fe7c52920e3c8aa7167d1ab5bc27aad3bd1f2fd01305b9ce7aacaf16132759b79cc4ddacc99a53d6bec3bd52ad46e358433f5dcc6ef
6
+ metadata.gz: e5e54fed3437d547f92bfead50aeab29612694a955d6ed3f762962eaa29a7bec0743027557c8f0d15c82f032f5f5f188e138eb1a58a53afdb893b4e9abfa09b6
7
+ data.tar.gz: 37595c88f4e1df53b79d3f859c9a551d9ebfd49fd005f6e75136c91b677c84def615f3022bbac99149da8f00ff1991884c9a18a9d43f50e476fbfe2875adec6a
@@ -0,0 +1,41 @@
1
+ name: build-os
2
+
3
+ on: [push]
4
+ env:
5
+ ENGINE_NAME: opensearch
6
+ REST_API_SPEC_REPO: opensearch-project/OpenSearch
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ fail-fast: false
13
+ matrix:
14
+ # https://github.com/opensearch-project/OpenSearch/releases
15
+ search_versions:
16
+ - 1.2.0
17
+ - 1.1.0
18
+ - 1.0.0
19
+ services:
20
+ opensearch:
21
+ image: opensearchproject/opensearch:${{matrix.search_versions}}
22
+ ports:
23
+ - 9200:9200
24
+ env:
25
+ discovery.type: single-node
26
+ plugins.security.disabled: true
27
+ steps:
28
+ - name: Configure sysctl limits
29
+ run: |
30
+ sudo swapoff -a
31
+ sudo sysctl -w vm.swappiness=1
32
+ sudo sysctl -w fs.file-max=262144
33
+ sudo sysctl -w vm.max_map_count=262144
34
+ - uses: actions/checkout@v2
35
+ - uses: ruby/setup-ruby@v1
36
+ with:
37
+ ruby-version: 2.7
38
+ bundler-cache: true
39
+ - name: Wait for OpenSearch
40
+ run: timeout 60 bash -c "until curl --silent --output /dev/null localhost:9200/_cat/health?h=st; do printf '.'; sleep 5; done; printf '\n'"
41
+ - run: bundle exec rspec
@@ -1,6 +1,9 @@
1
1
  name: build
2
2
 
3
3
  on: [push]
4
+ env:
5
+ ENGINE_NAME: elasticsearch
6
+ REST_API_SPEC_REPO: elastic/elasticsearch
4
7
 
5
8
  jobs:
6
9
  build:
@@ -10,32 +13,33 @@ jobs:
10
13
  matrix:
11
14
  # 1. Run script/list_versions
12
15
  # 2. Check https://www.elastic.co/jp/support/eol
13
- elasticsearch:
14
- - 7.9.2
16
+ search_versions:
17
+ - 7.15.2
18
+ - 7.14.2
19
+ - 7.13.4
20
+ - 7.12.1
21
+ - 7.11.2
22
+ - 7.10.2
23
+ - 7.9.3
15
24
  - 7.8.1
16
- - 7.7.1
17
- - 7.6.2
18
- - 7.5.2
19
- - 7.4.2
20
- - 7.3.2
21
- - 7.2.1
22
- - 7.1.1
23
- - 6.8.12
24
- services:
25
- elasticsearch:
26
- image: docker.elastic.co/elasticsearch/elasticsearch-oss:${{matrix.elasticsearch}}
27
- ports:
28
- - 9200:9200
29
- - 9300:9300
30
- env:
31
- discovery.type: single-node
25
+ - 6.8.18
32
26
  steps:
27
+ # @see https://github.com/elastic/elastic-github-actions/tree/master/elasticsearch
28
+ - name: Configure sysctl limits for Elasticsearch
29
+ run: |
30
+ sudo swapoff -a
31
+ sudo sysctl -w vm.swappiness=1
32
+ sudo sysctl -w fs.file-max=262144
33
+ sudo sysctl -w vm.max_map_count=262144
34
+ - name: Runs Elasticsearch
35
+ uses: elastic/elastic-github-actions/elasticsearch@master
36
+ with:
37
+ stack-version: ${{matrix.search_versions}}
33
38
  - uses: actions/checkout@v2
34
39
  - uses: ruby/setup-ruby@v1
35
40
  with:
36
- ruby-version: 2.6
41
+ ruby-version: 2.7
37
42
  bundler-cache: true
38
- - run: bundle install --jobs 4 --retry 3
39
43
  - name: Wait for elasticsearch
40
44
  run: timeout 60 bash -c "until curl --silent --output /dev/null localhost:9200/_cat/health?h=st; do printf '.'; sleep 5; done; printf '\n'"
41
45
  - run: bundle exec rspec
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Antbird
2
2
 
3
- Nearly auto-generated Elasticsearch client
3
+ Nearly auto-generated Elasticsearch/OpenSearch client
4
4
 
5
5
  [![Build Status](https://github.com/fukayatsu/antbird/workflows/build/badge.svg)](https://github.com/fukayatsu/antbird/actions)
6
6
 
@@ -113,9 +113,9 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
113
113
 
114
114
  Bug reports and pull requests are welcome on GitHub at https://github.com/fukayatsu/antbird. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
115
115
 
116
- ### How to support newer version of Elasticsearch
116
+ ### How to support newer version of Elasticsearch/OpenSearch
117
117
 
118
- 1. Add Elasticsearch version to `jobs.build.strategy.matrix.elasticsearch` on `.github/workflows/build.yml`
118
+ 1. Add Elasticsearch version to `jobs.build.strategy.matrix.search_versions` on `.github/workflows/build.yml` / `.github/workflows/build-os.yml`
119
119
  - Only one line for `x.y.*` version
120
120
  1. `script/generate_api_methods`
121
121
  - Set `GITHUB_TOKEN=***` env for GitHub API Limit
@@ -8,6 +8,7 @@ module Antbird
8
8
  scope: {},
9
9
  url: "http://localhost:9200",
10
10
  version: nil,
11
+ distribution: nil,
11
12
  read_timeout: 5,
12
13
  open_timeout: 2,
13
14
  adapter: ::Faraday.default_adapter,
@@ -19,20 +20,22 @@ module Antbird
19
20
  @block = block
20
21
  @url = url
21
22
 
22
- @scope = scope.transform_keys(&:to_sym)
23
- @version = version
23
+ @scope = scope.transform_keys(&:to_sym)
24
+ @version = version
25
+ @distribution = distribution
24
26
 
25
27
  @api_specs = {}
26
28
  end
27
- attr_reader :scope, :url, :version
29
+ attr_reader :scope, :url, :version, :distribution
28
30
  attr_reader :read_timeout, :open_timeout, :adapter
29
- attr_reader :api_specs
31
+ attr_reader :api_specs, :last_request
30
32
 
31
33
  def scoped(new_scope = {})
32
34
  Client.new(
33
35
  scope: new_scope,
34
36
  url: url,
35
37
  version: version,
38
+ distribution: distribution,
36
39
  read_timeout: read_timeout,
37
40
  open_timeout: open_timeout
38
41
  )
@@ -43,11 +46,13 @@ module Antbird
43
46
 
44
47
  body = extract_body(params)
45
48
  scopes = extract_scopes(params)
49
+ forced_method = extract_method(params)
46
50
 
47
51
  # Greedy match
48
52
  api_path = nil
53
+ api_path_template = nil
49
54
  path_methods = nil
50
- api_spec['url']['paths'].sort { |a, b| b.size <=> a.size }.each do |path|
55
+ sort_url_paths(api_spec['url']['paths']).each do |path|
51
56
  if path.is_a?(Hash)
52
57
  path_methods = path['methods']
53
58
  path = path['path']
@@ -57,19 +62,40 @@ module Antbird
57
62
  scopes[$1.to_sym] || @scope[$1.to_sym] || match
58
63
  end
59
64
 
60
- break api_path = embeded unless embeded.include?('{')
65
+ unless embeded.include?('{')
66
+ api_path_template = path
67
+ api_path = embeded
68
+ break
69
+ end
61
70
  end
62
71
 
63
72
  unless api_path
64
73
  raise "API path not found: paths: #{api_spec['url']['paths']}, scope: #{@scope}"
65
74
  end
66
75
 
67
- methods = (Array(path_methods) + Array(api_spec['methods'])).map(&:downcase).map(&:to_sym)
68
- method = methods.include?(:post) ? :post : methods.first
76
+ methods = (path_methods || api_spec['methods']).map { |m| m.downcase.to_sym }
77
+ method =
78
+ if forced_method
79
+ forced_method
80
+ elsif methods.include?(:put)
81
+ :put
82
+ elsif methods.include?(:post)
83
+ :post
84
+ else
85
+ methods.first
86
+ end
69
87
 
70
88
  read_timeout = params.delete(:read_timeout)
71
89
  params.reject! { |_, v| v.nil? }
72
90
 
91
+ @last_request = {
92
+ method: method,
93
+ forced_method: forced_method,
94
+ api_path: api_path,
95
+ api_path_template: api_path_template,
96
+ params: params
97
+ }
98
+
73
99
  response =
74
100
  case method
75
101
  when :head
@@ -116,6 +142,10 @@ module Antbird
116
142
  response.body
117
143
  end
118
144
 
145
+ def extract_method(params)
146
+ params.delete(:method)&.to_sym
147
+ end
148
+
119
149
  def extract_scopes(params)
120
150
  scopes = {}
121
151
  [:index, :type, :id].each do |s|
@@ -163,8 +193,41 @@ module Antbird
163
193
  end
164
194
  end
165
195
 
196
+ def elasticsearch?
197
+ !opensearch?
198
+ end
199
+
200
+ def opensearch?
201
+ fetch_version
202
+ distribution == 'opensearch'
203
+ end
204
+
205
+ def elasticsearch_v7_0_compatible?
206
+ return true if opensearch?
207
+
208
+ elasticsearch? && Gem::Version.new(version) >= Gem::Version.new('7.0.0')
209
+ end
210
+
211
+ def elasticsearch_v7_6_compatible?
212
+ return true if opensearch?
213
+
214
+ elasticsearch? && Gem::Version.new(version) >= Gem::Version.new('7.6.0')
215
+ end
216
+
166
217
  private
167
218
 
219
+ # NOTE: stable sort
220
+ def sort_url_paths(url_paths)
221
+ i = 0
222
+ url_paths.sort_by do |path|
223
+ if path.is_a?(Hash)
224
+ [-path['path'].count('{'), (path['deprecated'] ? 1 : 0), i += 1]
225
+ else
226
+ [-path.count('{'), i += 1]
227
+ end
228
+ end
229
+ end
230
+
168
231
  def handle_errors!(response)
169
232
  if response.status >= 500
170
233
  raise ServerError, response
@@ -183,16 +246,25 @@ module Antbird
183
246
  end
184
247
 
185
248
  def fetch_version
186
- connection.get('/').body.dig('version', 'number')
249
+ return if @version
250
+
251
+ version_hash = connection.get('/').body.dig('version')
252
+ @version ||= version_hash['number']
253
+ @distribution ||= version_hash['distribution']
187
254
  end
188
255
 
189
256
  def ensure_api_spec_loaded
190
257
  return if api_specs_loaded?
191
258
 
192
- @version ||= fetch_version
259
+ fetch_version
193
260
  class_version = @version.split('.')[0, 2].join('_')
194
- require "antbird/rest_api/rest_api_v#{class_version}"
195
- extend Antbird::RestApi.const_get "RestApiV#{class_version}"
261
+ if opensearch?
262
+ require "antbird/rest_api/rest_api_opensearch_v#{class_version}"
263
+ extend Antbird::RestApi.const_get "RestApiOpensearchV#{class_version}"
264
+ else
265
+ require "antbird/rest_api/rest_api_v#{class_version}"
266
+ extend Antbird::RestApi.const_get "RestApiV#{class_version}"
267
+ end
196
268
 
197
269
  @api_specs_loaded = true
198
270
  end