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 do
require Logger
@moduledoc """
Provides basic HTTP client for pinging endpoints
"""
@timeout Application.get_env(:exping, :http)[:timeout] || 5000
@spec head(URI.t) :: {:ok, {integer, binary}} | {:error, term}
def head(endpoint) do
ref = make_ref()
:ok = Logger.info("Sending HEAD request to #{inspect(endpoint)}")
{:ok, _} = spawn_http_task(:head, [endpoint, ref, self()])
receive do
{:http_task_resp, ^ref, {:ok, {_, _}} = resp} -> resp
{:http_task_resp, ^ref, {:error, _} = error} -> error
after @timeout ->
{:error, :timeout}
end
end
@spec get(URI.t) :: {:ok, {integer, binary}} | {:error, term}
def get(endpoint) do
ref = make_ref()
:ok = Logger.info("Sending GET request to #{inspect(endpoint)}")
{:ok, _} = spawn_http_task(:get, [endpoint, ref, self()])
receive do
{:http_task_resp, ^ref, {:ok, _} = resp} -> resp
{:http_task_resp, ^ref, {:error, _} = error} -> error
after @timeout ->
{:error, :timeout}
end
end
defp spawn_http_task(method, args) do
Task.Supervisor.start_child(
ExPing.Supervisor.Task,
ExPing.HTTP.Task,
method,
args)
end
end
|