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 |
# 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 base.desc 'password for EverySense API' base.config_param :password, :string 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
62 63 64 65 66 67 68 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 62 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
55 56 57 58 59 60 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 55 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
74 75 76 77 78 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 74 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
70 71 72 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 70 def delete_session_request Net::HTTP::Delete.new(@uri + "/session/#{@session_key}") end |
#error_handler(response, message) ⇒ Object
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 40 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
128 129 130 131 132 133 134 135 136 137 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 128 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.") $log.debug "get_message: #{get_messages_res.body}" .body end |
#get_messages_params ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 103 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
119 120 121 122 123 124 125 126 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 119 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.iso8601 end |
#put_message(message) ⇒ Object
87 88 89 90 91 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 87 def () $log.debug "put_message: #{message}" = @https.request(()) error_handler(, "put_message: '#{message}' failed.") end |
#put_message_request(message) ⇒ Object
80 81 82 83 84 85 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 80 def () = Net::HTTP::Post.new(@uri + "/device_data/#{@device_id}") .body = .content_type = "application/#{@format}" end |
#shutdown_proxy ⇒ Object
34 35 36 37 38 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 34 def shutdown_proxy $log.debug "shutdown_proxy #{@session_key}" delete_session @https.finish() if @https.active? end |
#start_proxy ⇒ Object
25 26 27 28 29 30 31 32 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 25 def start_proxy $log.debug "start everysense proxy #{@url}" @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
93 94 95 96 97 98 99 100 101 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 93 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
51 52 53 |
# File 'lib/fluent/plugin/everysense_proxy.rb', line 51 def valid_session? !@session_key.nil? # TODO validate @session_key using EverySense API end |