Current section
Files
Jump to
Current section
Files
lib/consul/http/raw.ex
defmodule Consul.HTTP.Raw do
endpoints = %{
v1: [
# ACL
%{
path: ["v1", "acl", "create"],
name: :acl_create,
method: :put
},
%{
path: ["v1", "acl", "update"],
name: :acl_update,
method: :put
},
%{
path: ["v1", "acl", "destroy", {:var, :id}],
name: :acl_destroy,
args: [:id],
method: :put
},
%{
path: ["v1", "acl", "info", {:var, :id}],
name: :acl_info,
args: [:id],
method: :get
},
%{
path: ["v1", "acl", "clone", {:var, :id}],
name: :acl_clone,
args: [:id],
method: :put
},
%{
path: ["v1", "acl", "list"],
name: :acl_list,
method: :put
},
%{
path: ["v1", "acl", "replication"],
name: :acl_replication,
method: :get
},
# Agent
%{
path: ["v1", "agent", "checks"],
name: :agent_checks,
method: :get
},
%{
path: ["v1", "agent", "services"],
name: :agent_services,
method: :get
},
%{
path: ["v1", "agent", "members"],
name: :agent_members,
method: :get
},
%{
path: ["v1", "agent", "self"],
name: :agent_self,
method: :get
},
%{
path: ["v1", "agent", "maintenance"],
name: :agent_maintenance,
method: :get
},
%{
path: ["v1", "agent", "join", {:var, :address}],
name: :agent_join,
args: [:address],
method: :get
},
%{
path: ["v1", "agent", "force-leave", {:var, :node_id}],
name: :agent_force_leave,
args: [:node_id],
method: :get
},
%{
path: ["v1", "agent", "check", "register"],
name: :agent_check_register,
method: :put
},
%{
path: ["v1", "agent", "check", "deregister", {:var, :check_id}],
name: :agent_check_deregister,
args: [:check_id],
method: :get
},
%{
path: ["v1", "agent", "check", "pass", {:var, :check_id}],
name: :agent_check_pass,
args: [:check_id],
method: :get
},
%{
path: ["v1", "agent", "check", "warn", {:var, :check_id}],
name: :agent_check_warn,
args: [:check_id],
method: :get
},
%{
path: ["v1", "agent", "check", "fail", {:var, :check_id}],
name: :agent_check_fail,
args: [:check_id],
method: :get
},
%{
path: ["v1", "agent", "check", "update", {:var, :check_id}],
name: :agent_check_update,
args: [:check_id],
method: :put
},
%{
path: ["v1", "agent", "service", "register"],
name: :agent_service_register,
method: :put
},
%{
path: ["v1", "agent", "service", "deregister", {:var, :service_id}],
name: :agent_service_deregister,
args: [:service_id],
method: :put
},
%{
path: ["v1", "agent", "service", "maintenance", {:var, :service_id}],
name: :agent_service_maintenance,
args: [:service_id],
method: :put
},
# Catalog
%{
path: ["v1", "catalog", "register"],
name: :catalog_register,
method: :put
},
%{
path: ["v1", "catalog", "deregister"],
name: :catalog_deregister,
method: :put
},
%{
path: ["v1", "catalog", "datacenters"],
name: :catalog_datacenters,
method: :get
},
%{
path: ["v1", "catalog", "nodes"],
name: :catalog_nodes,
method: :get
},
%{
path: ["v1", "catalog", "services"],
name: :catalog_services,
method: :get
},
%{
path: ["v1", "catalog", "services", {:var, :service}],
args: [:service],
name: :catalog_service,
method: :get
},
%{
path: ["v1", "catalog", "node", {:var, :node_id}],
args: [:node_id],
name: :catalog_node,
method: :get
},
# Event
%{
path: ["v1", "event", "fire", {:var, :name}],
name: :event_fire,
args: [:name],
method: :put
},
%{
path: ["v1", "event", "list"],
name: :event_list,
method: :get
},
# Health
%{
path: ["v1", "health", "node", {:var, :node_id}],
name: :health_node,
args: [:node_id],
method: :get
},
%{
path: ["v1", "health", "checks", {:var, :service}],
name: :health_checks,
args: [:service],
method: :get
},
%{
path: ["v1", "health", "service", {:var, :service}],
name: :health_service,
args: [:service],
method: :get
},
%{
path: ["v1", "health", "state", {:var, :state}],
name: :health_state,
args: [:state],
method: :get
},
#KV
%{
# path: quote do "v1/kv/#{unquote({:key, [], Elixir})}" end,
path: ["v1", "kv", {:var, :key}],
# path: ["v1/kv/", {:var, :key}],
name: :kv_get,
args: [:key],
method: :get
},
# TODO: maybe seperate path args from args
%{
path: ["v1", "kv", {:var, :key}],
name: :kv_put,
args: [:key],
method: :put
},
%{
path: ["v1", "kv", {:var, :key}],
name: :kv_delete,
args: [:key],
method: :delete
},
%{
path: ["v1", "txn"],
name: :kv_txn,
method: :put
},
# Coordinate
%{
path: ["v1", "coordinate", "datacenters"],
name: :coordinate_datacenters,
method: :get
},
%{
path: ["v1", "coordinate", "nodes"],
name: :coordinate_nodes,
method: :get
},
# Operator
%{
path: ["v1", "operator", "raft", "configuration"],
name: :operator_raft_configuration,
method: :get
},
%{
path: ["v1", "operator", "raft", "peer"],
name: :operator_raft_peer_delete,
method: :delete
},
%{
path: ["v1", "operator", "keyring"],
name: :operator_keyring_get,
method: :get
},
%{
path: ["v1", "operator", "keyring"],
name: :operator_keyring_put,
method: :put
},
%{
path: ["v1", "operator", "keyring"],
name: :operator_keyring_post,
method: :post
},
%{
path: ["v1", "operator", "keyring"],
name: :operator_keyring_delete,
method: :delete
},
# Query
%{
path: ["v1", "query"],
name: :query_get,
method: :get
},
%{
path: ["v1", "query"],
name: :query_post,
method: :post
},
%{
path: ["v1", "query", {:var, :query}],
args: [:query],
name: :query_get_by_id,
method: :get
},
%{
path: ["v1", "query", {:var, :query}],
args: [:query],
name: :query_put_by_id,
method: :put
},
%{
path: ["v1", "query", {:var, :query}],
args: [:query],
name: :query_delete_by_id,
method: :delete
},
%{
path: ["v1", "query", {:var, :query}, "execute"],
args: [:query],
name: :query_execute,
method: :get
},
%{
path: ["v1", "query", {:var, :query}, "explain"],
args: [:query],
name: :query_explain,
method: :get
},
# Session
%{
path: ["v1", "session", "create"],
name: :session_create,
method: :put
},
%{
path: ["v1", "session", "destroy", {:var, :session}],
args: [:session],
name: :session_destroy,
method: :put
},
%{
path: ["v1", "session", "info", {:var, :session}],
args: [:session],
name: :session_info,
method: :get
},
%{
path: ["v1", "session", "node", {:var, :node}],
args: [:node],
name: :session_for_node,
method: :get
},
%{
path: ["v1", "session", "list"],
name: :session_list,
method: :get
},
%{
path: ["v1", "session", "renew", {:var, :session}],
args: [:session],
name: :session_renew,
method: :put
},
# Snapshot
%{
path: ["v1", "snapshot"],
name: :snapshot_get,
method: :get
},
%{
path: ["v1", "snapshot"],
name: :snapshot_put,
method: :put
},
# Status
%{
path: ["v1", "status", "leader"],
name: :status_leader,
method: :get
},
%{
path: ["v1", "status", "peers"],
name: :status_peers,
method: :get
}
]
}
path_segment_to_macro = fn
segment when is_binary(segment) -> segment
{:var, var} -> Macro.var(var, __MODULE__)
end
join_segments = fn(first, second) ->
if second == nil do
first
else
quote do: unquote(second) <> "/" <> unquote(first)
end
end
path_segments_to_macro = fn(segments) ->
segments
|> Enum.map(&(path_segment_to_macro.(&1)))
|> Enum.reduce(nil, &(join_segments.(&1, &2)))
end
endpoints = endpoints.v1
Enum.each(endpoints, fn(endpoint) ->
case endpoint do
%{path: path, name: name, method: :get, args: args} ->
joined_args = Enum.map(args, &({&1, [], __MODULE__}))
def unquote(name)(unquote_splicing(joined_args), params \\ []) do
apply(Consul.HTTP.Client, unquote(:"get!"), [unquote(path_segments_to_macro.(path)), [], [params: params]])
end
%{path: path, name: name, method: :get} ->
def unquote(name)(params \\ []) do
apply(Consul.HTTP.Client, unquote(:"get!"), [unquote(path_segments_to_macro.(path)), [], [params: params]])
end
%{path: path, name: name, method: :delete, args: args} ->
joined_args = Enum.map(args, &({&1, [], __MODULE__}))
def unquote(name)(unquote_splicing(joined_args), params \\ []) do
apply(Consul.HTTP.Client, unquote(:"delete!"), [unquote(path_segments_to_macro.(path)), [], [params: params]])
end
%{path: path, name: name, method: :delete} ->
def unquote(name)(params \\ []) do
apply(Consul.HTTP.Client, unquote(:"delete!"), [unquote(path), [], [params: params]])
end
%{path: path, name: name, method: :put, args: args} ->
joined_args = Enum.map(args, &({&1, [], __MODULE__}))
def unquote(name)(unquote_splicing(joined_args), data \\ "", params \\ []) do
apply(Consul.HTTP.Client, unquote(:"put!"), [unquote(path_segments_to_macro.(path)), data, [], [params: params]])
end
%{path: path, name: name, method: :put} ->
def unquote(name)(data, params \\ []) do
apply(Consul.HTTP.Client, unquote(:"put!"), [unquote(path), data, [], [params: params]])
end
%{path: path, name: name, method: :post, args: args} ->
joined_args = Enum.map(args, &({&1, [], __MODULE__}))
def unquote(name)(data, unquote_splicing(joined_args), params \\ []) do
apply(Consul.HTTP.Client, unquote(:"post!"), [unquote(path_segments_to_macro.(path)), data, [], [params: params]])
end
%{path: path, name: name, method: :post} ->
def unquote(name)(data, params \\ []) do
apply(Consul.HTTP.Client, unquote(:"post!"), [unquote(path), data, [], [params: params]])
end
end
end)
end