Class: ForemanRhCloud::Ping

Inherits:
Object
  • Object
show all
Extended by:
CertAuth
Defined in:
app/models/foreman_rh_cloud/ping.rb

Constant Summary collapse

OK_RETURN_CODE =
'ok'.freeze
FAIL_RETURN_CODE =
'FAIL'.freeze

Class Method Summary collapse

Methods included from CertAuth

cert_auth_available?, execute_cloud_request, foreman_certificate

Methods included from InsightsCloud::CandlepinCache

#candlepin_id_cert, #cp_owner_id, #upstream_owner

Methods included from CloudRequest

#execute_cloud_request

Class Method Details

.exception_watch(result, &blk) ⇒ Object



31
32
33
# File 'app/models/foreman_rh_cloud/ping.rb', line 31

def exception_watch(result, &blk)
  ::Katello::Ping.exception_watch(result, &blk)
end

.iop_smart_proxy_urlObject



9
10
11
# File 'app/models/foreman_rh_cloud/ping.rb', line 9

def iop_smart_proxy_url
  ForemanRhCloud.iop_smart_proxy&.url
end

.loggerObject



66
67
68
# File 'app/models/foreman_rh_cloud/ping.rb', line 66

def logger
  Rails.logger
end

.pingObject



35
36
37
38
# File 'app/models/foreman_rh_cloud/ping.rb', line 35

def ping
  return {} unless ForemanRhCloud.with_iop_smart_proxy?
  ping_services
end

.ping!Object



40
41
42
43
44
45
46
47
48
49
50
51
# File 'app/models/foreman_rh_cloud/ping.rb', line 40

def ping!
  result = ping_services

  if result[:status] != OK_RETURN_CODE
    failed_names = result[:services].reject do |_name, details|
      details[:status] == OK_RETURN_CODE
    end
    raise "The following services have not been started or are reporting errors: #{failed_names.keys.join(', ')}"
  end

  result
end

.ping_service(service_name, service_result_hash) ⇒ Object



84
85
86
87
88
# File 'app/models/foreman_rh_cloud/ping.rb', line 84

def ping_service(service_name, service_result_hash)
  exception_watch(service_result_hash) do
    ping_url(service_urls[service_name])
  end
end

.ping_servicesObject



53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/models/foreman_rh_cloud/ping.rb', line 53

def ping_services
  result = {}
  services.each do |service|
    result[service] = {}
    ping_service(service, result[service])
  end

  # set overall status result code
  result = { :services => result }
  result[:status] = result[:services].each_value.any? { |v| v[:status] == FAIL_RETURN_CODE } ? FAIL_RETURN_CODE : OK_RETURN_CODE
  result
end

.ping_url(url) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'app/models/foreman_rh_cloud/ping.rb', line 70

def ping_url(url)
  response = execute_cloud_request(
    method: :get,
    url: url
  )
  return {} if response.empty?
  begin
    result = JSON.parse(response).with_indifferent_access
  rescue JSON::ParserError, NoMethodError
    result = { :response => response.body&.strip }
  end
  result
end

.service_urlsObject



13
14
15
16
17
18
# File 'app/models/foreman_rh_cloud/ping.rb', line 13

def service_urls
  {
    :advisor => "#{iop_smart_proxy_url}/api/insights/v1/status/live/",
    :vulnerability => "#{iop_smart_proxy_url}/api/vulnerability/v1/apistatus",
  }
end

.servicesObject



20
21
22
# File 'app/models/foreman_rh_cloud/ping.rb', line 20

def services
  service_urls.keys
end

.statusObject



24
25
26
27
28
29
# File 'app/models/foreman_rh_cloud/ping.rb', line 24

def status
  {
    iop_smart_proxy_exists: ForemanRhCloud.with_iop_smart_proxy?,
    timeUTC: Time.zone.now.getutc,
  }
end