defmodule CoreUtils.AMQPServiceUtils do alias GenAMQP.Client alias CoreUtils.StructUtil require Logger def publish(conn_name, route, data) do payload = data |> StructUtil.nested_parse() |> Poison.encode!() Client.publish_with_conn(conn_name , "", route, payload) end def call(conn_name, route, data, opts \\ []) do payload = data |> StructUtil.nested_parse() |> Poison.encode!() case Client.call_with_conn(conn_name, "", route, payload, opts) do {:error, :timeout} -> message = Poison.encode!(%{ error: "TIMEOUT", route: route, request_id: Process.get(:request_id), payload: payload }) CoreUtils.ErrorHandler.sentry_report(message, []) Logger.warn("Timeout in microservice -#{route}- \n with payload: \n#{inspect(payload)}") %{"status" => "error", "code" => 3, "message" => "Microservice request timeout"} {:error, :amqp_conn} -> message = Poison.encode!(%{route: route, payload: payload}) [message: message, level: :warn] |> Sentry.Event.create_event() |> Sentry.send_event() %{"status" => "error", "code" => 4, "message" => "Rabbit connection could not be opened"} payload -> Poison.decode!(payload) end end end