diff options
Diffstat (limited to 'lib/gitlab')
-rw-r--r-- | lib/gitlab/git/rugged_impl/repository.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/grape_logging/formatters/lograge_with_timestamp.rb | 21 | ||||
-rw-r--r-- | lib/gitlab/lograge/custom_options.rb | 43 |
3 files changed, 54 insertions, 12 deletions
diff --git a/lib/gitlab/git/rugged_impl/repository.rb b/lib/gitlab/git/rugged_impl/repository.rb index 8fde93e71e2..8679d977773 100644 --- a/lib/gitlab/git/rugged_impl/repository.rb +++ b/lib/gitlab/git/rugged_impl/repository.rb @@ -70,7 +70,7 @@ module Gitlab # Lookup for rugged object by oid or ref name def lookup(oid_or_ref_name) - rugged.rev_parse(oid_or_ref_name) + rev_parse_target(oid_or_ref_name) end end end diff --git a/lib/gitlab/grape_logging/formatters/lograge_with_timestamp.rb b/lib/gitlab/grape_logging/formatters/lograge_with_timestamp.rb index 1eb1e1b783b..045a341f2ed 100644 --- a/lib/gitlab/grape_logging/formatters/lograge_with_timestamp.rb +++ b/lib/gitlab/grape_logging/formatters/lograge_with_timestamp.rb @@ -6,6 +6,8 @@ module Gitlab class LogrageWithTimestamp include Gitlab::EncodingHelper + EMPTY_ARRAY = [].freeze + def call(severity, datetime, _, data) time = data.delete :time data[:params] = process_params(data) @@ -16,30 +18,27 @@ module Gitlab duration: time[:total], db: time[:db], view: time[:view] - }.merge(data) - ::Lograge.formatter.call(attributes) + "\n" + }.merge!(data) + + ::Lograge.formatter.call(attributes) << "\n" end private def process_params(data) - return [] unless data.has_key?(:params) + return EMPTY_ARRAY unless data.has_key?(:params) - params_array = - data[:params] - .each_pair - .map { |k, v| { key: k, value: utf8_encode_values(v) } } + params_array = data[:params].map { |k, v| { key: k, value: utf8_encode_values(v) } } - Gitlab::Utils::LogLimitedArray.log_limited_array(params_array, - sentinel: { key: 'truncated', value: '...' }) + Gitlab::Utils::LogLimitedArray.log_limited_array(params_array, sentinel: Gitlab::Lograge::CustomOptions::LIMITED_ARRAY_SENTINEL) end def utf8_encode_values(data) case data when Hash - data.merge(data) { |k, v| utf8_encode_values(v) } + data.merge!(data) { |k, v| utf8_encode_values(v) } when Array - data.map { |v| utf8_encode_values(v) } + data.map! { |v| utf8_encode_values(v) } when String encode_utf8(data) end diff --git a/lib/gitlab/lograge/custom_options.rb b/lib/gitlab/lograge/custom_options.rb new file mode 100644 index 00000000000..5dbff7d9102 --- /dev/null +++ b/lib/gitlab/lograge/custom_options.rb @@ -0,0 +1,43 @@ +# frozen_string_literal: true + +module Gitlab + module Lograge + module CustomOptions + LIMITED_ARRAY_SENTINEL = { key: 'truncated', value: '...' }.freeze + IGNORE_PARAMS = Set.new(%w(controller action format)).freeze + + def self.call(event) + params = event + .payload[:params] + .each_with_object([]) { |(k, v), array| array << { key: k, value: v } unless IGNORE_PARAMS.include?(k) } + + payload = { + time: Time.now.utc.iso8601(3), + params: Gitlab::Utils::LogLimitedArray.log_limited_array(params, sentinel: LIMITED_ARRAY_SENTINEL), + remote_ip: event.payload[:remote_ip], + user_id: event.payload[:user_id], + username: event.payload[:username], + ua: event.payload[:ua], + queue_duration: event.payload[:queue_duration] + } + + ::Gitlab::InstrumentationHelper.add_instrumentation_data(payload) + + payload[:response] = event.payload[:response] if event.payload[:response] + payload[:etag_route] = event.payload[:etag_route] if event.payload[:etag_route] + payload[Labkit::Correlation::CorrelationId::LOG_KEY] = Labkit::Correlation::CorrelationId.current_id + + if cpu_s = Gitlab::Metrics::System.thread_cpu_duration(::Gitlab::RequestContext.instance.start_thread_cpu_time) + payload[:cpu_s] = cpu_s + end + + # https://github.com/roidrage/lograge#logging-errors--exceptions + exception = event.payload[:exception_object] + + ::Gitlab::ExceptionLogFormatter.format!(exception, payload) + + payload + end + end + end +end |