module Fluent::Plugin::EverySenseProxy

Public Instance Methods

create_session() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 54
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"]
  @session_expires_in = Time.now + 60 * 60 * 12 # assuming time out in a half day
end
create_session_request() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 47
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() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 67
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() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 63
def delete_session_request
  Net::HTTP::Delete.new(@uri + "/session/#{@session_key}")
end
error_handler(response, message) click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 26
def error_handler(response, message)
  if response.code != "200"
    log.error error: message
    log.debug "code: #{response.code}"
    log.debug "message: #{response.message}"
    log.debug "body: #{response.body}"
    return false
  end
  return true
end
get_messages() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 126
def get_messages
  if !valid_session?
    return nil if create_session.nil?
    log.debug "session #{@session_key} created."
  end
  get_messages_res = @https.get(get_messages_request)
  return nil if !error_handler(get_messages_res,"get_messages failed.")
  log.debug "get_message: #{get_messages_res.body}"
  get_messages_res.body
end
get_messages_params() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 96
def get_messages_params
  params = {
    session_key: @session_key,
    from: @from,
    to: @to,
    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() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 112
def get_messages_request
  from = Time.parse(@from)
  to = from + @interval
  to = Time.now if to > Time.now
  @to = to.iso8601
  get_messages_req = @uri + target_path
  get_messages_req.query = URI.encode_www_form(get_messages_params)
  log.debug "#{get_messages_req}?#{get_messages_req.query}"
  # currently time window is automatically updated
  #@from = Time.now.iso8601
  @from = @to
  get_messages_req
end
put_message(message) click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 80
def put_message(message)
  log.debug "put_message: #{message}"
  put_message_res = @https.request(put_message_request(message))
  error_handler(put_message_res, "put_message: '#{message}' failed.")
end
put_message_request(message) click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 73
def put_message_request(message)
  put_message_req = Net::HTTP::Post.new(@uri + "/device_data/#{@device_id}")
  put_message_req.body = message
  put_message_req.content_type = "application/#{@format}"
  put_message_req
end
shutdown_proxy() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 20
def shutdown_proxy
  log.debug "shutdown_proxy #{@session_key}"
  delete_session
  @https.finish() if @https.active?
end
start_proxy() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 11
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() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 86
def target_path
  if !@device_id.nil?
    return "/device_data/#{@device_id}"
  elsif !@recipe_id.nil?
    return "/recipe_data/#{@recipe_id}.#{@format}"
  else
    raise Fluent::ConfigError, "device_id or recipe_id must be specified."
  end
end
valid_session?() click to toggle source
# File lib/fluent/plugin/everysense_proxy.rb, line 37
def valid_session?
  # TODO validate @session_key using EverySense API
  if !@session_key.nil?
    if Time.now < @session_expires_in
      return true
    end
  end
  return false
end