You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by mf...@apache.org on 2012/10/11 13:08:14 UTC

[1/2] git commit: Core: Various fixed in logging errors

Updated Branches:
  refs/heads/master 1cb4f416b -> adade3245


Core: Various fixed in logging errors

* 404 is not longer logged as 'error'
* Using -L option on deltacloudd should redirec *all* logs into
  specified file
* 404 error page in UI does not longer print super-long message

Signed-off-by: Michal fojtik <mf...@redhat.com>
TrackedAt: http://tracker.deltacloud.org/patch/117f80b2eeb4715154d662fc6c29a04a42b0f339


Project: http://git-wip-us.apache.org/repos/asf/deltacloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltacloud/commit/74f3ef37
Tree: http://git-wip-us.apache.org/repos/asf/deltacloud/tree/74f3ef37
Diff: http://git-wip-us.apache.org/repos/asf/deltacloud/diff/74f3ef37

Branch: refs/heads/master
Commit: 74f3ef37bce7a9ff4cd65f166d1ca853ffa4bcb5
Parents: 1cb4f41
Author: Michal Fojtik <mf...@redhat.com>
Authored: Mon Oct 8 15:57:01 2012 +0200
Committer: Michal fojtik <mf...@redhat.com>
Committed: Thu Oct 11 13:07:16 2012 +0200

----------------------------------------------------------------------
 server/lib/deltacloud/drivers/exceptions.rb        |    8 ++-
 server/lib/deltacloud/helpers/deltacloud_helper.rb |   37 +++++++++++---
 server/lib/sinatra/rack_logger.rb                  |    5 ++
 server/views/errors/401.html.haml                  |   16 ------
 server/views/errors/404.html.haml                  |    5 +-
 5 files changed, 41 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/deltacloud/blob/74f3ef37/server/lib/deltacloud/drivers/exceptions.rb
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/drivers/exceptions.rb b/server/lib/deltacloud/drivers/exceptions.rb
index dba94b6..c855129 100644
--- a/server/lib/deltacloud/drivers/exceptions.rb
+++ b/server/lib/deltacloud/drivers/exceptions.rb
@@ -115,6 +115,7 @@ module Deltacloud
       def initialize(conditions, &block)
         @conditions = conditions
         instance_eval(&block) if block_given?
+        self
       end
 
       def status(code)
@@ -157,6 +158,10 @@ module Deltacloud
 
     end
 
+    def self.exception_from_status(code, message)
+      ExceptionDef.new(nil) { status code}.handler(StandardError.new(message))
+    end
+
     class Exceptions
       attr_reader :exception_definitions
 
@@ -198,17 +203,14 @@ module Deltacloud
       begin
         block.call
       rescue => e
-        log = ExceptionHandler.logger
         self.class.exceptions.each do |definitions|
           next unless definitions.any? e
           if (new_exception = definitions.handler(e)) and new_exception.message
             message = new_exception.message
           end
           message ||= e.message
-          log.error "#{[e.class.to_s, message].join(':')}\n#{e.backtrace[0..10].join("\n")}" unless ENV['RACK_ENV'] == 'test'
           raise definitions.handler(e) unless new_exception.nil?
         end
-        log.error "[NO HANDLED] #{[e.class.to_s, e.message].join(': ')}\n#{e.backtrace.join("\n")}" unless ENV['RACK_ENV'] == 'test'
         raise BackendError.new(e, "Unhandled exception or status code (#{e.message})")
       end
     end

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/74f3ef37/server/lib/deltacloud/helpers/deltacloud_helper.rb
----------------------------------------------------------------------
diff --git a/server/lib/deltacloud/helpers/deltacloud_helper.rb b/server/lib/deltacloud/helpers/deltacloud_helper.rb
index ab4a0c0..4c433c5 100644
--- a/server/lib/deltacloud/helpers/deltacloud_helper.rb
+++ b/server/lib/deltacloud/helpers/deltacloud_helper.rb
@@ -18,6 +18,10 @@ module Deltacloud::Helpers
 
     require 'benchmark'
 
+    def request_headers
+      env.inject({}){|acc, (k,v)| acc[$1.downcase] = v if k =~ /^http_(.*)/i; acc}
+    end
+
     def auth_feature_name
       return 'key' if driver.class.has_feature?(:instances, :authentication_key)
       return 'password' if driver.class.has_feature?(:instances, :authentication_password)
@@ -77,15 +81,32 @@ module Deltacloud::Helpers
       end
     end
 
+    def log
+      Deltacloud::ExceptionHandler.logger(Deltacloud.default_frontend.logger)
+    end
+
     def report_error(code=nil)
-      @error, @code = (request.env['sinatra.error'] || @exception), code
-      @code = 500 if not @code and not @error.class.method_defined? :code
-      response.status = @code || @error.code
-      log = Deltacloud::ExceptionHandler.logger
-      message = @error.respond_to?(:message) ? @error.message : translate_error_code(@code)
+      handler = Deltacloud::ExceptionHandler
+
+      if !code.nil?
+        @error = handler.exception_from_status(code, translate_error_code(code)[:message])
+        @code = code
+        message = @error.message
+      else
+        @error = request.env['sinatra.error'] || @exception
+        @code = @error.respond_to?(:code) ? @error.code : 500
+        message = @error.respond_to?(:message) ? @error.message : translate_error_code(code)[:message]
+      end
+
+      response.status = @code
+
       backtrace = (@error.respond_to?(:backtrace) and !@error.backtrace.nil?) ?
         "\n\n#{@error.backtrace[0..10].join("\n")}\n\n" : ''
-      log.error "[#{@code}] #{[@error.class.to_s, message].join(':')}#{backtrace}"
+
+      if @code.to_s =~ /5(\d+)/
+        log.error(@code.to_s) { "[#{@error.class.to_s}] #{message}#{backtrace}" }
+      end
+
       respond_to do |format|
         format.xml {  haml :"errors/#{@code || @error.code}", :layout => false }
         format.json { xml_to_json("errors/#{@code || @error.code}") }
@@ -307,11 +328,11 @@ module Deltacloud::Helpers
     end
 
     def bt(trace)
+      return [] unless trace
       return trace.join("\n") if params['fulltrace']
       app_path = File::expand_path("../../..", __FILE__)
       dots = false
-
-        trace = trace.map { |t| t.match(%r{^#{app_path}(.*)$}) ? "$app#{$1}" : "..." }.select do |t|
+      trace = trace.map { |t| t.match(%r{^#{app_path}(.*)$}) ? "$app#{$1}" : "..." }.select do |t|
         if t == "..."
           keep = ! dots
           dots = true

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/74f3ef37/server/lib/sinatra/rack_logger.rb
----------------------------------------------------------------------
diff --git a/server/lib/sinatra/rack_logger.rb b/server/lib/sinatra/rack_logger.rb
index d986ac1..677444b 100644
--- a/server/lib/sinatra/rack_logger.rb
+++ b/server/lib/sinatra/rack_logger.rb
@@ -50,6 +50,11 @@ module Rack
       self
     end
 
+    def self.error(code, &block)
+      @logger ||= ::Logger.new(log_path || $stdout)
+      @logger.error(code, &block)
+    end
+
     # Common Log Format: http://httpd.apache.org/docs/1.3/logs.html#common
     # lilith.local - - [07/Aug/2006 23:58:02] "GET / HTTP/1.1" 500 -
     #             %{%s - %s [%s] "%s %s%s %s" %d %s\n} %

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/74f3ef37/server/views/errors/401.html.haml
----------------------------------------------------------------------
diff --git a/server/views/errors/401.html.haml b/server/views/errors/401.html.haml
index 6f7debb..cbdff37 100644
--- a/server/views/errors/401.html.haml
+++ b/server/views/errors/401.html.haml
@@ -15,13 +15,6 @@
       - else
         %em No details
 
-  - if @error.class.method_defined? :backtrace
-    %div{ 'data-role' => :collapsible, 'data-collapsed' => "true"}
-      %h3 Backtrace
-      %ul{ :'data-role' => :listview , :'data-inset' => :true, :'data-divider-theme' => 'e'}
-        %li
-          %pre=@error.backtrace.join("\n")
-
   %div{ 'data-role' => :collapsible, 'data-collapsed' => "true"}
     %h3 Parameters
     %ul{ :'data-role' => :listview , :'data-inset' => :true, :'data-divider-theme' => 'e'}
@@ -31,12 +24,3 @@
         %li{ :'data-role' => 'list-divider'}=key
         %li
           %span{:style => 'font-weight:normal;'}=value.inspect
-
-
-  %div{ 'data-role' => :collapsible, 'data-collapsed' => "true"}
-    %h3 Request details
-    %ul{ :'data-role' => :listview , :'data-inset' => :true, :'data-divider-theme' => 'e'}
-      - request.env.each do |key, value|
-        %li{ :'data-role' => 'list-divider'}=key
-        %li
-          %span{:style => 'font-weight:normal;'}=value.to_s

http://git-wip-us.apache.org/repos/asf/deltacloud/blob/74f3ef37/server/views/errors/404.html.haml
----------------------------------------------------------------------
diff --git a/server/views/errors/404.html.haml b/server/views/errors/404.html.haml
index a9bbe34..a05c1eb 100644
--- a/server/views/errors/404.html.haml
+++ b/server/views/errors/404.html.haml
@@ -19,11 +19,10 @@
         %li
           %span{:style => 'font-weight:normal;'}=value.inspect
 
-
   %div{ 'data-role' => :collapsible, 'data-collapsed' => "true"}
-    %h3 Request details
+    %h3 Request Headers
     %ul{ :'data-role' => :listview , :'data-inset' => :true, :'data-divider-theme' => 'e'}
-      - request.env.each do |key, value|
+      - request_headers.each do |key, value|
         %li{ :'data-role' => 'list-divider'}=key
         %li
           %span{:style => 'font-weight:normal;'}=value.inspect