Current section
Files
Jump to
Current section
Files
lib/vuforex.ex
defmodule Vuforex do
@moduledoc """
HTTP Client for Vuforia Web Services.
"""
alias Calendar.DateTime.Format
@api_url Application.compile_env(:vuforex, :base_url)
@server_access_key Application.compile_env(:vuforex, :server_access_key)
@spec summary() :: {:ok, map()} | {:error, map()}
@doc """
Get a summary of images from a cloud database.
## Examples
iex> Vuforex.summary()
{:ok,
%{
"result_code" => "Success",
"active_images" => 0,
"current_month_recos" => 0,
"failed_images" => 0,
"inactive_images" => 0,
"name" => "Vuforex",
"previous_month_recos" => 0,
"processing_images" => 0,
"reco_threshold" => 1000,
"request_quota" => 100000,
"request_usage" => 0,
"target_quota" => 1000,
"total_recos" => 0,
"transaction_id" => "659755bdbaf2406dad42f267ef877a7a"
}
}
"""
def summary do
time = Format.httpdate(DateTime.utc_now())
signature = Vuforex.Signature.generate("/summary", nil, "GET", time)
case Tesla.get(tesla_client(signature, time), "#{@api_url}/summary") do
{:ok, %Tesla.Env{status: status, body: summary}} when status in [200, 201] ->
{:ok, Jason.decode!(summary)}
{:ok, %Tesla.Env{status: status, body: body}} when status not in [200, 201] ->
{:error, Jason.decode!(body)}
end
end
def get_tesla_client(signature, time),
do: tesla_client(signature, time)
defp tesla_client(signature, time) do
middleware = [
{Tesla.Middleware.BaseUrl, @api_url},
{Tesla.Middleware.Headers,
[
{"Date", time},
{"Authorization", "VWS #{@server_access_key}:#{signature}"}
]}
]
Tesla.client(middleware)
end
end