Packages

Translate CloudFoundry BBS events and endpoints into rabbitmq messages.

Current section

Files

Jump to
bbsmq lib bbs_http_client bbs_http_client.ex
Raw

lib/bbs_http_client/bbs_http_client.ex

defmodule BBSHTTPClient do
@ping_path "/v1/ping"
@cell_list_path "/v1/cells/list.r1"
@domain_list_path "/v1/domains/list"
@domain_upsert_path "/v1/domains/upsert"
@actual_lrp_groups_path "/v1/actual_lrp_groups/list"
@actual_lrp_groups_by_process_guid_path "/v1/actual_lrp_groups/list_by_process_guid"
@actual_lrp_groups_by_process_guid_and_index_path "/v1/actual_lrp_groups/get_by_process_guid_and_index"
@desired_lrps_path "/v1/desired_lrps/list.r1"
@desired_lrps_by_process_guid_path "/v1/desired_lrps/get_by_process_guid.r1"
@desired_lrp_scheduling_infos_path "/v1/desired_lrp_scheduling_infos/list"
@desire_lrp_path "/v1/desired_lrp/desire"
@update_desired_lrp_path "/v1/desired_lrp/update"
@remove_desired_lrp_path "/v1/desired_lrp/remove"
def init do
HTTPoison.start
end
def ping(bbs_address, _ \\ "") do
request(bbs_address <> @ping_path, BBSModels.PingResponse)
end
def cells(bbs_address, _ \\ "") do
get_request(bbs_address <> @cell_list_path, BBSModels.CellsResponse)
end
# DomainClient
def domains(bbs_address, _ \\ "") do
request(bbs_address <> @domain_list_path, BBSModels.DomainsResponse)
end
def upsert_domain(bbs_address, upsert_domain_request) do
url = bbs_address <> @domain_upsert_path
request(url, BBSModels.UpsertDomainResponse, upsert_domain_request)
end
# ActualLRPClient
def actual_lrp_groups(bbs_address, actual_lrp_groups_request \\ []) do
url = bbs_address <> @actual_lrp_groups_path
request(url, BBSModels.ActualLRPGroupsResponse, actual_lrp_groups_request)
end
def actual_lrp_groups_by_process_guid(bbs_address, actual_lrp_groups_by_process_guid_request) do
url = bbs_address <> @actual_lrp_groups_by_process_guid_path
request(url, BBSModels.ActualLRPGroupsResponse, actual_lrp_groups_by_process_guid_request)
end
def actual_lrp_groups_by_process_guid_and_index(bbs_address, actual_lrp_groups_by_process_guid_and_index_request) do
url = bbs_address <> @actual_lrp_groups_by_process_guid_and_index_path
request(url, BBSModels.ActualLRPGroupResponse, actual_lrp_groups_by_process_guid_and_index_request)
end
# DesiredLRPClient
def desired_lrps(bbs_address, desired_lrps_request \\ "") do
request(bbs_address <> @desired_lrps_path, BBSModels.DesiredLRPsResponse, desired_lrps_request)
end
def desired_lrp_by_process_guid(bbs_address, desired_lrp_by_process_guid_request) do
url = bbs_address <> @desired_lrps_by_process_guid_path
request(url, BBSModels.DesiredLRPResponse, desired_lrp_by_process_guid_request)
end
def desired_lrp_scheduling_infos(bbs_address, desired_lrps_request) do
url = bbs_address <> @desired_lrp_scheduling_infos_path
request(url, BBSModels.DesiredLRPSchedulingInfosResponse, desired_lrps_request)
end
def desire_lrp(bbs_address, desired_lrp_request) do
url = bbs_address <> @desire_lrp_path
request(url, BBSModels.DesiredLRPLifecycleResponse, desired_lrp_request)
end
def update_desired_lrp(bbs_address, update_desired_lrp_request) do
url = bbs_address <> @update_desired_lrp_path
request(url, BBSModels.DesiredLRPLifecycleResponse, update_desired_lrp_request)
end
def remove_desired_lrp(bbs_address, remove_desired_lrp_request) do
url = bbs_address <> @remove_desired_lrp_path
request(url, BBSModels.DesiredLRPLifecycleResponse, remove_desired_lrp_request)
end
defp request(url, processor, body \\ "") do
case HTTPoison.post url, body do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
{:ok, body, processor}
{:ok, %HTTPoison.Response{status_code: 404}} ->
{:error, "Not found :("}
{:error, %HTTPoison.Error{reason: reason}} ->
{:error, reason}
end
end
defp protobuf_request(url, processor, body) do
unencoded_request_body = processor.new(body)
encoded_request_body = processor.encode(unencoded_request_body)
request url, encoded_request_body
end
defp get_request(url, processor) do
case HTTPoison.get url do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
{:ok, body, processor}
{:ok, %HTTPoison.Response{status_code: 404}} ->
{:error, "Not found :("}
{:error, %HTTPoison.Error{reason: reason}} ->
{:error, reason}
end
end
end