Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions config/application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,18 @@ class Application < Rails::Application
config.action_mailer.default_options = { from: 'fake@berkeley.edu' }
config.lit_gtag_id = ENV.fetch('LIT_GTAG_ID', nil)

config.x.servers ||= {}

# These will be removed before merging code
config.x.servers[:geoserver] = ENV.fetch('GEOSERVER_URL', 'https://geoserver-public.ucblib.org/geoserver')
config.x.servers[:secure_geoserver] = ENV.fetch('GEOSERVER_URL', 'https://geoserver-secure.ucblib.org/geoserver')
config.x.servers[:spatial_server] = ENV.fetch('SPATIAL_URL', 'https://spatial.ucblib.org')

# These comments will be removed before merging code
# config.x.servers[:geoserver] = ENV.fetch('GEOSERVER_URL', nil)
# config.x.servers[:secure_geoserver] = ENV.fetch('GEOSERVER_URL', nil)
# config.x.servers[:spatial_server] = ENV.fetch('SPATIAL_URL', nil)

# The Base URL for the generated sitemap
config.x.sitemap.base_url = ENV.fetch('GEODATA_BASE_URL', 'http://localhost:3000')
# Silenced by default to minimize log noise
Expand Down
15 changes: 15 additions & 0 deletions config/initializers/okcomputer.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# initializers/okcomputer.rb
# Health checks configuration

require_relative '../../lib/http_head_check'
require_relative '../../lib/endpoint_url'

OkComputer.logger = Rails.logger
OkComputer.check_in_parallel = true

Expand All @@ -11,3 +14,15 @@
# Requires the ping handler on the solr core (<core>/admin/ping).
core_baseurl = Blacklight.default_index.connection.uri.to_s.chomp('/')
OkComputer::Registry.register 'solr', OkComputer::SolrCheck.new(core_baseurl)

# Perform a Head request to check geoserver endpoint
geoserver_url = EndpointUrl.geoserver(:geoserver)
OkComputer::Registry.register 'geoserver', GeoDataHealthCheck::HttpHeadCheck.new(geoserver_url)

# Perform a Head request to check secure_geoserver endpoint
secure_geoserver_url = EndpointUrl.geoserver(:secure_geoserver)
OkComputer::Registry.register 'secure_geoserver', GeoDataHealthCheck::HttpHeadCheck.new(secure_geoserver_url)

# Perform a Head request to check spatial server endpoint
spatial_server_url = EndpointUrl.spatial_server(:spatial_server)
OkComputer::Registry.register 'spatial_server', GeoDataHealthCheck::HttpHeadCheck.new(spatial_server_url)
13 changes: 13 additions & 0 deletions lib/endpoint_url.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class EndpointUrl
class << self
def geoserver(server_name)
url = Rails.configuration.x.servers[server_name]
url && "#{url.chomp('/')}/wms?service=WMS&request=GetCapabilities"
end

def spatial_server(server_name)
url = Rails.configuration.x.servers[server_name]
url && "#{url.chomp('/')}/public/berkeley-status/data.zip"
end
end
end
43 changes: 43 additions & 0 deletions lib/http_head_check.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
module GeoDataHealthCheck
class HttpHeadCheck < OkComputer::HttpCheck

def check
response = perform_request

if response.is_a?(Net::HTTPOK) || response.is_a?(Net::HTTPRedirection)
mark_message 'Http head check successful.'
else
mark_failure
mark_message "Error: '#{url.request_uri}' http head check responded, but returned unexpeced HTTP status: #{response.code} #{response.class}. Expected 200 Net::HTTPOK."
end
rescue StandardError => e
mark_message "Error: '#{e}'"
mark_failure
end

def perform_request
head_request
rescue Net::OpenTimeout, Net::ReadTimeout => e
msg = "#{url.request_uri} did not respond within #{request_timeout} seconds: "
raise ConnectionFailed, msg + e.message
rescue StandardError => e
raise ConnectionFailed, e.message
end

private

def head_request
Net::HTTP.start(
url.host,
url.port,
use_ssl: url.scheme == 'https',
verify_mode: OpenSSL::SSL::VERIFY_PEER,
open_timeout: request_timeout,
read_timeout: request_timeout
) do |http|
http.head(url.request_uri)
end
end

end
end
3 changes: 3 additions & 0 deletions spec/requests/okcomputer_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
database
database-migrations
solr
geoserver
secure_geoserver
spatial_server
]
end
end