class Blocktrain::Query

Public Class Methods

new(options = {}) click to toggle source
# File lib/blocktrain/query.rb, line 4
def initialize(options = {})
  @memory_addresses = [options.fetch(:memory_addresses, nil)].flatten.compact
  @signals = [options[:signals]].flatten.compact

  @from = parse_datetime(options.fetch(:from, '2015-09-01T00:00:00'))
  @to = parse_datetime(options.fetch(:to, '2015-09-02T00:00:00'))

  @limit = options.fetch(:limit, 100)
end

Public Instance Methods

address_query() click to toggle source
# File lib/blocktrain/query.rb, line 27
def address_query
  # Look up memory addresses directly if specified
  unless @memory_addresses == []
    build_query(@memory_addresses)
  else
    # No query if there isn't a signal specified
    return nil if @signals == []
    lookups = Lookups.instance.lookups
    @signals = @signals.map { |s| lookups[s] }
    build_query(@signals)
  end
end
body() click to toggle source
# File lib/blocktrain/query.rb, line 81
def body
  {
    query: query,
    size: @limit
  }
end
build_query(addresses) click to toggle source
# File lib/blocktrain/query.rb, line 40
def build_query(addresses)
  addresses.map! { |a| "memoryAddress:#{a}" }
  addresses.join(" OR ")
end
filtered_filter() click to toggle source
# File lib/blocktrain/query.rb, line 64
def filtered_filter
  {
    bool: {
      must: [
        {
          range: {
            timeStamp: {
              gte: @from,
              lte: @to
            }
          }
        }
      ]
    }
  }
end
filtered_query() click to toggle source
# File lib/blocktrain/query.rb, line 54
def filtered_query
  q = address_query
  return {} if q.nil?
  {
    query_string: {
      query: q
    }
  }
end
hits() click to toggle source
# File lib/blocktrain/query.rb, line 18
def hits
  result['hits']['total']
end
parse_datetime(datetime) click to toggle source
# File lib/blocktrain/query.rb, line 22
def parse_datetime(datetime)
  utc = Time.parse(datetime).utc
  return utc.to_i * 1000
end
query() click to toggle source
# File lib/blocktrain/query.rb, line 45
def query
  {
    filtered: {
      query: filtered_query,
      filter: filtered_filter
    }
  }
end
results() click to toggle source
# File lib/blocktrain/query.rb, line 14
def results
  result['hits']['hits']
end

Private Instance Methods

result() click to toggle source
# File lib/blocktrain/query.rb, line 90
def result
  Client.results(body)
end