Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-05-20 17:34:42 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-05-20 17:34:42 +0300
commit9f46488805e86b1bc341ea1620b866016c2ce5ed (patch)
treef9748c7e287041e37d6da49e0a29c9511dc34768 /lib/gitlab/grape_logging
parentdfc92d081ea0332d69c8aca2f0e745cb48ae5e6d (diff)
Add latest changes from gitlab-org/gitlab@13-0-stable-ee
Diffstat (limited to 'lib/gitlab/grape_logging')
-rw-r--r--lib/gitlab/grape_logging/loggers/cloudflare_logger.rb18
-rw-r--r--lib/gitlab/grape_logging/loggers/context_logger.rb14
-rw-r--r--lib/gitlab/grape_logging/loggers/exception_logger.rb28
3 files changed, 58 insertions, 2 deletions
diff --git a/lib/gitlab/grape_logging/loggers/cloudflare_logger.rb b/lib/gitlab/grape_logging/loggers/cloudflare_logger.rb
new file mode 100644
index 00000000000..3abb0100a86
--- /dev/null
+++ b/lib/gitlab/grape_logging/loggers/cloudflare_logger.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module GrapeLogging
+ module Loggers
+ class CloudflareLogger < ::GrapeLogging::Loggers::Base
+ include ::Gitlab::Logging::CloudflareHelper
+
+ def parameters(request, _response)
+ data = {}
+ store_cloudflare_headers!(data, request)
+
+ data
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/grape_logging/loggers/context_logger.rb b/lib/gitlab/grape_logging/loggers/context_logger.rb
new file mode 100644
index 00000000000..0a8f0872fbe
--- /dev/null
+++ b/lib/gitlab/grape_logging/loggers/context_logger.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+# This module adds additional correlation id the grape logger
+module Gitlab
+ module GrapeLogging
+ module Loggers
+ class ContextLogger < ::GrapeLogging::Loggers::Base
+ def parameters(_, _)
+ Labkit::Context.current.to_h
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/grape_logging/loggers/exception_logger.rb b/lib/gitlab/grape_logging/loggers/exception_logger.rb
index 606b7c0dbce..14147769422 100644
--- a/lib/gitlab/grape_logging/loggers/exception_logger.rb
+++ b/lib/gitlab/grape_logging/loggers/exception_logger.rb
@@ -4,14 +4,16 @@ module Gitlab
module GrapeLogging
module Loggers
class ExceptionLogger < ::GrapeLogging::Loggers::Base
- def parameters(request, _)
+ def parameters(request, response_body)
+ data = {}
+ data[:api_error] = format_body(response_body) if bad_request?(request)
+
# grape-logging attempts to pass the logger the exception
# (https://github.com/aserafin/grape_logging/blob/v1.7.0/lib/grape_logging/middleware/request_logger.rb#L63),
# but it appears that the rescue_all in api.rb takes
# precedence so the logger never sees it. We need to
# store and retrieve the exception from the environment.
exception = request.env[::API::Helpers::API_EXCEPTION_ENV]
- data = {}
return data unless exception.is_a?(Exception)
@@ -19,6 +21,28 @@ module Gitlab
data
end
+
+ private
+
+ def format_body(response_body)
+ # https://github.com/rack/rack/blob/master/SPEC.rdoc#label-The+Body:
+ # The response_body must respond to each, but just in case we
+ # guard against errors here.
+ response_body = Array(response_body) unless response_body.respond_to?(:each)
+
+ # To avoid conflicting types in Elasticsearch, convert every
+ # element into an Array of strings. A response body is usually
+ # an array of Strings so that the response can be sent in
+ # chunks.
+ body = []
+ # each_with_object doesn't work with Rack::BodyProxy
+ response_body.each { |chunk| body << chunk.to_s }
+ body
+ end
+
+ def bad_request?(request)
+ request.env[::API::Helpers::API_RESPONSE_STATUS_CODE] == 400
+ end
end
end
end