class NaviClient::Cloud

This class represents the client for cloud version. In cloud version, all the content will be saved and also being used from the s3

Attributes

id[R]

Public Class Methods

new(sso_web_url = ENV['api_url'], env = Rails.env) click to toggle source
Calls superclass method
# File lib/cloud/navi_cloud_client.rb, line 16
def initialize(sso_web_url = ENV['api_url'], env = Rails.env)
  super()

  # client-id used to track the process
  @id = SecureRandom.uuid

  # flag to print Ruby library debug info (very detailed)
  @net_imap_debug = false

  # flag to mark email as read after gets downloaded.
  @mark_as_read = false
  # flag to turn on/off debug mode.
  @debug = false

  @logger = nil

  # sso_web (authentication) config.
  @sso_web_url = sso_web_url
  # authentication token received from sso_web used to authenticate the request to database_api
  @token = nil

  # client_type
  @client_type = "cloud"

  @download_path = config[:s3_download_folder] + '/'

  # set email_address of current_user for s3 folder name
  @current_user_email = nil
  @env = env
end

Public Instance Methods

config() click to toggle source
# File lib/cloud/navi_cloud_client.rb, line 136
def config
  YAML.load_file(Rails.root.join("config/navi_client.yml")).with_indifferent_access
end
download(message, custom_uid) click to toggle source

Downloads the email content from imap-server and save it to the download_path

# File lib/cloud/navi_cloud_client.rb, line 81
def download(message, custom_uid)
  download_path = config[:s3_download_folder] + "/" + @current_user_email
  if ['text/plain', 'text/html'].include? message.mime_type

    h = Hash.new
    out_file = download_path + "/" + message.mime_type + "/"+custom_uid

    s3_filepath = upload_to_s3(out_file, encrypt(message.decoded))
    key = message.mime_type.split("/").join("_")

    h[key] = s3_filepath
    return h
  end
end
getMessageUUIds(prefix) click to toggle source
# File lib/cloud/navi_cloud_client.rb, line 131
def getMessageUUIds(prefix)
  files = s3_resource_files(config[:s3_bucket], prefix)
  files.empty? ? [] : files.map { |i| i.empty? ? 0 : i.split('/').last.split("_").first.to_i }
end
login(session_token) click to toggle source

login

login to the navi-cloud and get the authentication token

# File lib/cloud/navi_cloud_client.rb, line 56
def login(session_token)
  @token = session_token
end
override_logger(logger) click to toggle source
# File lib/cloud/navi_cloud_client.rb, line 47
def override_logger(logger)
  @logger = logger
end
s3_resource_files(bucket_name, prefix) click to toggle source
# File lib/cloud/navi_cloud_client.rb, line 121
def s3_resource_files(bucket_name, prefix)
  files = []
  credentials = Aws::Credentials.new(config[:aws_key], config[:aws_secret])
  s3 = Aws::S3::Resource.new(credentials: credentials, region: config[:aws_region])
  s3.bucket(bucket_name).objects(prefix: prefix).each do |obj|
    files << obj.key
  end
  return files
end
save(data={}, filename) click to toggle source

save data to download_path with file named by filename params. Input is hashmap, and it save the hashmap as yml format.

# File lib/cloud/navi_cloud_client.rb, line 100
def save(data={}, filename)
  download_path = config[:s3_download_folder] + "/" + @current_user_email
  filepath = download_path + "/" + filename + ".yml"

  return upload_to_s3(filepath, data.to_yaml)
end
send_request(in_filenames = [], is_last: false) click to toggle source

send bulk request to navi-ai service with list of input files downloaded from imap server.

# File lib/cloud/navi_cloud_client.rb, line 68
def send_request(in_filenames = [], is_last: false)
  unless in_filenames.blank?
    download_path = config['s3_download_folder'] + "/" + @current_user_email
    filepath = download_path + "/inputs/" + (Time.now.to_f * 1000).to_s
    filename = upload_to_s3(filepath, in_filenames.join("\n"))

    HTTPService::NaviAI.start(filepath: filename, client_id: @id, client_type: @client_type, token: @token, email: @current_user_email, is_last: is_last)
  end
end
set_current_user_email(email) click to toggle source
# File lib/cloud/navi_cloud_client.rb, line 60
def set_current_user_email(email)
  @current_user_email = email
  @download_path = config[:s3_download_folder] + '/' + email + "/"
end
upload_to_s3(file_path, content) click to toggle source

Helper function to upload the content to the s3

# File lib/cloud/navi_cloud_client.rb, line 109
def upload_to_s3(file_path, content)
  credentials = Aws::Credentials.new(config[:aws_key], config[:aws_secret])
  s3 = Aws::S3::Client.new(credentials: credentials, region: config[:aws_region])
  obj = s3.put_object({
                        body: content,
                        bucket: config[:s3_bucket],
                        key: file_path
                      })
  return file_path if obj.successful?
  return ""
end