azure-kusto-ruby 0.0.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 +7 -0
- data/lib/kusto/rest/context/context.rb +42 -0
- data/lib/kusto/rest/context/management_context.rb +18 -0
- data/lib/kusto/rest/context/query_context.rb +18 -0
- data/lib/kusto/rest/context.rb +4 -0
- data/lib/kusto/rest/query/data.rb +26 -0
- data/lib/kusto/rest/query/query.rb +37 -0
- data/lib/kusto/rest/query.rb +4 -0
- data/lib/kusto/rest/result/data_frame.rb +34 -0
- data/lib/kusto/rest/result/data_set.rb +61 -0
- data/lib/kusto/rest/result/data_set_completion.rb +17 -0
- data/lib/kusto/rest/result/data_set_header.rb +25 -0
- data/lib/kusto/rest/result/data_table.rb +19 -0
- data/lib/kusto/rest/result.rb +7 -0
- data/lib/kusto/rest.rb +9 -0
- data/lib/version.rb +9 -0
- metadata +59 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 825e171c28ef4a5b0f5a133cbffa427623e5e28a71519eda8d523f373ed76c58
|
4
|
+
data.tar.gz: 415378a81832dc2369b495da8302f85b1bb1b941704fe72df18020e2f56ae84c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e1fd7e66bea05a43e7ed11db5c83aed4e742cc16aa8e9cee9c4f99cd39e79e1a9203fe266ee65f9ac77c143a2738e35145b1f299805308f28f8611384c94f226
|
7
|
+
data.tar.gz: f0abd0dbf4138e2bd681738b094b2a2e869243dfc8aaf8da47ad980de05e1eca6be8d1fd6a91bbb765f58c8b7f7a39e0586c418c02c596b349579da98e5c453d
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "faraday"
|
4
|
+
require_relative "../result/data_set"
|
5
|
+
|
6
|
+
module Kusto
|
7
|
+
module Rest
|
8
|
+
class Context
|
9
|
+
attr_reader :path
|
10
|
+
|
11
|
+
class Error < StandardError; end
|
12
|
+
|
13
|
+
def initialize(url:, token:)
|
14
|
+
@url = url
|
15
|
+
@token = token
|
16
|
+
@connector = Faraday.new(url:)
|
17
|
+
end
|
18
|
+
|
19
|
+
def post(query)
|
20
|
+
response = @connector.post(@path) do |req|
|
21
|
+
req.headers["Content-Type"] = "application/json"
|
22
|
+
req.headers["Authorization"] = "Bearer #{@token}"
|
23
|
+
req.body = query.request_body.to_json
|
24
|
+
end
|
25
|
+
|
26
|
+
unless response.success?
|
27
|
+
raise Error, "Request failed with status #{response.status} - #{response.reason_phrase} #{response.body}"
|
28
|
+
end
|
29
|
+
|
30
|
+
if response.body.empty? || response.body.nil?
|
31
|
+
raise Error, "Request with status #{response.status} returned an empty response body"
|
32
|
+
end
|
33
|
+
|
34
|
+
Kusto::Rest::DataSet.new(response.body)
|
35
|
+
end
|
36
|
+
|
37
|
+
def endpoint
|
38
|
+
@connector.url_prefix.to_s + @path
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "context"
|
4
|
+
|
5
|
+
module Kusto
|
6
|
+
module Rest
|
7
|
+
class ManagementContext < Context
|
8
|
+
attr_reader :path
|
9
|
+
|
10
|
+
class Error < StandardError; end
|
11
|
+
|
12
|
+
def initialize(url:, token:)
|
13
|
+
super(url:, token:)
|
14
|
+
@path = "v1/rest/mgmt"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "context"
|
4
|
+
|
5
|
+
module Kusto
|
6
|
+
module Rest
|
7
|
+
class QueryContext < Context
|
8
|
+
attr_reader :path
|
9
|
+
|
10
|
+
class Error < StandardError; end
|
11
|
+
|
12
|
+
def initialize(url:, token:)
|
13
|
+
super(url:, token:)
|
14
|
+
@path = "v2/rest/query"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "securerandom"
|
4
|
+
require_relative "query"
|
5
|
+
|
6
|
+
module Kusto
|
7
|
+
module Rest
|
8
|
+
class DataQuery < Query
|
9
|
+
def initialize(db:, statement:, parameters: {}, options: {}, request_id: nil)
|
10
|
+
default_options = { "results_progressive_enabled": false }
|
11
|
+
@options = default_options.merge!(options)
|
12
|
+
@parameters = parameters
|
13
|
+
@db = db
|
14
|
+
super(statement:, request_id:)
|
15
|
+
end
|
16
|
+
|
17
|
+
def request_body
|
18
|
+
@request_body ||= {
|
19
|
+
db: @db,
|
20
|
+
properties:,
|
21
|
+
csl: @statement
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "securerandom"
|
4
|
+
|
5
|
+
module Kusto
|
6
|
+
module Rest
|
7
|
+
class Query
|
8
|
+
def initialize(statement:, options: {}, parameters: {}, request_id: nil)
|
9
|
+
@options = options
|
10
|
+
@parameters = parameters
|
11
|
+
@request_id = request_id || get_request_id
|
12
|
+
@statement = statement
|
13
|
+
end
|
14
|
+
|
15
|
+
def properties
|
16
|
+
@properties ||= {
|
17
|
+
"Options": @options,
|
18
|
+
"Parameters": @parameters,
|
19
|
+
"ClientRequestId": @request_id
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def request_body
|
24
|
+
@request_body ||= {
|
25
|
+
properties:,
|
26
|
+
csl: @statement
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def get_request_id
|
33
|
+
@request_id ||= "#{self.class.name}::#{SecureRandom.uuid}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "date"
|
4
|
+
|
5
|
+
module Kusto
|
6
|
+
module Rest
|
7
|
+
class DataFrame
|
8
|
+
def initialize(data)
|
9
|
+
@data = data
|
10
|
+
end
|
11
|
+
|
12
|
+
def type
|
13
|
+
@data["FrameType"]
|
14
|
+
end
|
15
|
+
|
16
|
+
def kind
|
17
|
+
@data["TableKind"]
|
18
|
+
end
|
19
|
+
|
20
|
+
def name
|
21
|
+
@data["TableName"]
|
22
|
+
end
|
23
|
+
|
24
|
+
def cast(value, type)
|
25
|
+
case type
|
26
|
+
when "datetime"
|
27
|
+
value ? DateTime.parse(value) : nil
|
28
|
+
else
|
29
|
+
value
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
require_relative "data_set_completion"
|
5
|
+
require_relative "data_set_header"
|
6
|
+
require_relative "data_table"
|
7
|
+
|
8
|
+
module Kusto
|
9
|
+
module Rest
|
10
|
+
class DataSet
|
11
|
+
attr_reader :data
|
12
|
+
|
13
|
+
def initialize(response)
|
14
|
+
@data = JSON.parse(response)
|
15
|
+
end
|
16
|
+
|
17
|
+
def rows
|
18
|
+
primary_result.rows
|
19
|
+
end
|
20
|
+
|
21
|
+
def primary_result
|
22
|
+
@primary_result ||= frames.find_all do |frame|
|
23
|
+
frame.type == "DataTable" &&
|
24
|
+
frame.kind == "PrimaryResult" &&
|
25
|
+
frame.name == "PrimaryResult"
|
26
|
+
end.first
|
27
|
+
end
|
28
|
+
|
29
|
+
def header
|
30
|
+
@header ||= frames.find_all { |frame| frame.type == "DataSetHeader" }.first
|
31
|
+
end
|
32
|
+
|
33
|
+
def completion
|
34
|
+
@completion ||= frames.find_all do |frame|
|
35
|
+
frame.type == "DataSetCompletion"
|
36
|
+
end.first
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.parse_frame(frame)
|
40
|
+
case frame["FrameType"]
|
41
|
+
when "DataSetHeader"
|
42
|
+
Kusto::Rest::DataSetHeader.new(frame)
|
43
|
+
when "DataTable"
|
44
|
+
Kusto::Rest::DataTable.new(frame)
|
45
|
+
when "DataSetCompletion"
|
46
|
+
Kusto::Rest::DataSetCompletion.new(frame)
|
47
|
+
else
|
48
|
+
Kusto::Result::DataFrame.new(frame)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def frames
|
55
|
+
@frames ||= @data.map do |frame|
|
56
|
+
self.class.parse_frame(frame)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "data_frame"
|
4
|
+
|
5
|
+
module Kusto
|
6
|
+
module Rest
|
7
|
+
class DataSetHeader < DataFrame
|
8
|
+
def progressive?
|
9
|
+
@data["IsProgressive"]
|
10
|
+
end
|
11
|
+
|
12
|
+
def fragmented?
|
13
|
+
@data["IsFragmented"]
|
14
|
+
end
|
15
|
+
|
16
|
+
def version
|
17
|
+
@data["Version"]
|
18
|
+
end
|
19
|
+
|
20
|
+
def error_reporting_placement
|
21
|
+
@data["ErrorReportingPlacement"]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "data_frame"
|
4
|
+
|
5
|
+
module Kusto
|
6
|
+
module Rest
|
7
|
+
class DataTable < DataFrame
|
8
|
+
def rows
|
9
|
+
columns = @data["Columns"]
|
10
|
+
row_data = @data["Rows"]
|
11
|
+
row_data.map do |row|
|
12
|
+
columns.each_with_index.to_h do |column, index|
|
13
|
+
[column["ColumnName"], cast(row[index], column["ColumnType"])]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/kusto/rest.rb
ADDED
data/lib/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: azure-kusto-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Carlton Brown
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-05-17 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email:
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files: []
|
18
|
+
files:
|
19
|
+
- lib/kusto/rest.rb
|
20
|
+
- lib/kusto/rest/context.rb
|
21
|
+
- lib/kusto/rest/context/context.rb
|
22
|
+
- lib/kusto/rest/context/management_context.rb
|
23
|
+
- lib/kusto/rest/context/query_context.rb
|
24
|
+
- lib/kusto/rest/query.rb
|
25
|
+
- lib/kusto/rest/query/data.rb
|
26
|
+
- lib/kusto/rest/query/query.rb
|
27
|
+
- lib/kusto/rest/result.rb
|
28
|
+
- lib/kusto/rest/result/data_frame.rb
|
29
|
+
- lib/kusto/rest/result/data_set.rb
|
30
|
+
- lib/kusto/rest/result/data_set_completion.rb
|
31
|
+
- lib/kusto/rest/result/data_set_header.rb
|
32
|
+
- lib/kusto/rest/result/data_table.rb
|
33
|
+
- lib/version.rb
|
34
|
+
homepage: https://github.com/carltonbrown/azure-kusto-ruby
|
35
|
+
licenses:
|
36
|
+
- MIT
|
37
|
+
metadata:
|
38
|
+
github_repo: https://github.com/carltonbrown/azure-kusto-ruby
|
39
|
+
rubygems_mfa_required: 'true'
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 3.1.0
|
49
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
requirements: []
|
55
|
+
rubygems_version: 3.5.3
|
56
|
+
signing_key:
|
57
|
+
specification_version: 4
|
58
|
+
summary: A client for the Kusto REST API
|
59
|
+
test_files: []
|