Allow the API to be taken offline completely as well as being put into
authorTom Hughes <tom@compton.nu>
Thu, 20 Sep 2007 23:51:11 +0000 (23:51 +0000)
committerTom Hughes <tom@compton.nu>
Thu, 20 Sep 2007 23:51:11 +0000 (23:51 +0000)
readonly mode,

app/controllers/amf_controller.rb
app/controllers/api_controller.rb
app/controllers/application.rb
app/controllers/node_controller.rb
app/controllers/old_node_controller.rb
app/controllers/old_segment_controller.rb
app/controllers/old_way_controller.rb
app/controllers/segment_controller.rb
app/controllers/swf_controller.rb
app/controllers/way_controller.rb
config/environment.rb

index 3ba91fb8cdc7294e156c104c917aab7a6e3c738b..ea32acec8ddbcb788c8755df1dec42143156096d 100644 (file)
@@ -2,7 +2,7 @@ class AmfController < ApplicationController
   require 'stringio'
 
   session :off
-  before_filter :check_availability
+  before_filter :check_write_availability
 
   # to log:
   # RAILS_DEFAULT_LOGGER.error("Args: #{args[0]}, #{args[1]}, #{args[2]}, #{args[3]}")
index b39cbddf5e639e4f49fcf8a26be3ff0360f64165..3555260d283bfb5498cf50ce95559cc67bce8ca3 100644 (file)
@@ -1,6 +1,7 @@
 class ApiController < ApplicationController
 
   session :off
+  before_filter :check_read_availability, :except => [:capabilities]
   after_filter :compress_output
 
   #COUNT is the number of map requests to allow before exiting and starting a new process
index d22ed5c9f5d17154815873d93c238def19e6fbd5..acb2f916291ab02aced0486022b4688c2b109677 100644 (file)
@@ -39,8 +39,16 @@ class ApplicationController < ActionController::Base
     end 
   end 
 
-  def check_availability
-    if API_READONLY
+  def check_read_availability
+    if API_STATUS == :offline
+      response.headers['Error'] = "Database offline for maintenance"
+      render :nothing => true, :status => :service_unavailable
+      return false
+    end
+  end
+
+  def check_write_availability
+    if API_STATUS == :offline or API_STATUS == :readonly
       response.headers['Error'] = "Database offline for maintenance"
       render :nothing => true, :status => :service_unavailable
       return false
index 4e2a9b7f22a9f532303eecdd8098928bb36f5f19..0a3897fe9986da7318dafd557c84949a91b8020e 100644 (file)
@@ -3,7 +3,8 @@ class NodeController < ApplicationController
 
   session :off
   before_filter :authorize, :only => [:create, :update, :delete]
-  before_filter :check_availability, :only => [:create, :update, :delete]
+  before_filter :check_write_availability, :only => [:create, :update, :delete]
+  before_filter :check_read_availability, :except => [:create, :update, :delete]
   after_filter :compress_output
 
   def create
index 0337cb2cffcec604e26f7090eff565234680c998..e27898336361832ed193c9d1b3c8de04ddb14a41 100644 (file)
@@ -2,6 +2,7 @@ class OldNodeController < ApplicationController
   require 'xml/libxml'
 
   session :off
+  before_filter :check_read_availability
   after_filter :compress_output
 
   def history
index 2d48fb5b9489547e6d8b423d4221990a20f81461..410760f2b51938224d197c176ef119948f5a05c1 100644 (file)
@@ -2,6 +2,7 @@ class OldSegmentController < ApplicationController
   require 'xml/libxml'
 
   session :off
+  before_filter :check_read_availability
   after_filter :compress_output
 
   def history
index f10e0d2f0193e0550932e0d15396369fa2939f52..e72c97a0078022650a8484d08c070b7d67fed6c7 100644 (file)
@@ -2,6 +2,7 @@ class OldWayController < ApplicationController
   require 'xml/libxml'
 
   session :off
+  before_filter :check_read_availability
   after_filter :compress_output
 
   def history
index b99f7460f729ed229eca3f4bd9ef9a5d8e6671f9..b547d5cd15489d8f02030e1fa8cef6987f091729 100644 (file)
@@ -3,7 +3,8 @@ class SegmentController < ApplicationController
 
   session :off
   before_filter :authorize, :only => [:create, :update, :delete]
-  before_filter :check_availability, :only => [:create, :update, :delete]
+  before_filter :check_write_availability, :only => [:create, :update, :delete]
+  before_filter :check_read_availability, :except => [:create, :update, :delete]
   after_filter :compress_output
 
   def create
index 2200ab6525bc4865b427aaeeab2104730150ece9..084a7d57a181692db0b34343b1a68f3e90161a74 100644 (file)
@@ -1,6 +1,6 @@
 class SwfController < ApplicationController
        session :off
-       before_filter :check_availability
+       before_filter :check_read_availability
 
 # to log:
 # RAILS_DEFAULT_LOGGER.error("Args: #{args[0]}, #{args[1]}, #{args[2]}, #{args[3]}")
index 935ff3a72f9e862124f3d6de3a72a569f3cbf54a..d569991af109469c2eee4c39dde9dd189bbf5e1a 100644 (file)
@@ -3,7 +3,8 @@ class WayController < ApplicationController
 
   session :off
   before_filter :authorize, :only => [:create, :update, :delete]
-  before_filter :check_availability, :only => [:create, :update, :delete]
+  before_filter :check_write_availability, :only => [:create, :update, :delete]
+  before_filter :check_read_availability, :except => [:create, :update, :delete]
   after_filter :compress_output
 
   def create
index 003a7b832ce1e6ca468281de77aa4e47804d65d4..e58631901728abae9966c48ddf0dedc4062a22f2 100644 (file)
@@ -77,8 +77,9 @@ end
 #   inflect.uncountable %w( fish sheep )
 # end
 
-# Set to true to put the API in read-only mode
-API_READONLY = false
+# Set to :readonly to put the API in read-only mode or :offline to
+# take it completely offline
+API_STATUS = :online
 
 # Include your application configuration below
 SERVER_URL = ENV['OSM_SERVER_URL'] || 'www.openstreetmap.org'