module Keen::Client::QueryingMethods
Public Instance Methods
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
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
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
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
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
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
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
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
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
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
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
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
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
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
# 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
# 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
# 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
# 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
# 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
# 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