module Elastic::Dsl::MetricBuilder

Public Instance Methods

average(_field, _options = {}) click to toggle source
# File lib/elastic/dsl/metric_builder.rb, line 3
def average(_field, _options = {})
  aggregate_metric(Elastic::Nodes::Agg::Average, _field, _options, 'avg_%s')
end
closing(_field, _options = {}) click to toggle source
# File lib/elastic/dsl/metric_builder.rb, line 32
def closing(_field, _options = {})
  by = _options.delete :by
  raise ArgumentError, 'must provide a sorting column' if by.nil?

  aggregate_metric(Elastic::Nodes::Agg::Top, _field, _options, 'close_%s') do |node|
    node.add_sort(by, order: :desc)
  end
end
maximum(_field, _options = {}) click to toggle source
# File lib/elastic/dsl/metric_builder.rb, line 15
def maximum(_field, _options = {})
  aggregate_metric(Elastic::Nodes::Agg::Maximum, _field, _options, 'max_%s')
end
minimum(_field, _options = {}) click to toggle source
# File lib/elastic/dsl/metric_builder.rb, line 11
def minimum(_field, _options = {})
  aggregate_metric(Elastic::Nodes::Agg::Minimum, _field, _options, 'min_%s')
end
opening(_field, _options = {}) click to toggle source
# File lib/elastic/dsl/metric_builder.rb, line 23
def opening(_field, _options = {})
  by = _options.delete :by
  raise ArgumentError, 'must provide a sorting column' if by.nil?

  aggregate_metric(Elastic::Nodes::Agg::Top, _field, _options, 'open_%s') do |node|
    node.add_sort(by, order: :asc)
  end
end
stats(_field, _options = {}) click to toggle source
# File lib/elastic/dsl/metric_builder.rb, line 19
def stats(_field, _options = {})
  aggregate_metric(Elastic::Nodes::Agg::Stats, _field, _options, '%s_stats')
end
sum(_field, _options = {}) click to toggle source
# File lib/elastic/dsl/metric_builder.rb, line 7
def sum(_field, _options = {})
  aggregate_metric(Elastic::Nodes::Agg::Sum, _field, _options, 'sum_%s')
end

Private Instance Methods

aggregate_metric(_klass, _field, _options, _default_name, &_block) click to toggle source
# File lib/elastic/dsl/metric_builder.rb, line 43
def aggregate_metric(_klass, _field, _options, _default_name, &_block)
  # TODO: detect nested name and wrap node
  name = _options.delete(:as) || sprintf(_default_name, _field)
  node = _klass.build(name, _field, _options)
  _block.call node unless _block.nil?
  aggregate node
end