pier_logging 0.1.13 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 642d371babd98a5b8714f67e30d18db2ba10f89da453a916044cb078c64453d6
4
- data.tar.gz: 5c47cc13ebddab2937b0c6cdd9abb040e5d6cd7d15f6dab3c3b3ed8becb0da53
3
+ metadata.gz: 15b02b57cc80e8d5babe64aa73a7b29c2d1fac544acc2c069c7cb0ba4ee985fc
4
+ data.tar.gz: 13719e2b027929f1e385928a943a96200db798c008be2a4f7895c075ea34fefe
5
5
  SHA512:
6
- metadata.gz: 93f7ef6e9321afb13e39f07f37f4dfa4475f9be15a33aef48fc64571f468c253049256e0245a7000d394bbceeeb54a77e5297b815f3c9e1bbb8e2e477a311a9a
7
- data.tar.gz: 994b98c846e5c91aa496c18209479f909c6fd4f4a4172bfffa64caf8615926678b707d4b19915d623dea50fa441e0f3081a2e19ab20408b56c87890d2268ad15
6
+ metadata.gz: edcd064cef708218bc0c4fb6e2e2d0ae13737b41a666c14be34129ff5ef008dedf734e33b93fa6e5c82cff95e1ca2bc76f0dcdfc39ed944509dc2742d4c56fb6
7
+ data.tar.gz: 170036ef60fecdf8cc77b8aa51f5ac4e40e89f29e90fd8410d9c6a65f98a43ecf4f73f0ab79d8db865cd4a38a6fab5bb4da420f00b8d0129e314943c4f2e31f2
@@ -54,21 +54,51 @@ module PierLogging
54
54
  end
55
55
 
56
56
  class RequestLoggerConfiguration
57
- attr_reader :enabled, :user_info_getter
57
+ attr_reader :enabled, :user_info_getter, :hide_response_body_for_paths,
58
+ :log_response, :hide_request_headers, :correlation_id_getter
58
59
 
59
60
  def initialize
60
- @user_info_getter = nil
61
+ @user_info_getter = ->(_ = nil) { nil }
61
62
  @enabled = false
63
+ @hide_response_body_for_paths = nil
64
+ @log_response = true
65
+ @hide_request_headers = nil
66
+ @correlation_id_getter = ->(_ = nil, _ = nil) { nil }
62
67
  end
63
68
 
64
69
  def user_info_getter=(proc)
65
70
  raise ArgumentError, "Config 'user_info_getter' must be a 'Proc'" unless proc.is_a? Proc
66
71
  @user_info_getter = proc
67
72
  end
73
+
74
+ def log_response=(log_response)
75
+ raise ArgumentError, "Config 'log_response' must be a 'boolean'" unless !!log_response == log_response
76
+ @log_response = log_response
77
+ end
78
+
79
+ def hide_response_body_for_paths=(hide_response_body_for_paths)
80
+ unless (hide_response_body_for_paths.is_a? Array) && (hide_response_body_for_paths.all?{|item| item.is_a? Regexp})
81
+ raise ArgumentError, "Config 'hide_response_body_for_paths' must be an 'Array of Regexps'"
82
+ end
83
+
84
+ @hide_response_body_for_paths = hide_response_body_for_paths
85
+ end
86
+
87
+ def hide_request_headers=(hide_request_headers)
88
+ unless (hide_request_headers.is_a? Array) && (hide_request_headers.all?{|item| item.is_a? Regexp})
89
+ raise ArgumentError, "Config 'hide_request_headers' must be an 'Array of Regexps'"
90
+ end
91
+ @hide_request_headers = hide_request_headers
92
+ end
68
93
 
69
94
  def enabled=(enabled = false)
70
95
  raise ArgumentError, "Config 'enabled' must be a 'boolean'" unless !!enabled == enabled
71
96
  @enabled = enabled
72
97
  end
98
+
99
+ def correlation_id_getter=(proc)
100
+ raise ArgumentError, "Config 'correlation_id_getter' must be a 'Proc'" unless proc.is_a? Proc
101
+ @correlation_id_getter = proc
102
+ end
73
103
  end
74
104
  end
@@ -50,7 +50,8 @@ module PierLogging
50
50
  duration: ((ends_at - starts_at)*1000).to_i,
51
51
  context: {
52
52
  user: get_user_info_from_headers(request_headers),
53
- correlation_id: env['action_dispatch.request_id'],
53
+ request_id: env['action_dispatch.request_id'],
54
+ correlation_id: get_correlation_id(env, request_headers)
54
55
  },
55
56
  request: {
56
57
  headers: request_headers,
@@ -59,7 +60,7 @@ module PierLogging
59
60
  },
60
61
  response: {
61
62
  status: status,
62
- body: parse_body(body),
63
+ body: response_body(request.path, body),
63
64
  type: type['Content-Type'],
64
65
  }
65
66
  })
@@ -71,8 +72,23 @@ module PierLogging
71
72
 
72
73
  private
73
74
  def get_request_headers_from_env(env)
74
- env.select { |k,v| k[0..4] == 'HTTP_'}.
75
+ hide_request_headers = PierLogging.request_logger_configuration.hide_request_headers
76
+
77
+ headers = env.select { |k,v| k[0..4] == 'HTTP_'}.
75
78
  transform_keys { |k| k[5..-1].split('_').join('-').upcase }
79
+
80
+ return redact_hash(headers, hide_request_headers, nil) if hide_request_headers.present?
81
+
82
+ headers
83
+ end
84
+
85
+ def response_body(request_path, body)
86
+ return nil unless PierLogging.request_logger_configuration.log_response
87
+
88
+ hide_response_body_for_paths = PierLogging.request_logger_configuration.hide_response_body_for_paths
89
+ return nil if hide_response_body_for_paths && hide_response_body_for_paths.any?{ |path|request_path =~ path }
90
+
91
+ parse_body(body)
76
92
  end
77
93
 
78
94
  def build_message_from_request(request)
@@ -86,6 +102,10 @@ module PierLogging
86
102
  PierLogging.request_logger_configuration.user_info_getter.call(headers)
87
103
  end
88
104
 
105
+ def get_correlation_id(env, headers)
106
+ PierLogging.request_logger_configuration.correlation_id_getter(env, headers) || headers['X-CORRELATION-ID']
107
+ end
108
+
89
109
  def parse_body(body)
90
110
  body_object = get_body_object(body)
91
111
  Oj.load(body_object, allow_blank: true)
@@ -99,11 +119,11 @@ module PierLogging
99
119
  body
100
120
  end
101
121
 
102
- def redact_hash(hash)
122
+ def redact_hash(hash, replace_keys = REDACT_REPLACE_KEYS, replace_by = REDACT_REPLACE_BY)
103
123
  hash.traverse do |k,v|
104
- should_redact = REDACT_REPLACE_KEYS.any?{ |regex| k =~regex }
124
+ should_redact = replace_keys.any?{ |regex| k =~regex }
105
125
  if (should_redact)
106
- [k, REDACT_REPLACE_BY]
126
+ [k, replace_by]
107
127
  else
108
128
  [k, v]
109
129
  end
@@ -125,4 +145,4 @@ module PierLogging
125
145
  500
126
146
  end
127
147
  end
128
- end
148
+ end
@@ -1,3 +1,3 @@
1
1
  module PierLogging
2
- VERSION = "0.1.13"
2
+ VERSION = "0.2.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pier_logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mauricio Banduk
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-09 00:00:00.000000000 Z
11
+ date: 2020-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ougai