class MetricsSpec::Metrics

Constants

DefaultHostField
DefaultTimeField
HostField
TimestampDescSorter

Attributes

aggs[R]
filters[R]
query_string[R]

Public Class Methods

new(query_string, host_field: nil) click to toggle source
# File lib/metricsspec/metrics.rb, line 5
def initialize(query_string, host_field: nil)
  @query_string = query_string
  @filters = []
end

Public Instance Methods

[](field) click to toggle source
# File lib/metricsspec/metrics.rb, line 16
def [](field)
  Field.new(self, field)
end
at(host, field: DefaultHostField) click to toggle source
# File lib/metricsspec/metrics.rb, line 72
def at(host, field: DefaultHostField)
  term(field, host)
end
count() click to toggle source
# File lib/metricsspec/metrics.rb, line 20
def count
  body = Jbuilder.encode do |json|
    json.query do
      json.query_string do
        json.query @query_string
      end
    end
    json.filter build_filters() unless @filters.empty?
  end
  return MetricsSpec.client.count(body: body)["count"]
end
empty?() click to toggle source
# File lib/metricsspec/metrics.rb, line 47
def empty?
  count.zero?
end
initialize_copy(orig) click to toggle source
# File lib/metricsspec/metrics.rb, line 12
def initialize_copy(orig)
  @filters = orig.filters.dup
end
last(n=1) click to toggle source
# File lib/metricsspec/metrics.rb, line 34
def last(n=1)
  body = Jbuilder.encode do |json|
    json.size n
    json.sort do
      json.array! TimestampDescSorter
    end
  end
  hits = search(body)["hits"]["hits"]
  hits.map! {|hit| hit["_source"] }
  return hits.first if n == 1
  return hits
end
range(field, **range) click to toggle source
# File lib/metricsspec/metrics.rb, line 60
def range(field, **range)
  filter = {
    range: {
      field => range
    }
  }
  return filtered(filter)
end
term(field, term) click to toggle source
# File lib/metricsspec/metrics.rb, line 51
def term(field, term)
  filter = {
    term: {
      field => term
    }
  }
  return filtered(filter)
end
within(seconds, field: DefaultTimeField) click to toggle source
# File lib/metricsspec/metrics.rb, line 76
def within(seconds, field: DefaultTimeField)
  range(field, gte: "now-#{seconds}s")
end

Private Instance Methods

build_filters() click to toggle source
# File lib/metricsspec/metrics.rb, line 103
def build_filters
  return @filters.first if @filters.size == 1
  return Jbuilder.new {|json| json.and @filters }
end
filtered(filter) click to toggle source
# File lib/metricsspec/metrics.rb, line 108
def filtered(filter)
  duped = self.dup
  duped.filters.push(filter)
  return duped
end