blazer 2.4.7 → 2.4.8

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of blazer might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 001d5a72253bcf62b525854064c1242e7569cc139b8263f54fade4536772de0a
4
- data.tar.gz: 9bf14d133dec31e413fa37390cadcd24bf9e0ae965dee208fc7fe7acca0f9111
3
+ metadata.gz: af432d074376958f2b9f7efdeaae05a0f0c0a1fe34cc38ce537a0511985edfd1
4
+ data.tar.gz: dd0fab9ec30db7b870ae6a8afd352093cccf3be75d2c1a0e320ba7106df11f00
5
5
  SHA512:
6
- metadata.gz: d0406c619b9f6ab242d7dd8d6dcca2341876ee9b5326638a57c590a5a95ecffccc9082b6323dca929487c8d55d5961b93e53788d323866c3d97d06aa846de21a
7
- data.tar.gz: 8841aaf8abbedd623b355fac0dd455a1c437abf297748ca847df15c895ba8ff59bda8c536e48da0c1e3fd882e10dbe449f6ba9c7916f0ac3caa882d822339b00
6
+ metadata.gz: 7a78f82ce3d5544598ad363c4d31f2c676bf4be76844d81b0b02bc778072f8557c1da458cd1040fb1c9464b61fd677c4fbece3e310068acb6c09f769bf032aa7
7
+ data.tar.gz: ca0eb25f4e9a5826116d4f2a76d5fe55f71772633b557accea0aa85678e3ff4895623e0832a85de4894f18c3620180d2b04e5f9f03db51730684198e8f914a8f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 2.4.8 (2021-12-07)
2
+
3
+ - Added support for OpenSearch
4
+ - Removed `elasticsearch-xpack` dependency for Elasticsearch
5
+
1
6
  ## 2.4.7 (2021-09-25)
2
7
 
3
8
  - Made Action Mailer optional
data/README.md CHANGED
@@ -592,6 +592,7 @@ data_sources:
592
592
  - [MongoDB](#mongodb-1)
593
593
  - [MySQL](#mysql-1)
594
594
  - [Neo4j](#neo4j)
595
+ - [OpenSearch](#opensearch)
595
596
  - [Oracle](#oracle)
596
597
  - [PostgreSQL](#postgresql-1)
597
598
  - [Presto](#presto)
@@ -743,7 +744,7 @@ data_sources:
743
744
 
744
745
  ### Elasticsearch
745
746
 
746
- Add [elasticsearch](https://github.com/elastic/elasticsearch-ruby) and [elasticsearch-xpack](https://github.com/elastic/elasticsearch-ruby/tree/master/elasticsearch-xpack) to your Gemfile and set:
747
+ Add [elasticsearch](https://github.com/elastic/elasticsearch-ruby) to your Gemfile and set:
747
748
 
748
749
  ```yml
749
750
  data_sources:
@@ -820,6 +821,17 @@ data_sources:
820
821
  url: http://user:password@hostname:7474
821
822
  ```
822
823
 
824
+ ### OpenSearch
825
+
826
+ Add [opensearch-ruby](https://github.com/opensearch-project/opensearch-ruby) to your Gemfile and set:
827
+
828
+ ```yml
829
+ data_sources:
830
+ my_source:
831
+ adapter: opensearch
832
+ url: http://user:password@hostname:9200
833
+ ```
834
+
823
835
  ### Oracle
824
836
 
825
837
  Add [activerecord-oracle_enhanced-adapter](https://github.com/rsim/oracle-enhanced) and [ruby-oci8](https://github.com/kubo/ruby-oci8) to your Gemfile and set:
@@ -7,15 +7,15 @@ module Blazer
7
7
  error = nil
8
8
 
9
9
  begin
10
- response = client.xpack.sql.query(body: {query: "#{statement} /*#{comment}*/"})
10
+ response = client.transport.perform_request("POST", endpoint, {}, {query: "#{statement} /*#{comment}*/"}).body
11
11
  columns = response["columns"].map { |v| v["name"] }
12
12
  # Elasticsearch does not differentiate between dates and times
13
- date_indexes = response["columns"].each_index.select { |i| response["columns"][i]["type"] == "date" }
13
+ date_indexes = response["columns"].each_index.select { |i| ["date", "datetime"].include?(response["columns"][i]["type"]) }
14
14
  if columns.any?
15
15
  rows = response["rows"]
16
16
  date_indexes.each do |i|
17
17
  rows.each do |row|
18
- row[i] = Time.parse(row[i])
18
+ row[i] &&= Time.parse(row[i])
19
19
  end
20
20
  end
21
21
  end
@@ -38,6 +38,10 @@ module Blazer
38
38
 
39
39
  protected
40
40
 
41
+ def endpoint
42
+ @endpoint ||= client.info["version"]["number"].to_i >= 7 ? "_sql" : "_xpack/sql"
43
+ end
44
+
41
45
  def client
42
46
  @client ||= Elasticsearch::Client.new(url: settings["url"])
43
47
  end
@@ -0,0 +1,48 @@
1
+ module Blazer
2
+ module Adapters
3
+ class OpensearchAdapter < BaseAdapter
4
+ def run_statement(statement, comment)
5
+ columns = []
6
+ rows = []
7
+ error = nil
8
+
9
+ begin
10
+ response = client.transport.perform_request("POST", "_plugins/_sql", {}, {query: "#{statement} /*#{comment}*/"}).body
11
+ columns = response["schema"].map { |v| v["name"] }
12
+ # TODO typecast more types
13
+ # https://github.com/opensearch-project/sql/blob/main/docs/user/general/datatypes.rst
14
+ date_indexes = response["schema"].each_index.select { |i| response["schema"][i]["type"] == "timestamp" }
15
+ if columns.any?
16
+ rows = response["datarows"]
17
+ utc = ActiveSupport::TimeZone["Etc/UTC"]
18
+ date_indexes.each do |i|
19
+ rows.each do |row|
20
+ row[i] &&= utc.parse(row[i])
21
+ end
22
+ end
23
+ end
24
+ rescue => e
25
+ error = e.message
26
+ end
27
+
28
+ [columns, rows, error]
29
+ end
30
+
31
+ def tables
32
+ indices = client.cat.indices(format: "json").map { |v| v["index"] }
33
+ aliases = client.cat.aliases(format: "json").map { |v| v["alias"] }
34
+ (indices + aliases).uniq.sort
35
+ end
36
+
37
+ def preview_statement
38
+ "SELECT * FROM `{table}` LIMIT 10"
39
+ end
40
+
41
+ protected
42
+
43
+ def client
44
+ @client ||= OpenSearch::Client.new(url: settings["url"])
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module Blazer
2
- VERSION = "2.4.7"
2
+ VERSION = "2.4.8"
3
3
  end
data/lib/blazer.rb CHANGED
@@ -23,6 +23,7 @@ require "blazer/adapters/ignite_adapter"
23
23
  require "blazer/adapters/influxdb_adapter"
24
24
  require "blazer/adapters/mongodb_adapter"
25
25
  require "blazer/adapters/neo4j_adapter"
26
+ require "blazer/adapters/opensearch_adapter"
26
27
  require "blazer/adapters/presto_adapter"
27
28
  require "blazer/adapters/salesforce_adapter"
28
29
  require "blazer/adapters/soda_adapter"
@@ -250,9 +251,10 @@ Blazer.register_adapter "elasticsearch", Blazer::Adapters::ElasticsearchAdapter
250
251
  Blazer.register_adapter "hive", Blazer::Adapters::HiveAdapter
251
252
  Blazer.register_adapter "ignite", Blazer::Adapters::IgniteAdapter
252
253
  Blazer.register_adapter "influxdb", Blazer::Adapters::InfluxdbAdapter
254
+ Blazer.register_adapter "mongodb", Blazer::Adapters::MongodbAdapter
253
255
  Blazer.register_adapter "neo4j", Blazer::Adapters::Neo4jAdapter
256
+ Blazer.register_adapter "opensearch", Blazer::Adapters::OpensearchAdapter
254
257
  Blazer.register_adapter "presto", Blazer::Adapters::PrestoAdapter
255
- Blazer.register_adapter "mongodb", Blazer::Adapters::MongodbAdapter
256
258
  Blazer.register_adapter "salesforce", Blazer::Adapters::SalesforceAdapter
257
259
  Blazer.register_adapter "soda", Blazer::Adapters::SodaAdapter
258
260
  Blazer.register_adapter "spark", Blazer::Adapters::SparkAdapter
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blazer
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.7
4
+ version: 2.4.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-25 00:00:00.000000000 Z
11
+ date: 2021-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -169,6 +169,7 @@ files:
169
169
  - lib/blazer/adapters/influxdb_adapter.rb
170
170
  - lib/blazer/adapters/mongodb_adapter.rb
171
171
  - lib/blazer/adapters/neo4j_adapter.rb
172
+ - lib/blazer/adapters/opensearch_adapter.rb
172
173
  - lib/blazer/adapters/presto_adapter.rb
173
174
  - lib/blazer/adapters/salesforce_adapter.rb
174
175
  - lib/blazer/adapters/snowflake_adapter.rb
@@ -225,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
226
  - !ruby/object:Gem::Version
226
227
  version: '0'
227
228
  requirements: []
228
- rubygems_version: 3.2.22
229
+ rubygems_version: 3.2.32
229
230
  signing_key:
230
231
  specification_version: 4
231
232
  summary: Explore your data with SQL. Easily create charts and dashboards, and share