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