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
|