Current section
Files
Jump to
Current section
Files
lib/api/real.ex
defmodule Amplitude.API.Real do
use HTTPoison.Base
require Logger
@track_api_url "https://api.amplitude.com/httpapi"
@identify_api_url "https://api.amplitude.com/identify"
defp track_api_url do
Application.get_env(:amplitude, :api_host) || @track_api_url
end
defp identify_api_url, do: @identify_api_url
defp json_header, do: ["Content-Type": "application/json"]
def api_track(params, opts \\ []) do
api_key = Keyword.get_lazy(opts, :api_key, fn ->
Application.get_env(:amplitude, :api_key)
end)
case params |> Poison.encode() do
{:ok, params} ->
Task.start(fn() ->
start()
case get(track_api_url(), json_header(), [params: %{api_key: api_key, event: params}]) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
Logger.debug "Amplitude Track: #{body}"
{:ok, %HTTPoison.Response{status_code: 404, body: body}} ->
Logger.debug "Amplitude Track: #{body}"
{:ok, %HTTPoison.Response{status_code: 400, body: body}} ->
Logger.debug "Amplitude Track Failed: #{body}"
{:error, %HTTPoison.Error{reason: reason}} ->
Logger.debug "Amplitude Track Failed: #{reason}"
end
end)
{:ok, "success"}
{:error, message} ->
{:error, "Unable to serialize params to JSON: #{inspect(message)}"}
end
end
def api_identify(params, opts \\ []) do
api_key = Keyword.get_lazy(opts, :api_key, fn ->
Application.get_env(:amplitude, :api_key)
end)
case params |> Poison.encode() do
{:ok, params} ->
Task.start(fn() ->
start()
case get(identify_api_url(), json_header(), [params: %{api_key: api_key, insert_id: UUID.uuid4(), identification: params}]) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
Logger.debug "Amplitude Track: #{body}"
{:ok, %HTTPoison.Response{status_code: 404, body: body}} ->
Logger.debug "Amplitude Track: #{body}"
{:ok, %HTTPoison.Response{status_code: 400, body: body}} ->
Logger.debug "Amplitude Track Failed: #{body}"
{:error, %HTTPoison.Error{reason: reason}} ->
Logger.debug "Amplitude Track Failed: #{reason}"
end
end)
{:ok, "success"}
{:error, message} ->
{:error, "Unable to serialize params to JSON: #{inspect(message)}"}
end
end
# validate Poison response and strip out json value
def verify_json({:ok, json}), do: json
def verify_json({_, response}), do: "#{inspect(response)}"
def process_request_headers(headers), do: headers++json_header()
end