defmodule Consul.Api.V1.Health do
@moduledoc """
Higher level abstraction on top of Consul's Health API.
"""
alias Consul.{Connection, Request, Response}
@doc """
List checks associated with the service provided on the path.
"""
def list_checks(connection, service, optional_params \\ [], opts \\ []) do
optional_params_config = %{
:dc => :query,
:near => :query,
:"node-meta" => :query,
:filter => :query,
:ns => :query,
:index => :query,
:wait => :query
}
request =
Request.new()
|> Request.method(:get)
|> Request.url("/v1/health/checks/{service}", %{
"service" => URI.encode(service, &URI.char_unreserved?/1)
})
|> Request.add_optional_params(optional_params_config, optional_params)
connection
|> Connection.execute(request)
|> Response.decode(opts ++ [as: %{}])
end
@doc """
List nodes providing the service indicated on the path.
"""
def list_nodes(connection, service, optional_params \\ [], opts \\ []) do
optional_params_config = %{
:dc => :query,
:near => :query,
:tag => :query,
:"node-meta" => :query,
:passing => :query,
:filter => :query,
:ns => :query,
:index => :query,
:wait => :query
}
request =
Request.new()
|> Request.method(:get)
|> Request.url("/v1/health/service/{service}", %{
"service" => URI.encode(service, &URI.char_unreserved?/1)
})
|> Request.add_optional_params(optional_params_config, optional_params)
connection
|> Connection.execute(request)
|> Response.decode(opts ++ [as: %{}])
end
end