Skip to content

Commit 0c4b921

Browse files
committed
To store checkpoint urls directly in Environment variables
1 parent 331d7ad commit 0c4b921

File tree

4 files changed

+29
-77
lines changed

4 files changed

+29
-77
lines changed

config/application.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ class Application < Rails::Application
2222

2323
config.x.servers ||= {}
2424

25-
config.x.servers[:geoserver] = ENV.fetch('GEOSERVER_URL_FILE', nil)
26-
config.x.servers[:geoserver_secure] = ENV.fetch('GEOSERVER_SECURE_URL_FILE', nil)
27-
config.x.servers[:spatial_server] = ENV.fetch('SPATIAL_URL', nil)
25+
config.x.servers[:geoserver] = ENV.fetch('GEODATA_GEOSERVER_PUBLIC_HEALTHCHECK_URL', nil)
26+
config.x.servers[:geoserver_secure] = ENV.fetch('GEODATA_GEOSERVER_SECURE_HEALTHCHECK_URL', nil)
27+
config.x.servers[:spatial_server] = ENV.fetch('GEODATA_SPATIAL_HEALTHCHECK_URL', nil)
2828

2929
# The Base URL for the generated sitemap
3030
config.x.sitemap.base_url = ENV.fetch('GEODATA_BASE_URL', 'http://localhost:3000')

lib/endpoint_url.rb

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
require 'uri'
21
class EndpointUrl
32
class << self
43
def geoserver(server_name)
@@ -7,30 +6,14 @@ def geoserver(server_name)
76
end
87

98
def spatial_server(server_name)
10-
url = Rails.configuration.x.servers[server_name]
9+
url = get_url(server_name)
1110
url && "#{url.sub(%r{/+\z}, '')}/public/berkeley-status/data.zip"
1211
end
1312

1413
private
1514

1615
def get_url(server_name)
17-
secret_file = Rails.configuration.x.servers[server_name]
18-
raise Errno::ENOENT if secret_file.nil?
19-
20-
url = File.read(secret_file).chomp
21-
safe_url(url)
22-
rescue StandardError => e
23-
Rails.logger.error "[EndpointUrl] Failed to read #{server_name}'s URL from secrets file.#{e.message}"
24-
nil
25-
end
26-
27-
def safe_url(url)
28-
return if url.nil?
29-
30-
uri = URI(url)
31-
uri.user = nil
32-
uri.password = nil
33-
uri.to_s.sub(%r{/rest/?$}, '')
16+
Rails.configuration.x.servers[server_name]
3417
end
3518
end
3619
end

lib/http_head_check.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def perform_request
2929
rescue Net::OpenTimeout, Net::ReadTimeout => e
3030
raise ConnectionFailed, "#{url} did not respond within #{request_timeout} seconds: #{e.message}"
3131
rescue ArgumentError => e
32-
raise ConnectionFailed, "Invalid URL format for '#{url}', please check log; #{e.class}: #{e.message}"
32+
raise ConnectionFailed, "Invalid URL format for '#{url}': #{e.class}: #{e.message}"
3333
rescue StandardError => e
3434
raise ConnectionFailed, e.message
3535
end

spec/lib/endpoint_url_spec.rb

Lines changed: 23 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,40 @@
11
require 'rails_helper'
2+
require_relative '../../lib/endpoint_url'
3+
4+
RSpec.describe EndpointUrl do
5+
around do |example|
6+
original = Rails.configuration.x.servers.dup
7+
Rails.configuration.x.servers.clear
8+
example.run
9+
Rails.configuration.x.servers.clear
10+
Rails.configuration.x.servers.merge!(original)
11+
end
212

3-
describe EndpointUrl do
413
describe '.geoserver' do
5-
context 'when server is configured and file exists' do
6-
let(:secret_file) { 'tmp/test_secret.txt' }
7-
8-
before do
9-
allow(Rails.configuration.x.servers).to receive(:[]).with('test_server').and_return(secret_file)
10-
File.write(secret_file, 'https://user:pass@example.com/rest/')
11-
end
14+
it 'builds a GetCapabilities URL without duplicate slashes' do
15+
Rails.configuration.x.servers[:geoserver] = 'https://example.com/geoserver//'
1216

13-
after do
14-
FileUtils.rm_f(secret_file)
15-
end
17+
result = described_class.geoserver(:geoserver)
1618

17-
it 'returns WMS endpoint URL' do
18-
result = EndpointUrl.geoserver('test_server')
19-
expect(result).to eq('https://example.com/wms?service=WMS&request=GetCapabilities')
20-
end
19+
expect(result).to eq('https://example.com/geoserver/wms?service=WMS&request=GetCapabilities')
2120
end
2221

23-
context 'when file does not exist' do
24-
before do
25-
allow(Rails.configuration.x.servers).to receive(:[]).with('test_server').and_return('nonexistent_file.txt')
26-
end
27-
28-
it 'logs error and returns nil' do
29-
expect(Rails.logger).to receive(:error).with("[EndpointUrl] Failed to read test_server's URL from secrets file.No such file or directory @ rb_sysopen - nonexistent_file.txt")
30-
result = EndpointUrl.geoserver('test_server')
31-
expect(result).to be_nil
32-
end
33-
end
34-
35-
context 'when server is not configured' do
36-
before do
37-
allow(Rails.configuration.x.servers).to receive(:[]).with('missing_server').and_return(nil)
38-
end
39-
40-
it 'returns nil without logging error' do
41-
result = EndpointUrl.geoserver('missing_server')
42-
expect(result).to be_nil
43-
end
22+
it 'returns nil when server is not configured' do
23+
expect(described_class.geoserver(:unknown)).to be_nil
4424
end
4525
end
4626

4727
describe '.spatial_server' do
48-
context 'when server is configured' do
49-
before do
50-
allow(Rails.configuration.x.servers).to receive(:[]).with('test_server').and_return('https://example.com')
51-
end
28+
it 'builds the status data URL trimming trailing slashes' do
29+
Rails.configuration.x.servers[:spatial_server] = 'https://example.com/status/'
5230

53-
it 'returns spatial server data zip endpoint URL' do
54-
result = EndpointUrl.spatial_server('test_server')
55-
expect(result).to eq('https://example.com/public/berkeley-status/data.zip')
56-
end
57-
end
31+
result = described_class.spatial_server(:spatial_server)
5832

59-
context 'when server is not configured' do
60-
before do
61-
allow(Rails.configuration.x.servers).to receive(:[]).with('missing_server').and_return(nil)
62-
end
33+
expect(result).to eq('https://example.com/status/public/berkeley-status/data.zip')
34+
end
6335

64-
it 'returns nil' do
65-
result = EndpointUrl.spatial_server('missing_server')
66-
expect(result).to be_nil
67-
end
36+
it 'returns nil when server is not configured' do
37+
expect(described_class.spatial_server(:missing)).to be_nil
6838
end
6939
end
70-
7140
end

0 commit comments

Comments
 (0)