From bb58544a706191c7c253c00c084ffbd74636adec Mon Sep 17 00:00:00 2001
From: Raphael Sofaer <raphael@joindiaspora.com>
Date: Thu, 10 Feb 2011 15:51:22 -0800
Subject: [PATCH] Add logging for GC (slight slowdown, but worth it for the
 data)

---
 app/controllers/application_controller.rb | 4 ++++
 config/environments/production.rb         | 1 +
 lib/log_overrider.rb                      | 2 ++
 3 files changed, 7 insertions(+)

diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index ef7866dce7..0feb255fd2 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -11,6 +11,7 @@ class ApplicationController < ActionController::Base
   before_filter :set_invites
   before_filter :set_locale
   before_filter :which_action_and_user
+  prepend_before_filter :clear_gc_stats
 
   def set_contacts_notifications_and_status
     if user_signed_in?
@@ -50,4 +51,7 @@ class ApplicationController < ActionController::Base
       I18n.locale = request.compatible_language_from AVAILABLE_LANGUAGE_CODES
     end
   end
+  def clear_gc_stats
+    GC.clear_stats if GC.respond_to?(:clear_stats)
+  end
 end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index beedc94a74..f02ea6132e 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -51,3 +51,4 @@ end
 
 # Sacrifice readability for a 10% performance boost
 Haml::Template::options[:ugly] = true
+GC.enable_stats if GC.respond_to?(:enable_stats)
diff --git a/lib/log_overrider.rb b/lib/log_overrider.rb
index 6ef3dcf72a..13d55748ad 100644
--- a/lib/log_overrider.rb
+++ b/lib/log_overrider.rb
@@ -19,6 +19,7 @@ module ActionDispatch
 
         ActiveSupport::Deprecation.silence do
           message = "event=error error_class=#{exception.class} error_message='#{exception.message}' "
+          message << "gc_ms=#{GC.time} gc_collections=#{GC.collections} gc_bytes=#{GC.growth} " if GC.respond_to?(:enable_stats)
           message << "orig_error_message='#{exception.original_exception.message}'" if exception.respond_to?(:original_exception)
           message << "annotated_source='#{exception.annoted_source_code.to_s}' " if exception.respond_to?(:annoted_source_code)
           message << "app_backtrace='#{application_trace(exception).join(";")}'"
@@ -41,6 +42,7 @@ class ActionController::LogSubscriber
     log_string = "event=request_completed status=#{payload[:status]} "
     log_string << "controller=#{payload[:controller]} action=#{payload[:action]} format=#{payload[:formats].first.to_s.upcase} "
     log_string << "ms=#{"%.0f" % event.duration} "
+    log_string << "gc_ms=#{GC.time} gc_collections=#{GC.collections} gc_bytes=#{GC.growth} " if GC.respond_to?(:enable_stats)
     log_string << "params='#{params.inspect}' " unless params.empty?
     #log_string << "additions='#{additions.join(" | ")}' " unless additions.blank?
 
-- 
GitLab