Add a flag to allow the API to be placed in read-only mode.
authorTom Hughes <tom@compton.nu>
Thu, 26 Jul 2007 17:15:23 +0000 (17:15 +0000)
committerTom Hughes <tom@compton.nu>
Thu, 26 Jul 2007 17:15:23 +0000 (17:15 +0000)
app/controllers/amf_controller.rb
app/controllers/application.rb
app/controllers/node_controller.rb
app/controllers/segment_controller.rb
app/controllers/swf_controller.rb
app/controllers/way_controller.rb
app/views/layouts/site.rhtml
app/views/site/edit.rhtml
config/environment.rb
public/stylesheets/site.css

index 3bcab182b7d976d22f7c51019f85819094fdc588..ed4f87b210ec1003670a11b9cbc6b402cebefccd 100644 (file)
@@ -1,6 +1,8 @@
 class AmfController < ApplicationController
   require 'stringio'
 
+  before_filter :check_availability
+
   # to log:
   # RAILS_DEFAULT_LOGGER.error("Args: #{args[0]}, #{args[1]}, #{args[2]}, #{args[3]}")
 
index 792792f8375008db48c7c2987aa1fe870ee7b4fd..085a3fa9fe2dcf0ebe37c0e99c28935500bb9b74 100644 (file)
@@ -34,10 +34,19 @@ class ApplicationController < ActionController::Base
       # no auth, the user does not exist or the password was wrong
       response.headers["Status"] = "Unauthorized" 
       response.headers["WWW-Authenticate"] = "Basic realm=\"#{realm}\"" 
-      render_text(errormessage, 401) # :unauthorized
+      render :text => errormessage, :status => :unauthorized
+      return false
     end 
   end 
 
+  def check_availability
+    if API_READONLY
+      response.headers['Error'] = "Database offline for maintenance"
+      render :nothing => true, :status => :service_unavailable
+      return false
+    end
+  end
+
   # Report and error to the user
   # (If anyone ever fixes Rails so it can set a http status "reason phrase",
   #  rather than only a status code and having the web engine make up a 
index 3f3f882ae6cb5971c8c951da5e214f0d9a6f943b..fba41e3305dc16c59eec00561027f09441a9f983 100644 (file)
@@ -2,6 +2,7 @@ class NodeController < ApplicationController
   require 'xml/libxml'
 
   before_filter :authorize, :only => [:create, :update, :delete]
+  before_filter :check_availability, :only => [:create, :update, :delete]
   after_filter :compress_output
 
   def create
index 2d55bbf79bc737dd609d829fa0cd7d12a23cd2f4..070c2be8123ebcc1f556ede5f140df345ba42e6e 100644 (file)
@@ -2,6 +2,7 @@ class SegmentController < ApplicationController
   require 'xml/libxml'
 
   before_filter :authorize, :only => [:create, :update, :delete]
+  before_filter :check_availability, :only => [:create, :update, :delete]
   after_filter :compress_output
 
   def create
index a58e899e01741d0daeec900a210de98587a20a0a..9a4516016700eaa2986ee1ebd06ccccbfa6e480c 100644 (file)
@@ -1,4 +1,5 @@
 class SwfController < ApplicationController
+  before_filter :check_availability
 
 # to log:
 # RAILS_DEFAULT_LOGGER.error("Args: #{args[0]}, #{args[1]}, #{args[2]}, #{args[3]}")
index ea22206a3c8e66a65b7db803a423274c1378e567..b1adf25a2fa5a6656918a969f5ffaccf660597d1 100644 (file)
@@ -2,6 +2,7 @@ class WayController < ApplicationController
   require 'xml/libxml'
 
   before_filter :authorize, :only => [:create, :update, :delete]
+  before_filter :check_availability, :only => [:create, :update, :delete]
   after_filter :compress_output
 
   def create
index 52d51f3f87b6a9f9dbb41d6d7c944e68cf354a6a..c2e831bf72d7addc1273be83669a9933061266ff 100644 (file)
       </div>
       <% end %>
 
+      <% if API_READONLY %>
+      <div id="alert">
+        The OpenStreetMap database is currently in read-only mode while
+        essential database maintenance work is carried out.
+      </div>
+      <% end %>
+
       <div id="left_menu" class="left_menu">
         <a href="http://wiki.openstreetmap.org">Help &amp; Wiki</a><br />
        <%= link_to "Users' diaries", {:controller => 'diary_entry', :action => 'list', :display_name => nil} %><br />
@@ -78,7 +85,6 @@
         <a href="http://wiki.openstreetmap.org/index.php/Merchandise">Shop</a><br />
       </div>
 
-
       <%= yield :optionals %>
       <div id="cclogo">
         <center>
index a1b0a4925fb93b2b51af5d4fcd788b43ccdd1819..576c5a5bb9c5a8e6dbdfe11b907f0b8dcc700780 100644 (file)
@@ -1,3 +1,8 @@
+<% if API_READONLY %>
+<p>The OpenStreetMap database is currently in read-only mode while
+   essential database maintenance work is carried out.
+</p>
+<% else %>
 <%= render :partial => 'search' %>
 
 <% if params['mlon'] and params['mlat'] %>
     OpenStreetMap Flash editor. You can <a href="http://www.adobe.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">download Flash Player from Adobe.com</a>.
 
     <a href="http://wiki.openstreetmap.org/index.php/Editing">Several other options</a> are also available
-    for editing OpenStreetMap.</div>
-  <script type="text/javascript" src="/javascripts/swfobject.js"></script>
-  <script type="text/javascript">
-    var fo = new SWFObject("/potlatch/potlatch.swf?d="+Math.round(Math.random()*1000), "potlatch", "700", "600", "6", "#FFFFFF");
-    function doSWF(lat,lon,sc) {
-      fo.addVariable('lat',lat);
-      fo.addVariable('long',lon);
-      fo.addVariable('scale',sc);
-      fo.addVariable('token','<%= @user.token %>');
-      fo.write("mapcontent");
-    }
+    for editing OpenStreetMap.
+</div>
+<script type="text/javascript" src="/javascripts/swfobject.js"></script>
+<script type="text/javascript">
+  var fo = new SWFObject("/potlatch/potlatch.swf?d="+Math.round(Math.random()*1000), "potlatch", "700", "600", "6", "#FFFFFF");
 
-    doSWF(<%= lat %>,<%= lon %>,<%= zoom %>);
+  function doSWF(lat,lon,sc) {
+    fo.addVariable('lat',lat);
+    fo.addVariable('long',lon);
+    fo.addVariable('scale',sc);
+    fo.addVariable('token','<%= @user.token %>');
+    fo.write("mapcontent");
+  }
 
+  doSWF(<%= lat %>,<%= lon %>,<%= zoom %>);
 </script>
+<% end %>
index 1265abe3bd167caedf92a08b5e56869b99b9b004..d3c68ca696942516347ac5202629d06841621190 100644 (file)
@@ -67,6 +67,9 @@ end
 #   inflect.uncountable %w( fish sheep )
 # end
 
+# Set to true to put the API in read-only mode
+API_READONLY = false
+
 # Include your application configuration below
 SERVER_URL = ENV['OSM_SERVER_URL'] || 'www.openstreetmap.org'
 
index 008089ed2aefcf09dcd366486599067c64f93312..194eee874a49c92e905871d85d604684102845f1 100644 (file)
@@ -80,6 +80,17 @@ body {
   font-size: 11px;\r
 }\r
 \r
+#alert {\r
+  width: 150px;\r
+  margin: 10px;\r
+  padding: 10px;\r
+  border: 1px solid #ccc;\r
+  background: #d00;\r
+  line-height: 1.2em;\r
+  text-align: left;\r
+  font-size: 14px;\r
+}\r
+\r
 .left_menu {\r
   width: 150px;\r
   min-width: 150px;\r