Module: Fluent::EverySenseProxy
- Included in:
- EverySenseInput, EverySenseOutput
- Defined in:
- lib/fluent/plugin/everysense_proxy.rb
Defined Under Namespace
Classes: EverySenseProxyError
Class Method Summary collapse
Instance Method Summary collapse
- #create_session ⇒ Object
- #create_session_request ⇒ Object
- #delete_session ⇒ Object
- #delete_session_request ⇒ Object
- #error_handler(response, message) ⇒ Object
- #get_messages ⇒ Object
- #get_messages_params ⇒ Object
- #get_messages_request ⇒ Object
- #put_message(message) ⇒ Object
- #put_message_request(message) ⇒ Object
- #shutdown_proxy ⇒ Object
- #start_proxy ⇒ Object
- #target_path ⇒ Object
- #valid_session? ⇒ Boolean
Class Method Details
.included(base) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 11 def self.included(base) base.desc 'EverySense API URI' base.config_param :url, :string, :default => 'https://api.every-sense.com:8001/' base.desc 'login_name for EverySense API' base.config_param :login_name, :string, :default => nil # TODO: mandatory option base.desc 'password for EverySense API' base.config_param :password, :string, :default => nil # TODO: mandatory option base.config_param :device_id, :string, :default => nil base.config_param :recipe_id, :string, :default => nil base.config_param :format, :string, :default => 'json' base.config_param :limit, :integer, :default => 1000 #base.config_param :keep_alive, :integer, :default => 2 base.config_param :from, :string, :default => Time.now.iso8601 base.config_param :keep, :bool, :default => false base.config_param :inline, :bool, :default => false end |
Instance Method Details
#create_session ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 65 def create_session return @session_key if valid_session? @session_req ||= create_session_request session_res = @https.request(@session_req) return nil if !error_handler(session_res, 'create_session failed.') @session_key = JSON.parse(session_res.body)["session_key"] end |
#create_session_request ⇒ Object
58 59 60 61 62 63 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 58 def create_session_request session_req = Net::HTTP::Post.new(@uri + '/session') session_req.body = {login_name: @login_name, password: @password}.to_json session_req.content_type = 'application/json' session_req end |
#delete_session ⇒ Object
77 78 79 80 81 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 77 def delete_session return if !valid_session? del_session_res = @https.request(delete_session_request) error_handler(del_session_res, 'delete_session failed.') end |
#delete_session_request ⇒ Object
73 74 75 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 73 def delete_session_request Net::HTTP::Delete.new(@uri + "/session/#{@session_key}") end |
#error_handler(response, message) ⇒ Object
43 44 45 46 47 48 49 50 51 52 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 43 def error_handler(response, ) if response.code != "200" $log.error :error => $log.debug "code: #{response.code}" $log.debug "message: #{response.message}" $log.debug "body: #{response.body}" return false end return true end |
#get_messages ⇒ Object
130 131 132 133 134 135 136 137 138 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 130 def if !valid_session? return nil if create_session.nil? $log.debug "session #{@session_key} created." end = @https.get() return nil if !error_handler(,"get_messages failed.") .body end |
#get_messages_params ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 105 def params = { session_key: @session_key, from: @from, to: Time.now.iso8601, limit: @limit } if !@device_id.nil? return params elsif !@recipe_id.nil? return params.merge({keep: @keep, inline: @inline, format: @format}) else raise ConfigError, "device_id or recipe_id must be specified." end end |
#get_messages_request ⇒ Object
121 122 123 124 125 126 127 128 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 121 def = @uri + target_path .query = URI.encode_www_form() $log.debug "#{@uri + target_path}?#{URI.encode_www_form(get_messages_params)}" # currently time window is automatically updated @from = (Time.now + 1).iso8601 end |
#put_message(message) ⇒ Object
90 91 92 93 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 90 def () = @https.request(()) error_handler(, "put_message: '#{message}' failed.") end |
#put_message_request(message) ⇒ Object
83 84 85 86 87 88 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 83 def () = Net::HTTP::Post.new(@uri + "/device_data/#{@device_id}") .body = .content_type = "application/#{@format}" end |
#shutdown_proxy ⇒ Object
37 38 39 40 41 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 37 def shutdown_proxy $log.debug "shutdown_proxy #{@session_key}" delete_session @https.finish() if @https.active? end |
#start_proxy ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 28 def start_proxy $log.debug "start everysense proxy #{@uri}" @uri = URI.parse(@url) @https = Net::HTTP.new(@uri.host, @uri.port) @https.use_ssl = (@uri.scheme == 'https') @session_key = nil end |
#target_path ⇒ Object
95 96 97 98 99 100 101 102 103 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 95 def target_path if !@device_id.nil? return "/device_data/#{@device_id}" elsif !@recipe_id.nil? return "/recipe_data/#{@recipe_id}.#{@format}" else raise ConfigError, "device_id or recipe_id must be specified." end end |
#valid_session? ⇒ Boolean
54 55 56 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 54 def valid_session? !@session_key.nil? # TODO validate @session_key using EverySense API end |