class Trend::Client
Constants
- HEADERS
Public Class Methods
new(url: nil, api_key: nil, timeout: 30)
click to toggle source
# File lib/trend/client.rb, line 11 def initialize(url: nil, api_key: nil, timeout: 30) @api_key = api_key || Trend.api_key @uri = URI.parse(url || Trend.url) @http = Net::HTTP.new(@uri.host, @uri.port) @http.use_ssl = true if @uri.scheme == "https" @http.open_timeout = timeout @http.read_timeout = timeout end
Public Instance Methods
anomalies(series, params = {})
click to toggle source
# File lib/trend/client.rb, line 20 def anomalies(series, params = {}) resp = make_request("anomalies", series, params) resp["anomalies"].map { |v| parse_time(v) } end
correlation(series, series2, params = {})
click to toggle source
# File lib/trend/client.rb, line 30 def correlation(series, series2, params = {}) resp = make_request("correlation", series, params.merge(series2: series2)) resp["correlation"] end
forecast(series, params = {})
click to toggle source
# File lib/trend/client.rb, line 25 def forecast(series, params = {}) resp = make_request("forecast", series, params) Hash[resp["forecast"].map { |k, v| [parse_time(k), v] }] end
Private Instance Methods
make_request(path, series, params)
click to toggle source
# File lib/trend/client.rb, line 37 def make_request(path, series, params) post_data = { series: series }.merge(params) path = "#{path}?#{URI.encode_www_form(api_key: @api_key)}" if @api_key begin response = @http.post("/#{path}", post_data.to_json, HEADERS) rescue Errno::ECONNREFUSED, Timeout::Error => e raise Trend::Error, e.message end parsed_body = JSON.parse(response.body) rescue {} if !response.is_a?(Net::HTTPSuccess) raise Trend::Error, parsed_body["error"] || "Server returned #{response.code} response" end parsed_body end
parse_time(v)
click to toggle source
# File lib/trend/client.rb, line 59 def parse_time(v) v.size == 10 ? Date.parse(v) : Time.parse(v) end