class InfluxDB::Query::Batch
Batch
collects multiple queries and executes them together.
You shouldn't use Batch
directly, instead call Client.batch, which constructs a new batch for you.
Attributes
client[R]
statements[R]
Public Class Methods
new(client) { |self| ... }
click to toggle source
# File lib/influxdb/query/batch.rb, line 10 def initialize(client) @client = client @statements = [] yield self if block_given? end
Public Instance Methods
add(query, params: nil)
click to toggle source
# File lib/influxdb/query/batch.rb, line 17 def add(query, params: nil) statements << client.builder.build(query.chomp(";"), params) statements.size - 1 end
execute( denormalize: config.denormalize, chunk_size: config.chunk_size, **opts, &block )
click to toggle source
# File lib/influxdb/query/batch.rb, line 22 def execute( denormalize: config.denormalize, chunk_size: config.chunk_size, **opts, &block ) return [] if statements.empty? url = full_url "/query".freeze, **query_params(statements.join(";"), **opts) series = fetch_series get(url, parse: true, json_streaming: !chunk_size.nil?) if denormalize build_denormalized_result(series, &block) else build_result(series, &block) end end
Private Instance Methods
build_denormalized_result(series) { |id, s, s, denormalize_series(s)| ... }
click to toggle source
# File lib/influxdb/query/batch.rb, line 55 def build_denormalized_result(series) return series.map { |_, s| denormalized_series_list(s) } unless block_given? series.each do |id, statement_results| statement_results.each do |s| yield id, s["name".freeze], s["tags".freeze], denormalize_series(s) end # indicate empty result: yield useful amount of "nothing" yield id, nil, {}, [] if statement_results.empty? end end
build_result(series) { |id, s, s, raw_values(s)| ... }
click to toggle source
# File lib/influxdb/query/batch.rb, line 42 def build_result(series) return series.values unless block_given? series.each do |id, statement_results| statement_results.each do |s| yield id, s["name".freeze], s["tags".freeze], raw_values(s) end # indicate empty result: yield useful amount of "nothing" yield id, nil, {}, [] if statement_results.empty? end end
fetch_series(response)
click to toggle source
# File lib/influxdb/query/batch.rb, line 68 def fetch_series(response) response.fetch("results".freeze).each_with_object({}) do |result, list| sid = result["statement_id".freeze] list[sid] = result.fetch("series".freeze, []) end end