opensearch-ruby 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (432) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +80 -46
  4. data/USER_GUIDE.md +146 -0
  5. data/bin/opensearch_ruby_console +4 -34
  6. data/lib/opensearch/api/actions/abort_benchmark.rb +49 -0
  7. data/lib/opensearch/api/actions/benchmark.rb +88 -0
  8. data/lib/opensearch/api/actions/bulk.rb +91 -0
  9. data/lib/opensearch/api/actions/cat/aliases.rb +79 -0
  10. data/lib/opensearch/api/actions/cat/all_pit_segments.rb +45 -0
  11. data/lib/opensearch/api/actions/cat/allocation.rb +83 -0
  12. data/lib/opensearch/api/actions/cat/cluster_manager.rb +54 -0
  13. data/lib/opensearch/api/actions/cat/count.rb +75 -0
  14. data/lib/opensearch/api/actions/cat/fielddata.rb +77 -0
  15. data/lib/opensearch/api/actions/cat/health.rb +72 -0
  16. data/lib/opensearch/api/actions/cat/help.rb +61 -0
  17. data/lib/opensearch/api/actions/cat/indices.rb +93 -0
  18. data/lib/opensearch/api/actions/cat/master.rb +73 -0
  19. data/lib/opensearch/api/actions/cat/nodeattrs.rb +73 -0
  20. data/lib/opensearch/api/actions/cat/nodes.rb +82 -0
  21. data/lib/opensearch/api/actions/cat/params_registry.rb +69 -0
  22. data/lib/opensearch/api/actions/cat/pending_tasks.rb +76 -0
  23. data/lib/opensearch/api/actions/cat/pit_segments.rb +48 -0
  24. data/lib/opensearch/api/actions/cat/plugins.rb +75 -0
  25. data/lib/opensearch/api/actions/cat/recovery.rb +84 -0
  26. data/lib/opensearch/api/actions/cat/repositories.rb +73 -0
  27. data/lib/opensearch/api/actions/cat/segments.rb +76 -0
  28. data/lib/opensearch/api/actions/cat/shards.rb +85 -0
  29. data/lib/opensearch/api/actions/cat/snapshots.rb +82 -0
  30. data/lib/opensearch/api/actions/cat/tasks.rb +77 -0
  31. data/lib/opensearch/api/actions/cat/templates.rb +80 -0
  32. data/lib/opensearch/api/actions/cat/thread_pool.rb +84 -0
  33. data/lib/opensearch/api/actions/clear_scroll.rb +62 -0
  34. data/lib/opensearch/api/actions/cluster/allocation_explain.rb +67 -0
  35. data/lib/opensearch/api/actions/cluster/delete_component_template.rb +68 -0
  36. data/lib/opensearch/api/actions/cluster/delete_voting_config_exclusions.rb +59 -0
  37. data/lib/opensearch/api/actions/cluster/exists_component_template.rb +70 -0
  38. data/lib/opensearch/api/actions/cluster/get_component_template.rb +70 -0
  39. data/lib/opensearch/api/actions/cluster/get_settings.rb +67 -0
  40. data/lib/opensearch/api/actions/cluster/health.rb +88 -0
  41. data/lib/opensearch/api/actions/cluster/params_registry.rb +69 -0
  42. data/lib/opensearch/api/actions/cluster/pending_tasks.rb +64 -0
  43. data/lib/opensearch/api/actions/cluster/post_voting_config_exclusions.rb +63 -0
  44. data/lib/opensearch/api/actions/cluster/put_component_template.rb +72 -0
  45. data/lib/opensearch/api/actions/cluster/put_settings.rb +68 -0
  46. data/{spec/unit/wrapper_gem_spec.rb → lib/opensearch/api/actions/cluster/remote_info.rb} +20 -17
  47. data/lib/opensearch/api/actions/cluster/reroute.rb +72 -0
  48. data/lib/opensearch/api/actions/cluster/state.rb +87 -0
  49. data/lib/opensearch/api/actions/cluster/stats.rb +68 -0
  50. data/lib/opensearch/api/actions/count.rb +96 -0
  51. data/lib/opensearch/api/actions/create.rb +60 -0
  52. data/lib/opensearch/api/actions/create_pit.rb +45 -0
  53. data/lib/opensearch/api/actions/dangling_indices/delete_dangling_index.rb +70 -0
  54. data/lib/opensearch/api/actions/dangling_indices/import_dangling_index.rb +69 -0
  55. data/lib/opensearch/api/actions/dangling_indices/list_dangling_indices.rb +51 -0
  56. data/lib/opensearch/api/actions/dangling_indices/params_registry.rb +69 -0
  57. data/lib/opensearch/api/actions/delete.rb +89 -0
  58. data/lib/opensearch/api/actions/delete_all_pits.rb +26 -0
  59. data/lib/opensearch/api/actions/delete_by_query.rb +133 -0
  60. data/lib/opensearch/api/actions/delete_by_query_rethrottle.rb +62 -0
  61. data/lib/opensearch/api/actions/delete_by_rethrottle.rb +55 -0
  62. data/lib/opensearch/api/actions/delete_pit.rb +30 -0
  63. data/lib/opensearch/api/actions/delete_script.rb +66 -0
  64. data/lib/opensearch/api/actions/exists.rb +94 -0
  65. data/lib/opensearch/api/actions/exists_source.rb +89 -0
  66. data/lib/opensearch/api/actions/explain.rb +99 -0
  67. data/lib/opensearch/api/actions/features/get_features.rb +61 -0
  68. data/lib/opensearch/api/actions/features/params_registry.rb +69 -0
  69. data/lib/opensearch/api/actions/features/reset_features.rb +55 -0
  70. data/lib/opensearch/api/actions/field_caps.rb +78 -0
  71. data/lib/opensearch/api/actions/get.rb +93 -0
  72. data/lib/opensearch/api/actions/get_all_pits.rb +26 -0
  73. data/lib/opensearch/api/actions/get_script.rb +64 -0
  74. data/lib/opensearch/api/actions/get_script_context.rb +53 -0
  75. data/lib/opensearch/api/actions/get_script_languages.rb +53 -0
  76. data/lib/opensearch/api/actions/get_source.rb +87 -0
  77. data/lib/opensearch/api/actions/index.rb +96 -0
  78. data/lib/opensearch/api/actions/indices/add_block.rb +78 -0
  79. data/lib/opensearch/api/actions/indices/analyze.rb +71 -0
  80. data/lib/opensearch/api/actions/indices/clear_cache.rb +79 -0
  81. data/lib/opensearch/api/actions/indices/clone.rb +75 -0
  82. data/lib/opensearch/api/actions/indices/close.rb +76 -0
  83. data/lib/opensearch/api/actions/indices/create.rb +71 -0
  84. data/lib/opensearch/api/actions/indices/delete.rb +78 -0
  85. data/lib/opensearch/api/actions/indices/delete_alias.rb +72 -0
  86. data/lib/opensearch/api/actions/indices/delete_index_template.rb +68 -0
  87. data/lib/opensearch/api/actions/indices/delete_template.rb +72 -0
  88. data/lib/opensearch/api/actions/indices/disk_usage.rb +76 -0
  89. data/lib/opensearch/api/actions/indices/exists.rb +79 -0
  90. data/lib/opensearch/api/actions/indices/exists_alias.rb +82 -0
  91. data/lib/opensearch/api/actions/indices/exists_index_template.rb +72 -0
  92. data/lib/opensearch/api/actions/indices/exists_template.rb +75 -0
  93. data/lib/opensearch/api/actions/indices/field_usage_stats.rb +74 -0
  94. data/lib/opensearch/api/actions/indices/flush.rb +74 -0
  95. data/lib/opensearch/api/actions/indices/forcemerge.rb +76 -0
  96. data/lib/opensearch/api/actions/indices/get.rb +78 -0
  97. data/lib/opensearch/api/actions/indices/get_alias.rb +79 -0
  98. data/lib/opensearch/api/actions/indices/get_field_mapping.rb +83 -0
  99. data/lib/opensearch/api/actions/indices/get_index_template.rb +72 -0
  100. data/lib/opensearch/api/actions/indices/get_mapping.rb +81 -0
  101. data/lib/opensearch/api/actions/indices/get_settings.rb +87 -0
  102. data/lib/opensearch/api/actions/indices/get_template.rb +72 -0
  103. data/lib/opensearch/api/actions/indices/get_upgrade.rb +75 -0
  104. data/lib/opensearch/api/actions/indices/open.rb +76 -0
  105. data/lib/opensearch/api/actions/indices/params_registry.rb +69 -0
  106. data/lib/opensearch/api/actions/indices/put_alias.rb +73 -0
  107. data/lib/opensearch/api/actions/indices/put_index_template.rb +72 -0
  108. data/lib/opensearch/api/actions/indices/put_mapping.rb +82 -0
  109. data/lib/opensearch/api/actions/indices/put_settings.rb +83 -0
  110. data/lib/opensearch/api/actions/indices/put_template.rb +72 -0
  111. data/lib/opensearch/api/actions/indices/recovery.rb +68 -0
  112. data/lib/opensearch/api/actions/indices/refresh.rb +70 -0
  113. data/lib/opensearch/api/actions/indices/resolve_index.rb +68 -0
  114. data/lib/opensearch/api/actions/indices/rollover.rb +81 -0
  115. data/lib/opensearch/api/actions/indices/segments.rb +72 -0
  116. data/lib/opensearch/api/actions/indices/shard_stores.rb +72 -0
  117. data/lib/opensearch/api/actions/indices/shrink.rb +77 -0
  118. data/lib/opensearch/api/actions/indices/simulate_index_template.rb +71 -0
  119. data/lib/opensearch/api/actions/indices/simulate_template.rb +73 -0
  120. data/lib/opensearch/api/actions/indices/split.rb +77 -0
  121. data/lib/opensearch/api/actions/indices/stats.rb +100 -0
  122. data/lib/opensearch/api/actions/indices/update_aliases.rb +66 -0
  123. data/lib/opensearch/api/actions/indices/upgrade.rb +79 -0
  124. data/lib/opensearch/api/actions/indices/validate_query.rb +99 -0
  125. data/{Gemfile → lib/opensearch/api/actions/info.rb} +19 -8
  126. data/lib/opensearch/api/actions/ingest/delete_pipeline.rb +68 -0
  127. data/lib/opensearch/api/actions/ingest/geo_ip_stats.rb +51 -0
  128. data/lib/opensearch/api/actions/ingest/get_pipeline.rb +70 -0
  129. data/lib/opensearch/api/actions/ingest/params_registry.rb +69 -0
  130. data/lib/opensearch/api/actions/ingest/processor_grok.rb +51 -0
  131. data/lib/opensearch/api/actions/ingest/put_pipeline.rb +70 -0
  132. data/lib/opensearch/api/actions/ingest/simulate.rb +69 -0
  133. data/lib/opensearch/api/actions/mget.rb +86 -0
  134. data/lib/opensearch/api/actions/msearch.rb +105 -0
  135. data/lib/opensearch/api/actions/msearch_template.rb +89 -0
  136. data/lib/opensearch/api/actions/mtermvectors.rb +102 -0
  137. data/lib/opensearch/api/actions/nodes/hot_threads.rb +81 -0
  138. data/lib/opensearch/api/actions/nodes/info.rb +75 -0
  139. data/lib/opensearch/api/actions/nodes/params_registry.rb +69 -0
  140. data/lib/opensearch/api/actions/nodes/reload_secure_settings.rb +67 -0
  141. data/lib/opensearch/api/actions/nodes/shutdown.rb +65 -0
  142. data/lib/opensearch/api/actions/nodes/stats.rb +96 -0
  143. data/lib/opensearch/api/actions/nodes/usage.rb +73 -0
  144. data/lib/opensearch/api/actions/params_registry.rb +67 -0
  145. data/lib/opensearch/api/actions/ping.rb +54 -0
  146. data/lib/opensearch/api/actions/put_script.rb +76 -0
  147. data/lib/opensearch/api/actions/rank_eval.rb +77 -0
  148. data/lib/opensearch/api/actions/reindex.rb +76 -0
  149. data/lib/opensearch/api/actions/reindex_rethrottle.rb +62 -0
  150. data/{spec/integration/security_disabled/validation_integration_spec.rb → lib/opensearch/api/actions/remote/info.rb} +17 -11
  151. data/lib/opensearch/api/actions/remote_store/restore.rb +43 -0
  152. data/lib/opensearch/api/actions/render_search_template.rb +62 -0
  153. data/lib/opensearch/api/actions/scripts_painless_execute.rb +59 -0
  154. data/lib/opensearch/api/actions/scroll.rb +78 -0
  155. data/lib/opensearch/api/actions/search.rb +159 -0
  156. data/lib/opensearch/api/actions/search_shards.rb +74 -0
  157. data/lib/opensearch/api/actions/search_template.rb +96 -0
  158. data/lib/opensearch/api/actions/security/change_password.rb +39 -0
  159. data/lib/opensearch/api/actions/security/create_action_group.rb +42 -0
  160. data/lib/opensearch/api/actions/security/create_role.rb +43 -0
  161. data/lib/opensearch/api/actions/security/create_role_mapping.rb +43 -0
  162. data/lib/opensearch/api/actions/security/create_tenant.rb +42 -0
  163. data/lib/opensearch/api/actions/security/create_user.rb +43 -0
  164. data/lib/opensearch/api/actions/security/delete_action_group.rb +41 -0
  165. data/lib/opensearch/api/actions/security/delete_distinguished_names.rb +41 -0
  166. data/lib/opensearch/api/actions/security/delete_role.rb +41 -0
  167. data/lib/opensearch/api/actions/security/delete_role_mapping.rb +41 -0
  168. data/lib/opensearch/api/actions/security/delete_tenant.rb +41 -0
  169. data/lib/opensearch/api/actions/security/delete_user.rb +41 -0
  170. data/lib/opensearch/api/actions/security/flush_cache.rb +36 -0
  171. data/lib/opensearch/api/actions/security/get_account_details.rb +36 -0
  172. data/lib/opensearch/api/actions/security/get_action_group.rb +41 -0
  173. data/lib/opensearch/api/actions/security/get_action_groups.rb +36 -0
  174. data/lib/opensearch/api/actions/security/get_audit_configuration.rb +36 -0
  175. data/lib/opensearch/api/actions/security/get_certificates.rb +36 -0
  176. data/lib/opensearch/api/actions/security/get_configuration.rb +36 -0
  177. data/lib/opensearch/api/actions/security/get_distinguished_names.rb +39 -0
  178. data/lib/opensearch/api/actions/security/get_role.rb +41 -0
  179. data/lib/opensearch/api/actions/security/get_role_mapping.rb +41 -0
  180. data/lib/opensearch/api/actions/security/get_role_mappings.rb +36 -0
  181. data/lib/opensearch/api/actions/security/get_roles.rb +36 -0
  182. data/lib/opensearch/api/actions/security/get_tenant.rb +41 -0
  183. data/lib/opensearch/api/actions/security/get_tenants.rb +36 -0
  184. data/lib/opensearch/api/actions/security/get_user.rb +41 -0
  185. data/lib/opensearch/api/actions/security/get_users.rb +36 -0
  186. data/lib/opensearch/api/actions/security/health.rb +36 -0
  187. data/lib/opensearch/api/actions/security/patch_action_group.rb +42 -0
  188. data/lib/opensearch/api/actions/security/patch_action_groups.rb +37 -0
  189. data/lib/opensearch/api/actions/security/patch_audit_configuration.rb +39 -0
  190. data/lib/opensearch/api/actions/security/patch_configuration.rb +39 -0
  191. data/lib/opensearch/api/actions/security/patch_distinguished_names.rb +39 -0
  192. data/lib/opensearch/api/actions/security/patch_role.rb +43 -0
  193. data/lib/opensearch/api/actions/security/patch_role_mapping.rb +43 -0
  194. data/lib/opensearch/api/actions/security/patch_role_mappings.rb +39 -0
  195. data/lib/opensearch/api/actions/security/patch_roles.rb +39 -0
  196. data/lib/opensearch/api/actions/security/patch_tenant.rb +43 -0
  197. data/lib/opensearch/api/actions/security/patch_tenants.rb +39 -0
  198. data/lib/opensearch/api/actions/security/patch_user.rb +43 -0
  199. data/lib/opensearch/api/actions/security/patch_users.rb +39 -0
  200. data/lib/opensearch/api/actions/security/reload_http_certificates.rb +36 -0
  201. data/lib/opensearch/api/actions/security/reload_transport_certificates.rb +36 -0
  202. data/lib/opensearch/api/actions/security/update_audit_configuration.rb +39 -0
  203. data/lib/opensearch/api/actions/security/update_configuration.rb +39 -0
  204. data/lib/opensearch/api/actions/security/update_distinguished_names.rb +42 -0
  205. data/lib/opensearch/api/actions/shutdown/delete_node.rb +60 -0
  206. data/lib/opensearch/api/actions/shutdown/get_node.rb +62 -0
  207. data/lib/opensearch/api/actions/shutdown/params_registry.rb +69 -0
  208. data/lib/opensearch/api/actions/shutdown/put_node.rb +62 -0
  209. data/lib/opensearch/api/actions/snapshot/cleanup_repository.rb +68 -0
  210. data/lib/opensearch/api/actions/snapshot/clone.rb +76 -0
  211. data/lib/opensearch/api/actions/snapshot/create.rb +73 -0
  212. data/lib/opensearch/api/actions/snapshot/create_repository.rb +72 -0
  213. data/lib/opensearch/api/actions/snapshot/delete.rb +74 -0
  214. data/lib/opensearch/api/actions/snapshot/delete_repository.rb +72 -0
  215. data/lib/opensearch/api/actions/snapshot/get.rb +82 -0
  216. data/lib/opensearch/api/actions/snapshot/get_features.rb +61 -0
  217. data/lib/opensearch/api/actions/snapshot/get_repository.rb +73 -0
  218. data/lib/opensearch/api/actions/snapshot/params_registry.rb +69 -0
  219. data/lib/opensearch/api/actions/snapshot/repository_analyze.rb +84 -0
  220. data/lib/opensearch/api/actions/snapshot/restore.rb +73 -0
  221. data/lib/opensearch/api/actions/snapshot/status.rb +79 -0
  222. data/lib/opensearch/api/actions/snapshot/verify_repository.rb +68 -0
  223. data/lib/opensearch/api/actions/tasks/cancel.rb +76 -0
  224. data/lib/opensearch/api/actions/tasks/get.rb +68 -0
  225. data/lib/opensearch/api/actions/tasks/list.rb +75 -0
  226. data/lib/opensearch/api/actions/tasks/params_registry.rb +69 -0
  227. data/lib/opensearch/api/actions/termvectors.rb +108 -0
  228. data/lib/opensearch/api/actions/update.rb +99 -0
  229. data/lib/opensearch/api/actions/update_by_query.rb +137 -0
  230. data/lib/opensearch/api/actions/update_by_query_rethrottle.rb +62 -0
  231. data/{spec/integration/security_enabled/validation_integration_spec.rb → lib/opensearch/api/namespace/cat.rb} +19 -12
  232. data/lib/opensearch/api/namespace/cluster.rb +47 -0
  233. data/lib/opensearch/api/namespace/common.rb +72 -0
  234. data/lib/opensearch/api/namespace/dangling_indices.rb +47 -0
  235. data/lib/opensearch/api/namespace/features.rb +47 -0
  236. data/lib/opensearch/api/namespace/indices.rb +47 -0
  237. data/lib/opensearch/api/namespace/ingest.rb +47 -0
  238. data/lib/opensearch/api/namespace/nodes.rb +47 -0
  239. data/lib/opensearch/api/namespace/remote.rb +47 -0
  240. data/lib/opensearch/api/namespace/remote_store.rb +30 -0
  241. data/lib/opensearch/api/namespace/security.rb +30 -0
  242. data/lib/opensearch/api/namespace/shutdown.rb +47 -0
  243. data/lib/opensearch/api/namespace/snapshot.rb +47 -0
  244. data/lib/opensearch/api/namespace/tasks.rb +47 -0
  245. data/lib/opensearch/api/utils.rb +296 -0
  246. data/lib/opensearch/api.rb +103 -0
  247. data/lib/opensearch/dsl/search/aggregation.rb +112 -0
  248. data/lib/opensearch/dsl/search/aggregations/avg.rb +49 -0
  249. data/lib/opensearch/dsl/search/aggregations/cardinality.rb +56 -0
  250. data/lib/opensearch/dsl/search/aggregations/children.rb +63 -0
  251. data/lib/opensearch/dsl/search/aggregations/composite.rb +68 -0
  252. data/lib/opensearch/dsl/search/aggregations/date_histogram.rb +64 -0
  253. data/lib/opensearch/dsl/search/aggregations/date_range.rb +59 -0
  254. data/lib/opensearch/dsl/search/aggregations/extended_stats.rb +48 -0
  255. data/lib/opensearch/dsl/search/aggregations/filter.rb +54 -0
  256. data/lib/opensearch/dsl/search/aggregations/filters.rb +59 -0
  257. data/lib/opensearch/dsl/search/aggregations/geo_bounds.rb +68 -0
  258. data/lib/opensearch/dsl/search/aggregations/geo_distance.rb +63 -0
  259. data/lib/opensearch/dsl/search/aggregations/geohash_grid.rb +59 -0
  260. data/lib/opensearch/dsl/search/aggregations/global.rb +52 -0
  261. data/{spec/integration/security_disabled/client_integration_spec.rb → lib/opensearch/dsl/search/aggregations/histogram.rb} +29 -29
  262. data/lib/opensearch/dsl/search/aggregations/ip_range.rb +55 -0
  263. data/lib/opensearch/dsl/search/aggregations/max.rb +49 -0
  264. data/lib/opensearch/dsl/search/aggregations/min.rb +49 -0
  265. data/lib/opensearch/dsl/search/aggregations/missing.rb +59 -0
  266. data/lib/opensearch/dsl/search/aggregations/nested.rb +57 -0
  267. data/lib/opensearch/dsl/search/aggregations/percentile_ranks.rb +58 -0
  268. data/lib/opensearch/dsl/search/aggregations/percentiles.rb +57 -0
  269. data/lib/opensearch/dsl/search/aggregations/pipeline/avg_bucket.rb +58 -0
  270. data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_script.rb +60 -0
  271. data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_selector.rb +59 -0
  272. data/lib/opensearch/dsl/search/aggregations/pipeline/bucket_sort.rb +111 -0
  273. data/lib/opensearch/dsl/search/aggregations/pipeline/cumulative_sum.rb +57 -0
  274. data/lib/opensearch/dsl/search/aggregations/pipeline/derivative.rb +58 -0
  275. data/lib/opensearch/dsl/search/aggregations/pipeline/extended_stats_bucket.rb +58 -0
  276. data/lib/opensearch/dsl/search/aggregations/pipeline/max_bucket.rb +58 -0
  277. data/lib/opensearch/dsl/search/aggregations/pipeline/min_bucket.rb +58 -0
  278. data/lib/opensearch/dsl/search/aggregations/pipeline/moving_avg.rb +66 -0
  279. data/lib/opensearch/dsl/search/aggregations/pipeline/percentiles_bucket.rb +60 -0
  280. data/lib/opensearch/dsl/search/aggregations/pipeline/serial_diff.rb +60 -0
  281. data/lib/opensearch/dsl/search/aggregations/pipeline/stats_bucket.rb +58 -0
  282. data/lib/opensearch/dsl/search/aggregations/pipeline/sum_bucket.rb +58 -0
  283. data/lib/opensearch/dsl/search/aggregations/range.rb +77 -0
  284. data/lib/opensearch/dsl/search/aggregations/reverse_nested.rb +61 -0
  285. data/lib/opensearch/dsl/search/aggregations/scripted_metric.rb +63 -0
  286. data/lib/opensearch/dsl/search/aggregations/significant_terms.rb +69 -0
  287. data/lib/opensearch/dsl/search/aggregations/stats.rb +61 -0
  288. data/lib/opensearch/dsl/search/aggregations/sum.rb +49 -0
  289. data/lib/opensearch/dsl/search/aggregations/terms.rb +66 -0
  290. data/lib/opensearch/dsl/search/aggregations/top_hits.rb +59 -0
  291. data/lib/opensearch/dsl/search/aggregations/value_count.rb +49 -0
  292. data/lib/opensearch/dsl/search/base_aggregation_component.rb +83 -0
  293. data/lib/opensearch/dsl/search/base_component.rb +191 -0
  294. data/lib/opensearch/dsl/search/base_compound_filter_component.rb +124 -0
  295. data/lib/opensearch/dsl/search/filter.rb +82 -0
  296. data/lib/opensearch/dsl/search/filters/and.rb +70 -0
  297. data/lib/opensearch/dsl/search/filters/bool.rb +103 -0
  298. data/lib/opensearch/dsl/search/filters/exists.rb +56 -0
  299. data/lib/opensearch/dsl/search/filters/geo_bounding_box.rb +69 -0
  300. data/lib/opensearch/dsl/search/filters/geo_distance.rb +81 -0
  301. data/lib/opensearch/dsl/search/filters/geo_distance_range.rb +56 -0
  302. data/lib/opensearch/dsl/search/filters/geo_polygon.rb +65 -0
  303. data/lib/opensearch/dsl/search/filters/geo_shape.rb +59 -0
  304. data/lib/opensearch/dsl/search/filters/geohash_cell.rb +71 -0
  305. data/lib/opensearch/dsl/search/filters/has_child.rb +98 -0
  306. data/lib/opensearch/dsl/search/filters/has_parent.rb +97 -0
  307. data/lib/opensearch/dsl/search/filters/ids.rb +56 -0
  308. data/lib/opensearch/dsl/search/filters/indices.rb +101 -0
  309. data/lib/opensearch/dsl/search/filters/limit.rb +55 -0
  310. data/lib/opensearch/dsl/search/filters/match_all.rb +52 -0
  311. data/lib/opensearch/dsl/search/filters/missing.rb +58 -0
  312. data/lib/opensearch/dsl/search/filters/nested.rb +91 -0
  313. data/lib/opensearch/dsl/search/filters/not.rb +98 -0
  314. data/lib/opensearch/dsl/search/filters/or.rb +70 -0
  315. data/lib/opensearch/dsl/search/filters/prefix.rb +53 -0
  316. data/lib/opensearch/dsl/search/filters/query.rb +77 -0
  317. data/lib/opensearch/dsl/search/filters/range.rb +63 -0
  318. data/lib/opensearch/dsl/search/filters/regexp.rb +58 -0
  319. data/lib/opensearch/dsl/search/filters/script.rb +56 -0
  320. data/lib/opensearch/dsl/search/filters/term.rb +55 -0
  321. data/lib/opensearch/dsl/search/filters/terms.rb +56 -0
  322. data/lib/opensearch/dsl/search/filters/type.rb +58 -0
  323. data/lib/opensearch/dsl/search/highlight.rb +117 -0
  324. data/lib/opensearch/dsl/search/options.rb +80 -0
  325. data/lib/opensearch/dsl/search/queries/bool.rb +110 -0
  326. data/lib/opensearch/dsl/search/queries/boosting.rb +57 -0
  327. data/lib/opensearch/dsl/search/queries/common.rb +62 -0
  328. data/lib/opensearch/dsl/search/queries/constant_score.rb +90 -0
  329. data/lib/opensearch/dsl/search/queries/dis_max.rb +59 -0
  330. data/lib/opensearch/dsl/search/queries/exists.rb +68 -0
  331. data/lib/opensearch/dsl/search/queries/filtered.rb +101 -0
  332. data/lib/opensearch/dsl/search/queries/function_score.rb +122 -0
  333. data/lib/opensearch/dsl/search/queries/fuzzy.rb +69 -0
  334. data/lib/opensearch/dsl/search/queries/fuzzy_like_this.rb +61 -0
  335. data/lib/opensearch/dsl/search/queries/fuzzy_like_this_field.rb +60 -0
  336. data/lib/opensearch/dsl/search/queries/geo_shape.rb +54 -0
  337. data/lib/opensearch/dsl/search/queries/has_child.rb +82 -0
  338. data/lib/opensearch/dsl/search/queries/has_parent.rb +82 -0
  339. data/lib/opensearch/dsl/search/queries/ids.rb +52 -0
  340. data/lib/opensearch/dsl/search/queries/indices.rb +58 -0
  341. data/lib/opensearch/dsl/search/queries/match.rb +67 -0
  342. data/lib/opensearch/dsl/search/queries/match_all.rb +50 -0
  343. data/lib/opensearch/dsl/search/queries/match_phrase.rb +56 -0
  344. data/lib/opensearch/dsl/search/queries/match_phrase_prefix.rb +55 -0
  345. data/lib/opensearch/dsl/search/queries/more_like_this.rb +88 -0
  346. data/lib/opensearch/dsl/search/queries/multi_match.rb +69 -0
  347. data/lib/opensearch/dsl/search/queries/nested.rb +80 -0
  348. data/lib/opensearch/dsl/search/queries/prefix.rb +54 -0
  349. data/lib/opensearch/dsl/search/queries/query_string.rb +75 -0
  350. data/lib/opensearch/dsl/search/queries/range.rb +71 -0
  351. data/lib/opensearch/dsl/search/queries/regexp.rb +55 -0
  352. data/lib/opensearch/dsl/search/queries/simple_query_string.rb +64 -0
  353. data/lib/opensearch/dsl/search/queries/span_first.rb +52 -0
  354. data/lib/opensearch/dsl/search/queries/span_multi.rb +52 -0
  355. data/lib/opensearch/dsl/search/queries/span_near.rb +56 -0
  356. data/lib/opensearch/dsl/search/queries/span_not.rb +57 -0
  357. data/lib/opensearch/dsl/search/queries/span_or.rb +52 -0
  358. data/lib/opensearch/dsl/search/queries/span_term.rb +50 -0
  359. data/lib/opensearch/dsl/search/queries/template.rb +55 -0
  360. data/lib/opensearch/dsl/search/queries/term.rb +50 -0
  361. data/lib/opensearch/dsl/search/queries/terms.rb +51 -0
  362. data/lib/opensearch/dsl/search/queries/top_children.rb +82 -0
  363. data/lib/opensearch/dsl/search/queries/wildcard.rb +54 -0
  364. data/lib/opensearch/dsl/search/query.rb +82 -0
  365. data/lib/opensearch/dsl/search/sort.rb +83 -0
  366. data/lib/opensearch/dsl/search/suggest.rb +52 -0
  367. data/lib/opensearch/dsl/search.rb +282 -0
  368. data/lib/opensearch/dsl/utils.rb +49 -0
  369. data/lib/opensearch/dsl.rb +69 -0
  370. data/lib/opensearch/transport/client.rb +362 -0
  371. data/lib/opensearch/transport/redacted.rb +82 -0
  372. data/lib/opensearch/transport/transport/base.rb +453 -0
  373. data/lib/opensearch/transport/transport/connections/collection.rb +134 -0
  374. data/lib/opensearch/transport/transport/connections/connection.rb +168 -0
  375. data/lib/opensearch/transport/transport/connections/selector.rb +100 -0
  376. data/lib/opensearch/transport/transport/errors.rb +97 -0
  377. data/lib/opensearch/transport/transport/http/curb.rb +139 -0
  378. data/lib/opensearch/transport/transport/http/faraday.rb +101 -0
  379. data/lib/opensearch/transport/transport/http/manticore.rb +188 -0
  380. data/lib/opensearch/transport/transport/loggable.rb +92 -0
  381. data/lib/opensearch/transport/transport/response.rb +47 -0
  382. data/lib/opensearch/transport/transport/serializer/multi_json.rb +61 -0
  383. data/lib/opensearch/transport/transport/sniffer.rb +110 -0
  384. data/lib/opensearch/transport.rb +44 -0
  385. data/lib/opensearch/version.rb +1 -1
  386. data/lib/opensearch-dsl.rb +27 -0
  387. data/lib/opensearch.rb +12 -13
  388. data/opensearch-ruby.gemspec +28 -40
  389. data/spec/spec_helper.rb +95 -4
  390. data/test/dsl/integration/search_aggregation_children_test.rb +91 -0
  391. data/test/dsl/integration/search_aggregation_geo_test.rb +112 -0
  392. data/test/dsl/integration/search_aggregation_nested_test.rb +129 -0
  393. data/test/dsl/integration/search_aggregations_test.rb +288 -0
  394. data/test/dsl/integration/search_filters_test.rb +290 -0
  395. data/test/dsl/integration/search_options_test.rb +54 -0
  396. data/test/dsl/integration/search_query_test.rb +98 -0
  397. data/test/dsl/integration/search_size_from_test.rb +71 -0
  398. data/test/dsl/integration/search_sort_test.rb +57 -0
  399. data/test/dsl/integration/search_suggest_test.rb +107 -0
  400. data/test/dsl/integration/search_test.rb +81 -0
  401. data/test/dsl/test_helper.rb +95 -0
  402. data/test/dsl/unit/dsl_test.rb +44 -0
  403. data/test/dsl/unit/search_aggregation_test.rb +96 -0
  404. data/test/dsl/unit/search_base_aggregation_component_test.rb +66 -0
  405. data/test/dsl/unit/search_base_component_test.rb +210 -0
  406. data/test/dsl/unit/search_filter_test.rb +84 -0
  407. data/test/dsl/unit/search_highlight_test.rb +103 -0
  408. data/test/dsl/unit/search_options_test.rb +114 -0
  409. data/test/dsl/unit/search_query_test.rb +88 -0
  410. data/test/dsl/unit/search_size_from_test.rb +68 -0
  411. data/test/dsl/unit/search_sort_test.rb +91 -0
  412. data/test/dsl/unit/search_suggest_test.rb +46 -0
  413. data/test/dsl/unit/search_test.rb +268 -0
  414. data/test/dsl/unit/utils_test.rb +47 -0
  415. data/test/transport/integration/transport_test.rb +117 -0
  416. data/test/transport/profile/client_benchmark_test.rb +141 -0
  417. data/test/transport/test_helper.rb +97 -0
  418. data/test/transport/unit/connection_test.rb +145 -0
  419. data/test/transport/unit/response_test.rb +41 -0
  420. data/test/transport/unit/serializer_test.rb +42 -0
  421. data/test/transport/unit/transport_base_test.rb +673 -0
  422. data/test/transport/unit/transport_curb_test.rb +143 -0
  423. data/test/transport/unit/transport_faraday_test.rb +237 -0
  424. data/test/transport/unit/transport_manticore_test.rb +191 -0
  425. data.tar.gz.sig +0 -0
  426. metadata +489 -189
  427. metadata.gz.sig +0 -0
  428. data/.gitignore +0 -21
  429. data/Rakefile +0 -69
  430. data/spec/integration/security_enabled/client_integration_spec.rb +0 -43
  431. data/spec/unit/opensearch_product_validation_spec.rb +0 -198
  432. /data/{LICENSE → LICENSE.txt} +0 -0
@@ -0,0 +1,168 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ module OpenSearch
28
+ module Transport
29
+ module Transport
30
+ module Connections
31
+ # Wraps the connection information and logic.
32
+ #
33
+ # The Connection instance wraps the host information (hostname, port, attributes, etc),
34
+ # as well as the "session" (a transport client object, such as a {HTTP::Faraday} instance).
35
+ #
36
+ # It provides methods to construct and properly encode the URLs and paths for passing them
37
+ # to the transport client object.
38
+ #
39
+ # It provides methods to handle connection livecycle (dead, alive, healthy).
40
+ #
41
+ class Connection
42
+ DEFAULT_RESURRECT_TIMEOUT = 60
43
+
44
+ attr_reader :host, :connection, :options, :failures, :dead_since
45
+
46
+ # @option arguments [Hash] :host Host information (example: `{host: 'localhost', port: 9200}`)
47
+ # @option arguments [Object] :connection The transport-specific physical connection or "session"
48
+ # @option arguments [Hash] :options Options (usually passed in from transport)
49
+ #
50
+ def initialize(arguments = {})
51
+ @host = arguments[:host].is_a?(Hash) ? Redacted.new(arguments[:host]) : arguments[:host]
52
+ @connection = arguments[:connection]
53
+ @options = arguments[:options] || {}
54
+ @state_mutex = Mutex.new
55
+
56
+ @options[:resurrect_timeout] ||= DEFAULT_RESURRECT_TIMEOUT
57
+ @dead = false
58
+ @failures = 0
59
+ end
60
+
61
+ # Returns the complete endpoint URL with host, port, path and serialized parameters.
62
+ #
63
+ # @return [String]
64
+ #
65
+ def full_url(path, params = {})
66
+ url = "#{host[:protocol]}://"
67
+ url += "#{CGI.escape(host[:user])}:#{CGI.escape(host[:password])}@" if host[:user]
68
+ url += "#{host[:host]}:#{host[:port]}"
69
+ url += host[:path].to_s if host[:path]
70
+ full_path = full_path(path, params)
71
+ url += '/' unless full_path.match?(%r{^/})
72
+ url += full_path
73
+ end
74
+
75
+ # Returns the complete endpoint path with serialized parameters.
76
+ #
77
+ # @return [String]
78
+ #
79
+ def full_path(path, params = {})
80
+ path + (params.empty? ? '' : "?#{::Faraday::Utils::ParamsHash[params].to_query}")
81
+ end
82
+
83
+ # Returns true when this connection has been marked dead, false otherwise.
84
+ #
85
+ # @return [Boolean]
86
+ #
87
+ def dead?
88
+ @dead || false
89
+ end
90
+
91
+ # Marks this connection as dead, incrementing the `failures` counter and
92
+ # storing the current time as `dead_since`.
93
+ #
94
+ # @return [self]
95
+ #
96
+ def dead!
97
+ @state_mutex.synchronize do
98
+ @dead = true
99
+ @failures += 1
100
+ @dead_since = Time.now
101
+ end
102
+ self
103
+ end
104
+
105
+ # Marks this connection as alive, ie. it is eligible to be returned from the pool by the selector.
106
+ #
107
+ # @return [self]
108
+ #
109
+ def alive!
110
+ @state_mutex.synchronize do
111
+ @dead = false
112
+ end
113
+ self
114
+ end
115
+
116
+ # Marks this connection as healthy, ie. a request has been successfully performed with it.
117
+ #
118
+ # @return [self]
119
+ #
120
+ def healthy!
121
+ @state_mutex.synchronize do
122
+ @dead = false
123
+ @failures = 0
124
+ end
125
+ self
126
+ end
127
+
128
+ # Marks this connection as alive, if the required timeout has passed.
129
+ #
130
+ # @return [self,nil]
131
+ # @see DEFAULT_RESURRECT_TIMEOUT
132
+ # @see #resurrectable?
133
+ #
134
+ def resurrect!
135
+ alive! if resurrectable?
136
+ end
137
+
138
+ # Returns true if the connection is eligible to be resurrected as alive, false otherwise.
139
+ #
140
+ # @return [Boolean]
141
+ #
142
+ def resurrectable?
143
+ @state_mutex.synchronize do
144
+ Time.now > @dead_since + (@options[:resurrect_timeout] * (2**(@failures - 1)))
145
+ end
146
+ end
147
+
148
+ # Equality operator based on connection protocol, host, port and attributes
149
+ #
150
+ # @return [Boolean]
151
+ #
152
+ def ==(other)
153
+ host[:protocol] == other.host[:protocol] && \
154
+ host[:host] == other.host[:host] && \
155
+ host[:port].to_i == other.host[:port].to_i && \
156
+ host[:attributes] == other.host[:attributes]
157
+ end
158
+
159
+ # @return [String]
160
+ #
161
+ def to_s
162
+ "<#{self.class.name} host: #{host} (#{dead? ? "dead since #{dead_since}" : 'alive'})>"
163
+ end
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
@@ -0,0 +1,100 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ module OpenSearch
28
+ module Transport
29
+ module Transport
30
+ module Connections
31
+ module Selector
32
+ # @abstract Common functionality for connection selector implementations.
33
+ #
34
+ module Base
35
+ attr_reader :connections
36
+
37
+ # @option arguments [Connections::Collection] :connections Collection with connections.
38
+ #
39
+ def initialize(arguments = {})
40
+ @connections = arguments[:connections]
41
+ end
42
+
43
+ # @abstract Selector strategies implement this method to
44
+ # select and return a connection from the pool.
45
+ #
46
+ # @return [Connection]
47
+ #
48
+ def select(_options = {})
49
+ raise NoMethodError, "Implement this method in the selector implementation."
50
+ end
51
+ end
52
+
53
+ # "Random connection" selector strategy.
54
+ #
55
+ class Random
56
+ include Base
57
+
58
+ # Returns a random connection from the collection.
59
+ #
60
+ # @return [Connections::Connection]
61
+ #
62
+ def select(_options = {})
63
+ connections.to_a.send(defined?(RUBY_VERSION) && RUBY_VERSION > '1.9' ? :sample : :choice)
64
+ end
65
+ end
66
+
67
+ # "Round-robin" selector strategy (default).
68
+ #
69
+ class RoundRobin
70
+ include Base
71
+
72
+ # @option arguments [Connections::Collection] :connections Collection with connections.
73
+ #
74
+ def initialize(arguments = {})
75
+ super
76
+ @mutex = Mutex.new
77
+ @current = nil
78
+ end
79
+
80
+ # Returns the next connection from the collection, rotating them in round-robin fashion.
81
+ #
82
+ # @return [Connections::Connection]
83
+ #
84
+ def select(_options = {})
85
+ @mutex.synchronize do
86
+ conns = connections
87
+ if @current && (@current < conns.size - 1)
88
+ @current += 1
89
+ else
90
+ @current = 0
91
+ end
92
+ conns[@current]
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,97 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ module OpenSearch
28
+ module Transport
29
+ module Transport
30
+ # Generic client error
31
+ #
32
+ class Error < StandardError; end
33
+
34
+ # Reloading connections timeout (1 sec by default)
35
+ #
36
+ class SnifferTimeoutError < Timeout::Error; end
37
+
38
+ # Elasticsearch server error (HTTP status 5xx)
39
+ #
40
+ class ServerError < Error; end
41
+
42
+ module Errors; end
43
+
44
+ HTTP_STATUSES = {
45
+ 300 => 'MultipleChoices',
46
+ 301 => 'MovedPermanently',
47
+ 302 => 'Found',
48
+ 303 => 'SeeOther',
49
+ 304 => 'NotModified',
50
+ 305 => 'UseProxy',
51
+ 307 => 'TemporaryRedirect',
52
+ 308 => 'PermanentRedirect',
53
+
54
+ 400 => 'BadRequest',
55
+ 401 => 'Unauthorized',
56
+ 402 => 'PaymentRequired',
57
+ 403 => 'Forbidden',
58
+ 404 => 'NotFound',
59
+ 405 => 'MethodNotAllowed',
60
+ 406 => 'NotAcceptable',
61
+ 407 => 'ProxyAuthenticationRequired',
62
+ 408 => 'RequestTimeout',
63
+ 409 => 'Conflict',
64
+ 410 => 'Gone',
65
+ 411 => 'LengthRequired',
66
+ 412 => 'PreconditionFailed',
67
+ 413 => 'RequestEntityTooLarge',
68
+ 414 => 'RequestURITooLong',
69
+ 415 => 'UnsupportedMediaType',
70
+ 416 => 'RequestedRangeNotSatisfiable',
71
+ 417 => 'ExpectationFailed',
72
+ 418 => 'ImATeapot',
73
+ 421 => 'TooManyConnectionsFromThisIP',
74
+ 426 => 'UpgradeRequired',
75
+ 429 => 'TooManyRequests',
76
+ 450 => 'BlockedByWindowsParentalControls',
77
+ 494 => 'RequestHeaderTooLarge',
78
+ 497 => 'HTTPToHTTPS',
79
+ 499 => 'ClientClosedRequest',
80
+
81
+ 500 => 'InternalServerError',
82
+ 501 => 'NotImplemented',
83
+ 502 => 'BadGateway',
84
+ 503 => 'ServiceUnavailable',
85
+ 504 => 'GatewayTimeout',
86
+ 505 => 'HTTPVersionNotSupported',
87
+ 506 => 'VariantAlsoNegotiates',
88
+ 510 => 'NotExtended'
89
+ }
90
+
91
+ ERRORS = HTTP_STATUSES.each_with_object({}) do |error, sum|
92
+ status, name = error
93
+ sum[status] = Errors.const_set name, Class.new(ServerError)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,139 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ module OpenSearch
28
+ module Transport
29
+ module Transport
30
+ module HTTP
31
+ # Alternative HTTP transport implementation, using the [_Curb_](https://rubygems.org/gems/curb) client.
32
+ #
33
+ # @see Transport::Base
34
+ #
35
+ class Curb
36
+ include Base
37
+
38
+ # Performs the request by invoking {Transport::Base#perform_request} with a block.
39
+ #
40
+ # @return [Response]
41
+ # @see Transport::Base#perform_request
42
+ #
43
+ def perform_request(method, path, params = {}, body = nil, headers = nil, opts = {})
44
+ super do |connection, _url|
45
+ connection.connection.url = connection.full_url(path, params)
46
+
47
+ case method
48
+ when 'HEAD'
49
+ connection.connection.set :nobody, true
50
+ when 'GET', 'POST', 'PUT', 'DELETE'
51
+ connection.connection.set :nobody, false
52
+ connection.connection.put_data = __convert_to_json(body) if body
53
+ if headers
54
+ if connection.connection.headers
55
+ connection.connection.headers.merge!(headers)
56
+ else
57
+ connection.connection.headers = headers
58
+ end
59
+ end
60
+ else
61
+ raise ArgumentError, "Unsupported HTTP method: #{method}"
62
+ end
63
+
64
+ connection.connection.http(method.to_sym)
65
+
66
+ Response.new(
67
+ connection.connection.response_code,
68
+ decompress_response(connection.connection.body_str),
69
+ headers(connection)
70
+ )
71
+ end
72
+ end
73
+
74
+ def headers(connection)
75
+ headers_string = connection.connection.header_str
76
+ return nil if headers_string.nil?
77
+
78
+ response_headers = headers_string&.split(/\\r\\n|\r\n/)&.reject(&:empty?)
79
+ response_headers.shift # Removes HTTP status string
80
+ processed_header = response_headers.flat_map { |s| s.scan(/^(\S+): (.+)/) }
81
+ headers_hash = processed_header.to_h.transform_keys(&:downcase)
82
+ if headers_hash['content-type']&.match?(%r{application/json})
83
+ headers_hash['content-type'] = 'application/json'
84
+ end
85
+ headers_hash
86
+ end
87
+
88
+ # Builds and returns a connection
89
+ #
90
+ # @return [Connections::Connection]
91
+ #
92
+ def __build_connection(host, options = {}, block = nil)
93
+ client = ::Curl::Easy.new
94
+ apply_headers(client, options)
95
+ client.url = __full_url(host)
96
+
97
+ if host[:user]
98
+ client.http_auth_types = host[:auth_type] || :basic
99
+ client.username = host[:user]
100
+ client.password = host[:password]
101
+ end
102
+
103
+ client.instance_eval(&block) if block
104
+
105
+ Connections::Connection.new host: host, connection: client
106
+ end
107
+
108
+ # Returns an array of implementation specific connection errors.
109
+ #
110
+ # @return [Array]
111
+ #
112
+ def host_unreachable_exceptions
113
+ [
114
+ ::Curl::Err::HostResolutionError,
115
+ ::Curl::Err::ConnectionFailedError,
116
+ ::Curl::Err::GotNothingError,
117
+ ::Curl::Err::RecvError,
118
+ ::Curl::Err::SendError,
119
+ ::Curl::Err::TimeoutError
120
+ ]
121
+ end
122
+
123
+ private
124
+
125
+ def user_agent_header(_client)
126
+ @user_agent_header ||= begin
127
+ meta = ["RUBY_VERSION: #{RUBY_VERSION}"]
128
+ if RbConfig::CONFIG && RbConfig::CONFIG['host_os']
129
+ meta << "#{RbConfig::CONFIG['host_os'].split('_').first[/[a-z]+/i].downcase} #{RbConfig::CONFIG['target_cpu']}"
130
+ end
131
+ meta << "Curb #{Curl::CURB_VERSION}"
132
+ "opensearch-ruby/#{VERSION} (#{meta.join('; ')})"
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,101 @@
1
+ # SPDX-License-Identifier: Apache-2.0
2
+ #
3
+ # The OpenSearch Contributors require contributions made to
4
+ # this file be licensed under the Apache-2.0 license or a
5
+ # compatible open source license.
6
+ #
7
+ # Modifications Copyright OpenSearch Contributors. See
8
+ # GitHub history for details.
9
+ #
10
+ # Licensed to Elasticsearch B.V. under one or more contributor
11
+ # license agreements. See the NOTICE file distributed with
12
+ # this work for additional information regarding copyright
13
+ # ownership. Elasticsearch B.V. licenses this file to you under
14
+ # the Apache License, Version 2.0 (the "License"); you may
15
+ # not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing,
21
+ # software distributed under the License is distributed on an
22
+ # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23
+ # KIND, either express or implied. See the License for the
24
+ # specific language governing permissions and limitations
25
+ # under the License.
26
+
27
+ module OpenSearch
28
+ module Transport
29
+ module Transport
30
+ module HTTP
31
+ # The default transport implementation, using the [_Faraday_](https://rubygems.org/gems/faraday)
32
+ # library for abstracting the HTTP client.
33
+ #
34
+ # @see Transport::Base
35
+ #
36
+ class Faraday
37
+ include Base
38
+
39
+ # Performs the request by invoking {Transport::Base#perform_request} with a block.
40
+ #
41
+ # @return [Response]
42
+ # @see Transport::Base#perform_request
43
+ #
44
+ def perform_request(method, path, params = {}, body = nil, headers = nil, opts = {})
45
+ super do |connection, url|
46
+ headers = if connection.connection.headers
47
+ if headers.nil?
48
+ connection.connection.headers
49
+ else
50
+ connection.connection.headers.merge(headers)
51
+ end
52
+ else
53
+ headers
54
+ end
55
+
56
+ response = connection.connection.run_request(
57
+ method.downcase.to_sym,
58
+ url,
59
+ (body ? __convert_to_json(body) : nil),
60
+ headers
61
+ )
62
+
63
+ Response.new response.status, decompress_response(response.body), response.headers
64
+ end
65
+ end
66
+
67
+ # Builds and returns a connection
68
+ #
69
+ # @return [Connections::Connection]
70
+ #
71
+ def __build_connection(host, options = {}, block = nil)
72
+ client = ::Faraday.new(__full_url(host), options, &block)
73
+ apply_headers(client, options)
74
+ Connections::Connection.new host: host, connection: client
75
+ end
76
+
77
+ # Returns an array of implementation specific connection errors.
78
+ #
79
+ # @return [Array]
80
+ #
81
+ def host_unreachable_exceptions
82
+ [::Faraday::ConnectionFailed, ::Faraday::TimeoutError]
83
+ end
84
+
85
+ private
86
+
87
+ def user_agent_header(client)
88
+ @user_agent_header ||= begin
89
+ meta = ["RUBY_VERSION: #{RUBY_VERSION}"]
90
+ if RbConfig::CONFIG && RbConfig::CONFIG['host_os']
91
+ meta << "#{RbConfig::CONFIG['host_os'].split('_').first[/[a-z]+/i].downcase} #{RbConfig::CONFIG['target_cpu']}"
92
+ end
93
+ meta << client.headers[USER_AGENT_STR].to_s
94
+ "opensearch-ruby/#{VERSION} (#{meta.join('; ')})"
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end