summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>2011-11-27 14:53:12 +0200
committerDmitriy Zaporozhets <dzaporozhets@sphereconsultinginc.com>2011-11-27 14:53:12 +0200
commit8ad1f8a4741522700dc7634e22ae946bbec2c845 (patch)
tree7eebbfdc2acdc9622c010a45b3dd4cac9690a5b2
parentfb8f05ee165b4da8aec0e4adf48992a86052ab04 (diff)
downloadgitlab-ce-8ad1f8a4741522700dc7634e22ae946bbec2c845.tar.gz
activities page caching
-rw-r--r--app/controllers/projects_controller.rb2
-rw-r--r--app/models/project.rb17
-rw-r--r--config/environments/production.rb2
3 files changed, 19 insertions, 2 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index a11ad08dc65..ee5f731e992 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -67,7 +67,7 @@ class ProjectsController < ApplicationController
def show
return render "projects/empty" unless @project.repo_exists?
limit = (params[:limit] || 20).to_i
- @activities = @project.updates(limit)
+ @activities = @project.cached_updates(limit)
end
#
diff --git a/app/models/project.rb b/app/models/project.rb
index 09c91fbd9ed..7998979d0d8 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -143,6 +143,23 @@ class Project < ActiveRecord::Base
last_activity.try(:created_at)
end
+ # Get project updates from cache
+ # or calculate.
+ def cached_updates(limit, expire = 2.minutes)
+ activities_key = "project_#{id}_activities"
+ cached_activities = Rails.cache.read(activities_key)
+ if cached_activities
+ activities = cached_activities
+ else
+ activities = updates(limit)
+ Rails.cache.write(activities_key, activities, :expires_in => 60.seconds)
+ end
+
+ activities
+ end
+
+ # Get 20 events for project like
+ # commits, issues or notes
def updates(n = 3)
[
fresh_commits(n),
diff --git a/config/environments/production.rb b/config/environments/production.rb
index d8094817c04..fc8d4c1135c 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -37,7 +37,7 @@ Gitlab::Application.configure do
# config.logger = SyslogLogger.new
# Use a different cache store in production
- # config.cache_store = :mem_cache_store
+ config.cache_store = :memory_store
# Enable serving of images, stylesheets, and JavaScripts from an asset server
# config.action_controller.asset_host = "http://assets.example.com"