Class: InsightsCloud::Api::MachineTelemetriesController

Inherits:
Api::V2::BaseController
  • Object
show all
Includes:
CandlepinCache, ClientAuthentication
Defined in:
app/controllers/insights_cloud/api/machine_telemetries_controller.rb

Instance Method Summary collapse

Methods included from CandlepinCache

#candlepin_id_cert, #cp_owner_id, #upstream_owner

Methods included from ClientAuthentication

#authorize, #client_authorized?, #subscribed_host_by_uuid, #valid_machine_user?

Instance Method Details

#assign_header(res, cloud_res, header, transform) ⇒ Object



67
68
69
70
71
72
# File 'app/controllers/insights_cloud/api/machine_telemetries_controller.rb', line 67

def assign_header(res, cloud_res, header, transform)
  header_content = cloud_res.headers[header]
  return unless header_content
  new_header = transform ? header.to_s.tr('_', '-') : header.to_s
  res.headers[new_header] = header_content
end

#branch_infoObject



57
58
59
60
61
62
63
64
65
# File 'app/controllers/insights_cloud/api/machine_telemetries_controller.rb', line 57

def branch_info
  payload = nil

  User.as_anonymous_admin do
    payload = ForemanRhCloud::BranchInfo.new.generate(@uuid, @host, @branch_id, request.host).to_json
  end

  render :json => payload
end

#forward_requestObject

The method that “proxies” requests over to Cloud



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/insights_cloud/api/machine_telemetries_controller.rb', line 17

def forward_request
  certs = candlepin_id_cert @organization
  @cloud_response = ::ForemanRhCloud::CloudRequestForwarder.new.forward_request(request, controller_name, @branch_id, certs)

  if @cloud_response.code == 401
    return render json: {
      :message => 'Authentication to the Insights Service failed.',
      :headers => {},
    }, status: :bad_gateway
  end

  if @cloud_response.code >= 300
    return render json: {
      :message => 'Cloud request failed',
      :headers => {},
      :response => @cloud_response,
    }, status: @cloud_response.code
  end

  # Append redhat-specific headers
  @cloud_response.headers.each do |key, value|
    assign_header(response, @cloud_response, key, false) if key.to_s.start_with?('x_rh_')
  end
  # Append general headers
  assign_header(response, @cloud_response, :x_resource_count, true)
  headers[Rack::ETAG] = @cloud_response.headers[:etag]

  if @cloud_response.headers[:content_disposition]
    # If there is a Content-Disposition header, it means we are forwarding binary data, send the raw data with proper
    # content type
    send_data @cloud_response, disposition: @cloud_response.headers[:content_disposition], type: @cloud_response.headers[:content_type]
  elsif @cloud_response.headers[:content_type] =~ /zip/
    # if there is no Content-Disposition, but the content type is binary according the content type,
    # forward the request as binry too
    send_data @cloud_response, type: @cloud_response.headers[:content_type]
  else
    render json: @cloud_response, status: @cloud_response.code
  end
end