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"
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
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