lib/databox/client.rb in databox-0.1.2 vs lib/databox/client.rb in databox-0.2.1
- old
+ new
@@ -1,90 +1,71 @@
+require 'httparty'
+require 'json'
+
class Databox::Client
include HTTParty
format :json
-
- headers "User-Agent" => "Databox/#{Databox::VERSION} (Ruby)"
-
- debug_output if ENV["HTTPARTY_DEBUG"] == "1"
-
+ headers 'User-Agent' => "Databox/#{Databox::VERSION} (Ruby)"
+ debug_output if [1, "1"].include?(ENV["HTTPARTY_DEBUG"])
default_timeout 1 if ENV["DATABOX_MODE"] == "test"
- attr_accessor :token
- def token
- @token || Databox.configuration.token
- end
+ attr_accessor :last_push_content
- def key; Databox.configuration.key end
- def url; Databox.configuration.url end
-
def initialize
Databox.configure unless Databox.configured?
- self.class.base_uri url
- self.class.basic_auth key, "password"
+ self.class.base_uri push_host
+ self.class.basic_auth push_token, ''
+ self.class.headers 'Content-Type' => 'application/json'
+ self
end
- def push data={}
- if validate data
- data = [data] unless data.is_a?(Array)
- handle self.class.post("/push/custom/#{self.token}", body: { data: data }.to_json)
- end
+ def push_host
+ Databox.configuration.push_host
end
- def logs
- handle self.class.get("/push/custom/#{self.token}/logs")
+ def push_token
+ Databox.configuration.push_token
end
- def handle response
- if response.code > 201
- raise Databox::ClientError.new(
- response.code.to_s+" - "+
- response.parsed_response["error"]["type"]+" - "+
- response.parsed_response["error"]["message"]
- )
- end
+ # Sends data to actual end-point.
+ def raw_push(path='/', data=nil)
+ handle self.class.post(path, data.nil? ? {} : {body: JSON.dump({data: data})})
+ end
- output = response.parsed_response
-
- if output.is_a?(Hash) and output.keys.include?("response")
- Databox::Response.new(output["response"])
- elsif output.is_a?(Array)
- output.map { |item| Databox::Response.new(item) }
- else
- output
- end
+ def handle(response)
+ response.parsed_response
end
- def validate data
- return data.map do |dp|
- validate(dp)
- end if data.is_a?(Array)
+ def process_kpi(options={})
+ options.delete_if { |k, _| [:date, 'date'].include?(k) }
- errors = []
- errors.push("Data is missing") if data.nil? or data == {}
- errors.push("Key is required") if data[:key].nil?
- # errors.push("Value is required") if data[:value].nil?
+ %i{key value}.each do |k|
+ raise("Missing '#{k}'") if (options[k] || options[k.to_s]).nil?
+ end
- errors.push("Date format is invalid") if not(data[:date].nil?) and (Date.iso8601(data[:date]) rescue false) == false
- errors.push("Key format is invalid") unless data[:key] =~/^[a-zA-Z0-9_\.\@]*$/
+ options["$#{(options['key'] || options[:key])}"] = options['value'] || options[:value]
+ options.delete_if { |k, _| [:key, 'key', :value, 'value'].include?(k) }
- unless errors.empty?
- invalid_record = Databox::InvalidRecord.new "Payload is invalid"
- invalid_record.errors = errors
- raise invalid_record
+ attributes = options[:attributes] || options['attributes']
+ unless attributes.nil?
+ [:attributes, 'attributes'].each {|k| options.delete(k) }
+ attributes.each { |k,v| options[k] = v }
end
- true
+ options
end
-end
-class Databox::InvalidRecord < StandardError
- attr_accessor :errors
-end
+ def push(kpi={})
+ self.last_push_content = raw_push('/', [process_kpi(kpi)])
+ self.last_push_content['status'] == 'ok'
+ end
-class Databox::ClientError < StandardError; end
+ def insert_all(rows=[])
+ self.last_push_content = raw_push('/', rows.map {|r| process_kpi(r) })
+ self.last_push_content['status'] == 'ok'
+ end
-class Databox::Response < OpenStruct
- def success?
- self.type == "success"
+ def last_push(n=1)
+ raw_push "/lastpushes/#{n}"
end
end