Class: Pinot::JsonHttpTransport

Inherits:
Object
  • Object
show all
Defined in:
lib/pinot/transport.rb

Constant Summary collapse

DEFAULT_HEADERS =
{
  "Content-Type" => "application/json; charset=utf-8"
}.freeze

Instance Method Summary collapse

Constructor Details

#initialize(http_client:, extra_headers: {}, timeout_ms: nil) ⇒ JsonHttpTransport

Returns a new instance of JsonHttpTransport.



45
46
47
48
49
# File 'lib/pinot/transport.rb', line 45

def initialize(http_client:, extra_headers: {}, timeout_ms: nil)
  @http_client = http_client
  @extra_headers = extra_headers
  @timeout_ms = timeout_ms
end

Instance Method Details

#execute(broker_address, request) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/pinot/transport.rb', line 51

def execute(broker_address, request)
  url = build_url(broker_address, request.query_format)
  body = build_body(request)
  headers = DEFAULT_HEADERS
    .merge(@extra_headers)
    .merge("X-Correlation-Id" => SecureRandom.uuid)

  resp = @http_client.post(url, body: body, headers: headers)

  unless resp.code.to_i == 200
    raise "http exception with HTTP status code #{resp.code}"
  end

  begin
    BrokerResponse.from_json(resp.body)
  rescue JSON::ParserError => e
    raise e.message
  end
end