From 7fbf162666e7f2860746bcfd6ed44d2bc426a6d4 Mon Sep 17 00:00:00 2001
From: Sam <sam.saffron@gmail.com>
Date: Sat, 24 May 2014 22:50:39 +1000
Subject: [PATCH] Logster update

cleans up a bunch of messed up context stuff with multisite
improves backtraces
adds request params
---
 Gemfile.lock                                  |  2 +-
 app/controllers/forums_controller.rb          |  2 +-
 .../common/_discourse_javascript.html.erb     | 14 +++++------
 config/initializers/logster.rb                | 23 ++++++++++++++++++-
 config/routes.rb                              | 11 +++++----
 .../lib/rails_multisite/railtie.rb            |  2 ++
 6 files changed, 39 insertions(+), 15 deletions(-)

diff --git a/Gemfile.lock b/Gemfile.lock
index 1db7969fb28..2782bf77ff5 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -152,7 +152,7 @@ GEM
       thor (~> 0.15)
     libv8 (3.16.14.3)
     listen (0.7.3)
-    logster (0.0.9)
+    logster (0.0.10)
     lru_redux (0.8.1)
     mail (2.5.4)
       mime-types (~> 1.16)
diff --git a/app/controllers/forums_controller.rb b/app/controllers/forums_controller.rb
index 55545fdcea5..a15b6090ee3 100644
--- a/app/controllers/forums_controller.rb
+++ b/app/controllers/forums_controller.rb
@@ -1,6 +1,6 @@
 class ForumsController < ApplicationController
 
-  skip_before_filter :check_xhr, only: [:status]
+  skip_before_filter :check_xhr
   skip_before_filter :authorize_mini_profiler, only: [:status]
   skip_before_filter :redirect_to_login_if_required, only: [:status]
 
diff --git a/app/views/common/_discourse_javascript.html.erb b/app/views/common/_discourse_javascript.html.erb
index 10174348ffb..060783800b1 100644
--- a/app/views/common/_discourse_javascript.html.erb
+++ b/app/views/common/_discourse_javascript.html.erb
@@ -11,10 +11,9 @@
   })();
 </script>
 
-<% if Rails.env.development? %>
-  <script>
-    // Don't swallow promises in development mode. Let's fix those.
-    Ember.RSVP.configure('onerror', function(e) {
+<script>
+  Ember.RSVP.configure('onerror', function(e) {
+    <% if Rails.env.development? %>
       if (e) {
         if (e.message || e.stack) {
           console.log(e.message);
@@ -25,9 +24,10 @@
       } else {
         console.log("A promise failed but was not caught.");
       }
-    });
-  </script>
-<% end %>
+    <% end %>
+    window.onerror(e && e.message, null,null,null,e);
+  });
+</script>
 
 <script>
   Discourse.CDN = '<%= Rails.configuration.action_controller.asset_host %>';
diff --git a/config/initializers/logster.rb b/config/initializers/logster.rb
index 8a2b8250422..7a525aa5cb1 100644
--- a/config/initializers/logster.rb
+++ b/config/initializers/logster.rb
@@ -1,6 +1,27 @@
 if Rails.env.production?
   # honestly, Rails should not be logging this, its real noisy
   Logster.store.ignore = [
-  /^ActionController::RoutingError \(No route matches/
+    /^ActionController::RoutingError \(No route matches/
   ]
+
+  Logster.config.authorize_callback = lambda{|env|
+    user = CurrentUser.lookup_from_env(env)
+    user && user.admin
+  }
 end
+
+# middleware that logs errors sits before multisite
+# we need to establish a connection so redis connection is good
+# and db connection is good
+Logster.config.current_context = lambda{|env,&blk|
+  begin
+    if Rails.configuration.multisite
+      request = Rack::Request.new(env)
+      ActiveRecord::Base.connection_handler.clear_active_connections!
+      RailsMultisite::ConnectionManagement.establish_connection(:host => request['__ws'] || request.host)
+    end
+    blk.call
+  ensure
+    ActiveRecord::Base.connection_handler.clear_active_connections!
+  end
+}
diff --git a/config/routes.rb b/config/routes.rb
index 98e05414221..47b6939a765 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -14,11 +14,12 @@ Discourse::Application.routes.draw do
   match "/404", to: "exceptions#not_found", via: [:get, :post]
   get "/404-body" => "exceptions#not_found_body"
 
-  mount Sidekiq::Web => "/sidekiq", constraints: AdminConstraint.new
-
-  if Rails.env.production?
-    require 'logster/middleware/viewer'
-    mount Logster::Middleware::Viewer.new(nil) => "/logs", constraints: AdminConstraint.new
+  if Rails.env == "development"
+    mount Sidekiq::Web => "/sidekiq"
+    mount Logster::Web => "/logs"
+  else
+    mount Sidekiq::Web => "/sidekiq", constraints: AdminConstraint.new
+    mount Logster::Web => "/logs", constraints: AdminConstraint.new
   end
 
   get "site" => "site#index"
diff --git a/vendor/gems/rails_multisite/lib/rails_multisite/railtie.rb b/vendor/gems/rails_multisite/lib/rails_multisite/railtie.rb
index ad95ba2ae8a..68c8c71e5ff 100644
--- a/vendor/gems/rails_multisite/lib/rails_multisite/railtie.rb
+++ b/vendor/gems/rails_multisite/lib/rails_multisite/railtie.rb
@@ -5,7 +5,9 @@ module RailsMultisite
     end
 
     initializer "RailsMultisite.init" do |app|
+      Rails.configuration.multisite = false
       if File.exists?(ConnectionManagement.config_filename)
+        Rails.configuration.multisite = true
         ConnectionManagement.load_settings!
         app.middleware.insert_after(ActiveRecord::ConnectionAdapters::ConnectionManagement, RailsMultisite::ConnectionManagement)
         app.middleware.delete(ActiveRecord::ConnectionAdapters::ConnectionManagement)