antbird 0.2.2 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3e856fa219aa6977816eb17109225439b602a073ca0481b00bb2e474dcd757e0
4
- data.tar.gz: 802baa6e45a28da47204e6e8fe47d9b9bb66ffd4d5a061e958d8ddc68008a96e
3
+ metadata.gz: 7f6be201e13340d8e4f7cf122049f745af8c9af0d4d6390601a3264bef077992
4
+ data.tar.gz: 7f1540e56bdc23db02b1300971550bdce93bb0ac426a0010d2fa4a9fc245e8f4
5
5
  SHA512:
6
- metadata.gz: d6c020d3139d94edd7f4b354bf892f422e5fd6bfaab2250f05de237ca817c7f89397cd3f09628a63fcb7b64e46141062d460dea8525f0592048fcf448c0d3e9b
7
- data.tar.gz: 8259edb19088e64d0c5d4cc751870710f801ab64fb4dbc91bfbe1083a4657ed56b0da3a34134209e69864f839cd2fdda5865e13c6e394422d68d6251fad94512
6
+ metadata.gz: 9d135caf322ed4ad9056883283062ffbf5f43073087b29befa60033273f95ac87dae3b0f2b21fac79eb15d1bf21fe23d3cf136acd89e5ac46c4f2add0bee7678
7
+ data.tar.gz: c8df3422cf55ffad4f18e4016e0ec972570c525f53250a48962d482d9ac7d45585cf0f2ad8357eb74e1b73dbf2309f2949bcc4ec8e3b016e7f71f07588295848
@@ -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,33 +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.10.1
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
15
23
  - 7.9.3
16
24
  - 7.8.1
17
- - 7.7.1
18
- - 7.6.2
19
- - 7.5.2
20
- - 7.4.2
21
- - 7.3.2
22
- - 7.2.1
23
- - 7.1.1
24
- - 6.8.13
25
- services:
26
- elasticsearch:
27
- image: docker.elastic.co/elasticsearch/elasticsearch-oss:${{matrix.elasticsearch}}
28
- ports:
29
- - 9200:9200
30
- - 9300:9300
31
- env:
32
- discovery.type: single-node
25
+ - 6.8.18
33
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}}
34
38
  - uses: actions/checkout@v2
35
39
  - uses: ruby/setup-ruby@v1
36
40
  with:
37
- ruby-version: 2.6
41
+ ruby-version: 2.7
38
42
  bundler-cache: true
39
- - run: bundle install --jobs 4 --retry 3
40
43
  - name: Wait for elasticsearch
41
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'"
42
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,27 @@ 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
+
25
+ if version
26
+ @version = version
27
+ @distribution = distribution
28
+ else
29
+ fetch_version_and_distribution
30
+ end
24
31
 
25
32
  @api_specs = {}
26
33
  end
27
- attr_reader :scope, :url, :version
34
+ attr_reader :scope, :url, :version, :distribution
28
35
  attr_reader :read_timeout, :open_timeout, :adapter
29
- attr_reader :api_specs
36
+ attr_reader :api_specs, :last_request
30
37
 
31
38
  def scoped(new_scope = {})
32
39
  Client.new(
33
40
  scope: new_scope,
34
41
  url: url,
35
42
  version: version,
43
+ distribution: distribution,
36
44
  read_timeout: read_timeout,
37
45
  open_timeout: open_timeout
38
46
  )
@@ -43,11 +51,13 @@ module Antbird
43
51
 
44
52
  body = extract_body(params)
45
53
  scopes = extract_scopes(params)
54
+ forced_method = extract_method(params)
46
55
 
47
56
  # Greedy match
48
57
  api_path = nil
58
+ api_path_template = nil
49
59
  path_methods = nil
50
- api_spec['url']['paths'].sort { |a, b| b.size <=> a.size }.each do |path|
60
+ sort_url_paths(api_spec['url']['paths']).each do |path|
51
61
  if path.is_a?(Hash)
52
62
  path_methods = path['methods']
53
63
  path = path['path']
@@ -57,19 +67,40 @@ module Antbird
57
67
  scopes[$1.to_sym] || @scope[$1.to_sym] || match
58
68
  end
59
69
 
60
- break api_path = embeded unless embeded.include?('{')
70
+ unless embeded.include?('{')
71
+ api_path_template = path
72
+ api_path = embeded
73
+ break
74
+ end
61
75
  end
62
76
 
63
77
  unless api_path
64
78
  raise "API path not found: paths: #{api_spec['url']['paths']}, scope: #{@scope}"
65
79
  end
66
80
 
67
- methods = (Array(path_methods) + Array(api_spec['methods'])).map(&:downcase).map(&:to_sym)
68
- method = methods.include?(:post) ? :post : methods.first
81
+ methods = (path_methods || api_spec['methods']).map { |m| m.downcase.to_sym }
82
+ method =
83
+ if forced_method
84
+ forced_method
85
+ elsif methods.include?(:put)
86
+ :put
87
+ elsif methods.include?(:post)
88
+ :post
89
+ else
90
+ methods.first
91
+ end
69
92
 
70
93
  read_timeout = params.delete(:read_timeout)
71
94
  params.reject! { |_, v| v.nil? }
72
95
 
96
+ @last_request = {
97
+ method: method,
98
+ forced_method: forced_method,
99
+ api_path: api_path,
100
+ api_path_template: api_path_template,
101
+ params: params
102
+ }
103
+
73
104
  response =
74
105
  case method
75
106
  when :head
@@ -116,6 +147,10 @@ module Antbird
116
147
  response.body
117
148
  end
118
149
 
150
+ def extract_method(params)
151
+ params.delete(:method)&.to_sym
152
+ end
153
+
119
154
  def extract_scopes(params)
120
155
  scopes = {}
121
156
  [:index, :type, :id].each do |s|
@@ -163,8 +198,40 @@ module Antbird
163
198
  end
164
199
  end
165
200
 
201
+ def elasticsearch?
202
+ !opensearch?
203
+ end
204
+
205
+ def opensearch?
206
+ distribution == 'opensearch'
207
+ end
208
+
209
+ def elasticsearch_v7_0_compatible?
210
+ return true if opensearch?
211
+
212
+ elasticsearch? && Gem::Version.new(version) >= Gem::Version.new('7.0.0')
213
+ end
214
+
215
+ def elasticsearch_v7_6_compatible?
216
+ return true if opensearch?
217
+
218
+ elasticsearch? && Gem::Version.new(version) >= Gem::Version.new('7.6.0')
219
+ end
220
+
166
221
  private
167
222
 
223
+ # NOTE: stable sort
224
+ def sort_url_paths(url_paths)
225
+ i = 0
226
+ url_paths.sort_by do |path|
227
+ if path.is_a?(Hash)
228
+ [-path['path'].count('{'), (path['deprecated'] ? 1 : 0), i += 1]
229
+ else
230
+ [-path.count('{'), i += 1]
231
+ end
232
+ end
233
+ end
234
+
168
235
  def handle_errors!(response)
169
236
  if response.status >= 500
170
237
  raise ServerError, response
@@ -182,17 +249,26 @@ module Antbird
182
249
  end
183
250
  end
184
251
 
185
- def fetch_version
186
- connection.get('/').body.dig('version', 'number')
252
+ def fetch_version_and_distribution
253
+ version_hash = connection.get('/').body.dig('version')
254
+ @version = version_hash['number']
255
+ @distribution = version_hash['distribution']
256
+ end
257
+
258
+ def class_version
259
+ version.split('.')[0, 2].join('_')
187
260
  end
188
261
 
189
262
  def ensure_api_spec_loaded
190
263
  return if api_specs_loaded?
191
264
 
192
- @version ||= fetch_version
193
- 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}"
265
+ if opensearch?
266
+ require "antbird/rest_api/rest_api_opensearch_v#{class_version}"
267
+ extend Antbird::RestApi.const_get "RestApiOpensearchV#{class_version}"
268
+ else
269
+ require "antbird/rest_api/rest_api_v#{class_version}"
270
+ extend Antbird::RestApi.const_get "RestApiV#{class_version}"
271
+ end
196
272
 
197
273
  @api_specs_loaded = true
198
274
  end