Class: TensorBuzz::Api::Transport

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

Instance Method Summary collapse

Constructor Details

#initialize(configuration) ⇒ Transport

Returns a new instance of Transport.



12
13
14
# File 'lib/tensorbuzz/api/transport.rb', line 12

def initialize(configuration)
  @configuration = configuration
end

Instance Method Details

#post(payload) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/tensorbuzz/api/transport.rb', line 16

def post(payload)
  uri = URI(configuration.post_url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = uri.scheme == 'https'
  http.open_timeout = configuration.open_timeout
  http.read_timeout = configuration.read_timeout

  request = Net::HTTP::Post.new(uri.request_uri)
  request['Content-Type'] = 'application/json'
  request.body = JSON.generate(payload)
  response = http.request(request)

  raise ReportingError, "TensorBuzz rejected the report with HTTP #{response.code}" unless response.is_a?(Net::HTTPSuccess)

  JSON.parse(response.body)
rescue JSON::ParserError => e
  raise ReportingError, "TensorBuzz returned invalid JSON: #{e.message}"
rescue ReportingError
  raise
rescue StandardError => e
  raise ReportingError, "Could not report to TensorBuzz: #{e.message}"
end