From: Tom Hughes Date: Sun, 10 Jan 2010 17:44:57 +0000 (+0000) Subject: Add some caching for trace views. X-Git-Tag: live~6395^2~26 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/e29e49dc7c3d1d9f59679f09a5eba8a6b56854a2 Add some caching for trace views. --- diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 4c4ec60a7..9b32c32a7 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -15,6 +15,11 @@ class TraceController < ApplicationController before_filter :offline_redirect, :only => [:create, :edit, :delete, :data, :api_data, :api_create] around_filter :api_call_handle_error, :only => [:api_details, :api_data, :api_create] + caches_action :list, :view, :layout => false + caches_action :georss, :layout => true + cache_sweeper :trace_sweeper, :only => [:create, :edit, :delete, :api_create] + cache_sweeper :tracetag_sweeper, :only => [:create, :edit, :delete, :api_create] + # Counts and selects pages of GPX traces for various criteria (by user, tags, public etc.). # target_user - if set, specifies the user to fetch traces for. if not set will fetch all traces def list(target_user = nil, action = "list") diff --git a/app/models/trace_sweeper.rb b/app/models/trace_sweeper.rb new file mode 100644 index 000000000..52780f9e4 --- /dev/null +++ b/app/models/trace_sweeper.rb @@ -0,0 +1,28 @@ +class TraceSweeper < ActionController::Caching::Sweeper + observe Trace + + def after_create(record) + expire_cache_for(record) + end + + def after_update(record) + expire_cache_for(record) + end + + def after_destroy(record) + expire_cache_for(record) + end + +private + + def expire_cache_for(record) + expire_action(:controller => 'trace', :action => 'view', :id => record.id) + expire_action(:controller => 'trace', :action => 'view', :display_name => record.user.display_name, :id => record.id) + + expire_action(:controller => 'trace', :action => 'list', :display_name => nil, :tag => nil) + expire_action(:controller => 'trace', :action => 'list', :display_name => record.user.display_name, :tag => nil) + + expire_action(:controller => 'trace', :action => 'georss', :display_name => nil, :tag => nil) + expire_action(:controller => 'trace', :action => 'georss', :display_name => record.user.display_name, :tag => nil) + end +end diff --git a/app/models/tracetag_sweeper.rb b/app/models/tracetag_sweeper.rb new file mode 100644 index 000000000..f9de1dd82 --- /dev/null +++ b/app/models/tracetag_sweeper.rb @@ -0,0 +1,25 @@ +class TracetagSweeper < ActionController::Caching::Sweeper + observe Tracetag + + def after_create(record) + expire_cache_for(record) + end + + def after_update(record) + expire_cache_for(record) + end + + def after_destroy(record) + expire_cache_for(record) + end + +private + + def expire_cache_for(record) + expire_action(:controller => 'trace', :action => 'list', :display_name => nil, :tag => record.tag) + expire_action(:controller => 'trace', :action => 'list', :display_name => record.trace.user.display_name, :tag => record.tag) + + expire_action(:controller => 'trace', :action => 'georss', :display_name => nil, :tag => record.tag) + expire_action(:controller => 'trace', :action => 'georss', :display_name => record.trace.user.display_name, :tag => record.tag) + end +end