aboutsummaryrefslogtreecommitdiff
path: root/lib/exping/http/task.ex
blob: f9d39f51410062222c3a280d01840cafedd73291 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
defmodule ExPing.HTTP.Task do
  require Logger
  @moduledoc """
  Task module for performing HTTP requests
  """

  @user_agent {'user-agent', 'exping'}

  @http Application.get_env(:exping, :http_client) || :httpc

  @type response :: {integer, binary}

  @spec head(URI.t, reference, pid) :: {:ok, response} | {:error, term}
  def head(%URI{} = uri, ref, owner) do
    :head
      |> @http.request({endpoint(uri), headers()}, [], [])
      |> process_response(ref, owner)
  end

  @spec get(URI.t, reference, pid) :: {:ok, response} | {:error, term}
  def get(%URI{} = uri, ref, owner) do
    :get
      |> @http.request({endpoint(uri), headers()}, [], [])
      |> process_response(ref, owner)
  end

  defp process_response({:ok, {{_, code, _}, _, body}}, ref, owner) do
    :ok = Logger.info("HTTP request returned: #{code}")
    send(owner, {:http_task_resp, ref, {:ok, {code, body}}})
  end

  defp process_response({:error, _} = error, ref, owner) do
    :ok = Logger.warn("HTTP request returned error: #{inspect(error)}")
    send(owner, {:http_task_resp, ref, error})
  end

  defp endpoint(%URI{} = uri) do
    uri |> to_string() |> String.to_charlist
  end

  defp headers do
    [@user_agent]
  end

end