]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/aviator/feature/aviator/core/logger.rb
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / aviator / feature / aviator / core / logger.rb
diff --git a/3rdparty/modules/aviator/feature/aviator/core/logger.rb b/3rdparty/modules/aviator/feature/aviator/core/logger.rb
new file mode 100644 (file)
index 0000000..bbb537d
--- /dev/null
@@ -0,0 +1,55 @@
+module Aviator
+
+  class Logger < Faraday::Response::Middleware
+    extend Forwardable
+
+    def initialize(app, logger=nil)
+      super(app)
+      @logger = logger || begin
+        require 'logger'
+        ::Logger.new(self.class::LOG_FILE_PATH)
+      end
+    end
+
+
+    def_delegators :@logger, :debug, :info, :warn, :error, :fatal
+
+
+    def call(env)
+      info(env[:method].to_s.upcase) { env[:url].to_s }
+      debug('REQ_HEAD') { dump_headers env[:request_headers] }
+      debug('REQ_BODY') { dump_body env[:body] }
+      super
+    end
+
+
+    def on_complete(env)
+      info('STATUS') { env[:status].to_s }
+      debug('RES_HEAD') { dump_headers env[:response_headers] }
+      debug('RES_BODY') { dump_body env[:body] }
+    end
+
+
+    def self.configure(log_file_path)
+      # Return a subclass with its logfile path set. This
+      # must be done so that different sessions can log to
+      # different paths.
+      Class.new(self) { const_set('LOG_FILE_PATH', log_file_path) }
+    end
+
+
+    private
+
+    def dump_body(body)
+      return if body.nil?
+
+      # :TODO => Make this configurable
+      body.gsub(/["']password["']:["']\w*["']/, '"password":[FILTERED_VALUE]')
+    end
+
+    def dump_headers(headers)
+      headers.map { |k, v| "#{k}: #{v.inspect}" }.join("; ")
+    end
+  end
+
+end