Skip to content

Commit b8fed47

Browse files
committed
consolidated
1 parent cfa5c6a commit b8fed47

6 files changed

Lines changed: 122 additions & 71 deletions

File tree

config/application.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,12 @@ class Application < Rails::Application
2525

2626
config.x.servers ||= {}
2727

28+
# These will be removed before merging code
29+
config.x.servers[:geoserver] = ENV.fetch('GEOSERVER_URL', 'https://geoserver-public.ucblib.org/geoserver')
30+
config.x.servers[:secure_geoserver] = ENV.fetch('GEOSERVER_URL', 'https://geoserver-secure.ucblib.org/geoserver')
31+
config.x.servers[:spatial_server] = ENV.fetch('SPATIAL_URL', 'https://spatial.ucblib.org')
32+
33+
# These comments will be removed before merging code
2834
# config.x.servers[:geoserver] = ENV.fetch('GEOSERVER_URL', nil)
2935
# config.x.servers[:secure_geoserver] = ENV.fetch('GEOSERVER_URL', nil)
3036
# config.x.servers[:spatial_server] = ENV.fetch('SPATIAL_URL', nil)

config/initializers/okcomputer.rb

Lines changed: 10 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# initializers/okcomputer.rb
22
# Health checks configuration
3+
require_relative '../../lib/http_client'
4+
require_relative '../../lib/http_head_check'
5+
require_relative '../../lib/server_check'
36

47
OkComputer.logger = Rails.logger
58
OkComputer.check_in_parallel = true
@@ -12,75 +15,11 @@
1215
core_baseurl = Blacklight.default_index.connection.uri.to_s.chomp('/')
1316
OkComputer::Registry.register 'solr', OkComputer::SolrCheck.new(core_baseurl)
1417

15-
def check_geoserver(server_name)
16-
url = host_url(server_name)
17-
# geoserver_url = url && "#{url.chomp('/')}/wms?service=WMS&request=GetCapabilities"
18-
geoserver_url = 'https://geoservices.lib.berkeley.edu/geoserver/UCB/wms?service=WMS&version=1.1.0&request=GetMap&layers=UCB%3Af7b68n&bbox=-122.836485%2C37.808713%2C-122.409565%2C38.190532&width=768&height=686&srs=EPSG%3A4326&styles=&format=format=image/png'
19-
OkComputer::Registry.register clr_name(server_name), HttpHeadCheck.new(geoserver_url)
20-
end
18+
SERVER_NAME_GEOSERVER = 'geoserver'.freeze
19+
SERVER_NAME_SECUREGEOSERVER = 'secure_geoserver'.freeze
20+
SERVER_NAME_SPATIAL = 'spatial_server'.freeze
2121

22-
def check_spatial_server(server_name, type)
23-
message = "#{type} #{clr_name(server_name)}"
24-
url = host_url(server_name)
25-
spatial_url = url && "#{url.chomp('/')}/#{type}/berkeley-status/data.zip"
26-
OkComputer::Registry.register message, HttpHeadCheck.new(spatial_url)
27-
end
28-
29-
def host_url(server_name)
30-
Rails.configuration.x.servers[server_name.to_sym]
31-
end
32-
33-
def clr_name(server_name)
34-
server_name.gsub('_', ' ')
35-
end
36-
# geoserver_url = geoserver_capabilty_url(Rails.application.config.geoserver_url)
37-
# OkComputer::Registry.register 'Check public geoserver', HttpHeadCheck.new(geoserver_url)
38-
# pubilc_download_url = spatial_download_url(Rails.application.config.spatialserver_url)
39-
# OkComputer::Registry.register 'Check public download', HttpHeadCheck.new(pubilc_download_url)
40-
# secure_download_url = spatial_download_url(Rails.application.config.spatialserver_url, 'UCB')
41-
# OkComputer::Registry.register 'Check public download', HttpHeadCheck.new(secure_download_url)
42-
43-
class HttpHeadCheck < OkComputer::Check
44-
ConnectionFailed = Class.new(StandardError)
45-
attr_accessor :url
46-
47-
def initialize(url)
48-
self.url = url
49-
end
50-
51-
def check
52-
return skip_check unless url
53-
54-
response = perform_http_head_request
55-
if response.is_a?(Net::HTTPOK)
56-
mark_message 'Check succeeded.'
57-
else
58-
mark_failure
59-
mark_message "Error: Http head check endpoint responded, but returned unexpeced HTTP status: #{response.code} #{response.class}. Expected 200 Net::HTTPOK."
60-
end
61-
rescue StandardError => e
62-
mark_message "Error: '#{e}'"
63-
mark_failure
64-
end
65-
66-
private
67-
68-
def perform_http_head_request
69-
uri = URI(url)
70-
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https', verify_mode: OpenSSL::SSL::VERIFY_PEER) do |http|
71-
http.head(uri.request_uri)
72-
end
73-
rescue StandardError => e
74-
raise ConnectionFailed, e
75-
end
76-
77-
def skip_check
78-
mark_failure
79-
mark_message 'No URL configured; health check was skipped...'
80-
end
81-
end
82-
83-
check_geoserver 'geoserver'
84-
# check_geoserver 'secure_geoserver'
85-
# check_spatial_server 'spatial_server', 'public'
86-
# check_spatial_server 'spatial_server', 'UCB'
22+
ServerCheck.geoserver SERVER_NAME_GEOSERVER
23+
ServerCheck.geoserver SERVER_NAME_SECUREGEOSERVER
24+
ServerCheck.spatial_server SERVER_NAME_SPATIAL, 'public'
25+
ServerCheck.spatial_server SERVER_NAME_SPATIAL, 'UCB'

lib/http_client.rb

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
require 'net/http'
2+
require 'uri'
3+
require 'openssl'
4+
5+
module GeoDataHealthCheck
6+
class HttpClient
7+
ConnectionFailed = Class.new(StandardError)
8+
9+
class << self
10+
def request(method, url, timeout: 5)
11+
uri = URI(url)
12+
13+
Net::HTTP.start(
14+
uri.host,
15+
uri.port,
16+
use_ssl: uri.scheme == 'https',
17+
verify_mode: OpenSSL::SSL::VERIFY_PEER,
18+
open_timeout: timeout,
19+
read_timeout: timeout # or just skip checking reading timeout?
20+
) do |http|
21+
req = build_request(method, uri)
22+
http.request(req)
23+
end
24+
rescue Net::OpenTimeout, Net::ReadTimeout => e
25+
msg = "Http #{method} #{url} did not respond within #{request_timeout} seconds: "
26+
raise ConnectionFailed, msg + e.message
27+
rescue StandardError => e
28+
raise ConnectionFailed, e.message
29+
end
30+
31+
def build_request(method, uri)
32+
req_method = method.downcase.to_sym
33+
raise ConnectionFailed, "Incorrect http request method: #{method}" unless %i[head get].include?(req_method)
34+
35+
req_klass = method == :head ? Net::HTTP::Head : Net::HTTP::Get
36+
req_klass.new(uri)
37+
end
38+
end
39+
40+
end
41+
end

lib/http_head_check.rb

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
module GeoDataHealthCheck
2+
class HttpHeadCheck < OkComputer::Check
3+
attr_accessor :url, :request_timeout
4+
5+
def initialize(url, request_timeout = 5)
6+
self.url = url
7+
self.request_timeout = request_timeout
8+
end
9+
10+
def check
11+
return skip_check unless url
12+
13+
response = HttpClient.request(
14+
:head,
15+
url,
16+
timeout: request_timeout
17+
)
18+
# sleep 14
19+
if response.is_a?(Net::HTTPOK) || response.is_a?(Net::HTTPRedirection)
20+
mark_message 'Check succeeded.'
21+
else
22+
mark_failure
23+
mark_message "Error: Http head check endpoint responded, but returned unexpeced HTTP status: #{response.code} #{response.class}. Expected 200 Net::HTTPOK."
24+
end
25+
rescue StandardError => e
26+
mark_message "Error: '#{e}'"
27+
mark_failure
28+
end
29+
30+
private
31+
32+
def skip_check
33+
mark_failure
34+
mark_message 'No URL configured; health check was skipped...'
35+
end
36+
end
37+
end

lib/server_check.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class ServerCheck
2+
class << self
3+
def geoserver(server_name)
4+
url = host_url(server_name)
5+
geoserver_url = url && "#{url.chomp('/')}/wms?service=WMS&request=GetCapabilities"
6+
OkComputer::Registry.register clr_msg(server_name), GeoDataHealthCheck::HttpHeadCheck.new(geoserver_url)
7+
end
8+
9+
def spatial_server(server_name, type)
10+
msg = "#{type} #{server_name}"
11+
url = host_url(server_name)
12+
spatial_url = url && "#{url.chomp('/')}/#{type}/berkeley-status/data.zip"
13+
OkComputer::Registry.register clr_msg(msg), GeoDataHealthCheck::HttpHeadCheck.new(spatial_url)
14+
end
15+
16+
def host_url(server_name)
17+
Rails.configuration.x.servers[server_name.to_sym]
18+
end
19+
20+
def clr_msg(msg)
21+
msg.downcase.strip.gsub(/\s+/, '_')
22+
end
23+
end
24+
end

spec/requests/okcomputer_spec.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
database
1515
database-migrations
1616
solr
17+
geoserver
18+
secure_geoserver
19+
public_spatial_server
20+
ucb_spatial_server
1721
]
1822
end
1923
end

0 commit comments

Comments
 (0)