module Keen::Client::QueryingMethods

Public Instance Methods

average(event_collection, params, options={}) click to toggle source

Runs a average query. See detailed documentation here: keen.io/docs/api/reference/#average-resource

@param event_collection @param params [Hash] (optional)

target_property (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 98
def average(event_collection, params, options={})
  query(__method__, event_collection, params, options)
end
count(event_collection, params={}, options={}) click to toggle source

Runs a count query. See detailed documentation here: keen.io/docs/api/reference/#count-resource

@param event_collection @param params [Hash] (optional)

group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 18
def count(event_collection, params={}, options={})
  query(__method__, event_collection, params, options)
end
count_unique(event_collection, params, options={}) click to toggle source

Runs a count unique query. See detailed documentation here: keen.io/docs/api/reference/#count-unique-resource

@param event_collection @param params [Hash] (optional)

target_property (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 34
def count_unique(event_collection, params, options={})
  query(__method__, event_collection, params, options)
end
extraction(event_collection, params={}, options={}) click to toggle source

Runs a extraction query. See detailed documentation here: keen.io/docs/api/reference/#extraction-resource

@param event_collection @param params [Hash] (optional)

target_property (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
latest (optional)
# File lib/keen/client/querying_methods.rb, line 164
def extraction(event_collection, params={}, options={})
  query(__method__, event_collection, params, options)
end
funnel(params, options={}) click to toggle source

Runs a funnel query. See detailed documentation here: keen.io/docs/api/reference/#funnel-resource

@param event_collection @param params [Hash] (optional)

steps (required)
# File lib/keen/client/querying_methods.rb, line 175
def funnel(params, options={})
  query(__method__, nil, params, options)
end
maximum(event_collection, params, options={}) click to toggle source

Runs a maximum query. See detailed documentation here: keen.io/docs/api/reference/#maximum-resource

@param event_collection @param params [Hash] (optional)

target_property (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 66
def maximum(event_collection, params, options={})
  query(__method__, event_collection, params, options)
end
median(event_collection, params, options={}) click to toggle source

Runs a median query. See detailed documentation here: keen.io/docs/api/reference/#median-resource

@param event_collection @param params [Hash] (optional)

target_property (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 114
def median(event_collection, params, options={})
  query(__method__, event_collection, params, options)
end
minimum(event_collection, params, options={}) click to toggle source

Runs a minimum query. See detailed documentation here: keen.io/docs/api/reference/#minimum-resource

@param event_collection @param params [Hash] (optional)

target_property (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 50
def minimum(event_collection, params, options={})
  query(__method__, event_collection, params, options)
end
multi_analysis(event_collection, params, options={}) click to toggle source

Runs a multi-analysis query See detailed documentation here: keen.io/docs/data-analysis/multi-analysis/

NOTE: why isn't multi-analysis listed in the

API Technical Reference?

@param event_collection @param params [Hash]

analyses [Hash] (required)
  label (required)
  analysis_type (required)
  target_property (optional)
# File lib/keen/client/querying_methods.rb, line 192
def multi_analysis(event_collection, params, options={})
  query(__method__, event_collection, params, options)
end
percentile(event_collection, params, options={}) click to toggle source

Runs a percentile query. See detailed documentation here: keen.io/docs/api/reference/#percentile-resource

@param event_collection @param params [Hash] (optional)

target_property (required)
percentile (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 131
def percentile(event_collection, params, options={})
  query(__method__, event_collection, params, options)
end
query(analysis_type, event_collection, params={}, options={}) click to toggle source

Run a query @param event_colection @param params [Hash] (required)

analysis_type (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 222
def query(analysis_type, event_collection, params={}, options={})
  response =
    if options[:method] == :post
      post_query(analysis_type, event_collection, params, options)
    else
      url = _query_url(analysis_type, event_collection, params, options)
      get_response(url, options)
    end

  response_body = response.body.chomp
  api_result = process_response(response.code, response_body)
  api_result = api_result["result"] unless options[:response] == :all_keys
  api_result
end
query_url(analysis_type, event_collection, params={}, options={}) click to toggle source

Returns the URL for a Query without running it @param event_colection @param params [Hash] (required)

analysis_type (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)

@param options

exclude_api_key
# File lib/keen/client/querying_methods.rb, line 207
def query_url(analysis_type, event_collection, params={}, options={})
  str = _query_url(analysis_type, event_collection, params, options)
  str << "&api_key=#{self.read_key}" unless options[:exclude_api_key]
  str
end
select_unique(event_collection, params, options={}) click to toggle source

Runs a select_unique query. See detailed documentation here: keen.io/docs/api/reference/#select-unique-resource

@param event_collection @param params [Hash] (optional)

target_property (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 147
def select_unique(event_collection, params, options={})
  query(__method__, event_collection, params, options)
end
sum(event_collection, params, options={}) click to toggle source

Runs a sum query. See detailed documentation here: keen.io/docs/api/reference/#sum-resource

@param event_collection @param params [Hash] (optional)

target_property (required)
group_by (optional)
timeframe (optional)
interval (optional)
filters (optional) [Array]
timezone (optional)
# File lib/keen/client/querying_methods.rb, line 82
def sum(event_collection, params, options={})
  query(__method__, event_collection, params, options)
end

Private Instance Methods

_query_url(analysis_type, event_collection, params={}, options={}) click to toggle source
# File lib/keen/client/querying_methods.rb, line 256
def _query_url(analysis_type, event_collection, params={}, options={})
  ensure_project_id!
  ensure_read_key!

  query_params = params.dup
  query_params[:event_collection] = event_collection.to_s if event_collection
  "#{self.api_url}#{api_query_resource_path(analysis_type)}?#{preprocess_params(query_params)}"
end
api_query_resource_path(analysis_type) click to toggle source
# File lib/keen/client/querying_methods.rb, line 276
def api_query_resource_path(analysis_type)
  "/#{self.api_version}/projects/#{self.project_id}/queries/#{analysis_type}"
end
get_response(url, options={}) click to toggle source
# File lib/keen/client/querying_methods.rb, line 265
def get_response(url, options={})
  log_query(url) if log_queries
  uri = URI.parse(url)
  Keen::HTTP::Sync.new(self.api_url, self.proxy_url, self.read_timeout, self.open_timeout).get(
    :path => "#{uri.path}?#{uri.query}",
    :headers => request_headers(options)
  )
rescue Exception => http_error
  raise HttpError.new("Couldn't perform #{@analysis_type} on Keen IO: #{http_error.message}", http_error)
end
log_query(url, method='GET', options={}) click to toggle source
# File lib/keen/client/querying_methods.rb, line 280
def log_query(url, method='GET', options={})
  Keen.logger.info { "[KEEN] Send #{method} query to #{url} with options #{options}" }
end
post_query(analysis_type, event_collection, params={}, options={}) click to toggle source
# File lib/keen/client/querying_methods.rb, line 239
def post_query(analysis_type, event_collection, params={}, options={})
  ensure_project_id!
  ensure_read_key!

  log_query("#{self.api_url}#{api_query_resource_path(analysis_type)}", 'POST', params) if log_queries

  query_params = params.dup
  query_params[:event_collection] = event_collection.to_s if event_collection
  Keen::HTTP::Sync.new(self.api_url, self.proxy_url, self.read_timeout, self.open_timeout).post(
    :path => api_query_resource_path(analysis_type),
    :headers => request_headers(options),
    :body => MultiJson.encode(query_params)
  )
rescue Exception => http_error
  raise HttpError.new("Couldn't perform #{@analysis_type} on Keen IO: #{http_error.message}", http_error)
end
request_headers(options={}) click to toggle source
# File lib/keen/client/querying_methods.rb, line 284
def request_headers(options={})
  base_headers = api_headers(self.read_key, "sync")
  options.has_key?(:headers) ? base_headers.merge(options[:headers]) : base_headers
end