Added database, API and GPX status to capabilities.

This commit is contained in:
Matt Amos 2013-04-01 20:24:16 +01:00 committed by Tom Hughes
parent 10a7e1a5f0
commit 3822e8de77
3 changed files with 41 additions and 4 deletions

View file

@ -285,7 +285,12 @@ class ApiController < ApplicationController
timeout = XML::Node.new 'timeout'
timeout['seconds'] = API_TIMEOUT.to_s
api << timeout
status = XML::Node.new 'status'
status['database'] = database_status.to_s
status['api'] = api_status.to_s
status['gpx'] = gpx_status.to_s
api << status
doc.root << api
render :text => doc.to_s, :content_type => "text/xml"

View file

@ -206,20 +206,49 @@ class ApplicationController < ActionController::Base
end
def check_api_readable
if STATUS == :database_offline or STATUS == :api_offline
if api_status == :offline
report_error "Database offline for maintenance", :service_unavailable
return false
end
end
def check_api_writable
if STATUS == :database_offline or STATUS == :database_readonly or
STATUS == :api_offline or STATUS == :api_readonly
unless api_status == :online
report_error "Database offline for maintenance", :service_unavailable
return false
end
end
def database_status
if STATUS == :database_offline
:offline
elsif STATUS == :database_readonly
:readonly
else
:online
end
end
def api_status
status = database_status
if status == :online
if STATUS == :api_offline
status = :offline
elsif STATUS == :api_readonly
status = :readonly
end
end
return status
end
def gpx_status
status = database_status
if status == :online
status = :offline if STATUS == :gpx_offline
end
return status
end
def require_public_data
unless @user.data_public?
report_error "You must make your edits public to upload new data", :forbidden

View file

@ -299,6 +299,9 @@ class ApiControllerTest < ActionController::TestCase
assert_select "area[maximum=#{MAX_REQUEST_AREA}]", :count => 1
assert_select "tracepoints[per_page=#{TRACEPOINTS_PER_PAGE}]", :count => 1
assert_select "changesets[maximum_elements=#{Changeset::MAX_ELEMENTS}]", :count => 1
assert_select "status[database=online]", :count => 1
assert_select "status[api=online]", :count => 1
assert_select "status[gpx=online]", :count => 1
end
end
end