zgcp_toolkit 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 691381f36c471f3cfbf429041d6fb30398115834b1e7f996a92bdb62a5c189f3
4
- data.tar.gz: f07d99fdbea33895b07542d9744c5682e499ffdb3c2f7bdaea216f3a146f330a
3
+ metadata.gz: cd687c8e796176929ce117783a4d5f9f9948a27260d744feee40c497d670f5b0
4
+ data.tar.gz: 83c0d180249472a52495955606395869804c8c4a26732e308bfc670cd67124f8
5
5
  SHA512:
6
- metadata.gz: fb1188320cfcc660b9dde35e862c51fcb4ff81d2fef9cd3bce349f3b1e6ad8f2c7f1c59716eab35067209a85e55ffe2b0577a07d555fa6bddcc836b4589da210
7
- data.tar.gz: 95cf1705da9ce68c5c4ae128cff61933e840096604db4a77e3668c72541a733c505ba535b4711669a643f92fa6b71549e8555c347980c299a5849bdfe1089423
6
+ metadata.gz: bd1d70407f154d0440f31300d8a577e37066fa95f5871b04111c9b2ce7524f281fc7afa61eb498becf0d369c598e2b8d85aae2b0dda23c803c84baa398b5b458
7
+ data.tar.gz: b7982e5efdd431ba08d0c99dff3ac02d063199dd5354c49af5b90e94f70d0d7375f405ab90786ece8d13cd7ed9824ca6796a1ad5b678dc648bcfa0e38bdd5ee9
data/README.md CHANGED
@@ -72,6 +72,9 @@ rescue_from StandardError do |e|
72
72
  logger = ZgcpToolkit::Logger.new(Rails.env)
73
73
  logger.error_request(e, request)
74
74
 
75
+ # You can report error (Error Reporting) with:
76
+ # ZgcpToolkit::Logger.report_error_request(e, request)
77
+
75
78
  # If you want send notity to slack
76
79
  # logger.error_request(e, request, push_slack: true)
77
80
 
data/lib/zgcp_toolkit.rb CHANGED
@@ -3,5 +3,6 @@ require "zgcp_toolkit/version"
3
3
  module ZgcpToolkit; end
4
4
 
5
5
  require 'zgcp_toolkit/logger'
6
+ require 'zgcp_toolkit/formatter/request'
6
7
  require 'zgcp_toolkit/generators/templates/zgcp_toolkit'
7
8
  require 'zgcp_toolkit/generators/zgcp_toolkit_generator'
@@ -0,0 +1,101 @@
1
+ module ZgcpToolkit::Formatter
2
+ class Request
3
+ FILTERED_ENV_LIST = %w(
4
+ CONTENT_LENGTH
5
+ CONTENT_TYPE
6
+ HTTP_ACCEPT
7
+ HTTP_ACCEPT_ENCODING
8
+ HTTP_ACCEPT_LANGUAGE
9
+ HTTP_CACHE_CONTROL
10
+ HTTP_COOKIE
11
+ HTTP_HOST
12
+ HTTP_ORIGIN
13
+ HTTP_REFERER
14
+ HTTP_SEC_CH_UA
15
+ HTTP_SEC_CH_UA_MOBILE
16
+ HTTP_SEC_FETCH_DEST
17
+ HTTP_SEC_FETCH_MODE
18
+ HTTP_SEC_FETCH_SITE
19
+ HTTP_SEC_FETCH_USER
20
+ HTTP_UPGRADE_INSECURE_REQUESTS
21
+ HTTP_USER_AGENT
22
+ HTTP_VERSION
23
+ HTTP_VIA
24
+ HTTP_X_FORWARDED_FOR
25
+ HTTP_X_FORWARDED_PROTO
26
+ ORIGINAL_FULLPATH
27
+ ORIGINAL_SCRIPT_NAME
28
+ PATH_INFO
29
+ QUERY_STRING
30
+ REMOTE_ADDR
31
+ REMOTE_PORT
32
+ REQUEST_METHOD
33
+ REQUEST_URI
34
+ SERVER_NAME
35
+ SERVER_PORT
36
+ SERVER_PROTOCOL
37
+ ).freeze
38
+
39
+ def call(request)
40
+ log_object = {}
41
+ log_object[:request] = request_filter(request)
42
+ log_object[:session] = session_filter(request)
43
+ log_object[:environment] = environment_filter(request)
44
+ log_object
45
+ end
46
+
47
+ def format_for_report(request)
48
+ log_object = {}
49
+ log_object[:request] = beauty_format request_filter(request)
50
+ log_object[:session] = beauty_format session_filter(request)
51
+ log_object[:environment] = beauty_format separation_environment_filter(request)
52
+
53
+ result = log_object.map { |key, value| "#{key.capitalize}:\n#{value}\n" }
54
+ result.join("\n")
55
+ end
56
+
57
+ private
58
+
59
+ def beauty_format(data)
60
+ data.map { |k,v| "#{k.to_s.indent(4)}: #{v}" }.join("\n")
61
+ end
62
+
63
+ def environment_filter(request)
64
+ result = {}
65
+ request.filtered_env.keys.each do |key|
66
+ result[key] = request.filtered_env[key]
67
+ end
68
+ result
69
+ end
70
+
71
+ def separation_environment_filter(request)
72
+ result = {}
73
+ FILTERED_ENV_LIST.each do |key|
74
+ result[key] = request.filtered_env[key]
75
+ end
76
+ result
77
+ end
78
+
79
+ def session_filter(request)
80
+ result = {}
81
+ result[:session_id] = request.ssl? ? "[FILTERED]" : request.session['session_id'] || request.env['rack.session.options'][:id].inspect
82
+ result[:data_session] = request.session.to_hash
83
+ result
84
+ end
85
+
86
+ def request_filter(request)
87
+ result = {}
88
+ result[:url] = request.url
89
+ result[:request_method] = request.request_method
90
+ result[:ip_address] = request.remote_ip
91
+ result[:parameters] = request.filtered_parameters.inspect
92
+ result[:timestamp] = Time.current
93
+ result[:server] = Socket.gethostname
94
+ result[:process] = $$
95
+ if defined?(Rails) && Rails.respond_to?(:root)
96
+ result[:rails_root] = Rails.root
97
+ end
98
+ result
99
+ end
100
+ end
101
+ end
@@ -1,4 +1,5 @@
1
1
  require 'dry/configurable'
2
+ require "google/cloud/error_reporting"
2
3
  require 'zgcp_toolkit/logger/stdout'
3
4
  require 'zgcp_toolkit/logger/google_cloud_logging'
4
5
 
@@ -30,13 +31,20 @@ module ZgcpToolkit
30
31
  begin
31
32
  yield(logger) if block_given?
32
33
  rescue StandardError => e
33
- logger.error(e, push_slack: logger.send_unexpected_error_to_slack)
34
- logger.flush!
34
+ Google::Cloud::ErrorReporting.report e
35
35
  end
36
36
 
37
37
  logger
38
38
  end
39
39
 
40
+ def report_error_request(error, request)
41
+ message = ZgcpToolkit::Formatter::Request.new.format_for_report(request)
42
+
43
+ Google::Cloud::ErrorReporting.report error do |event|
44
+ event.message = event.message + "\n\n" + message
45
+ end
46
+ end
47
+
40
48
  private
41
49
 
42
50
  def valid_name?(log_name)
@@ -58,18 +66,18 @@ module ZgcpToolkit
58
66
  end
59
67
 
60
68
  [:debug, :info, :warn, :error, :fatal, :unknown].each do |log_level_method|
61
- define_method(log_level_method) do |log, push_slack: false|
69
+ define_method(log_level_method) do |log, **kwargs|
62
70
  log_object =
63
71
  case log
64
72
  when StandardError
65
73
  obj = { message: log.message, backtrace: log.backtrace.first(backtrace_limit) }
66
- obj.merge!(push_slack: true) if push_slack
74
+ obj.merge!(kwargs)
67
75
  obj
68
76
  when Hash
69
77
  log
70
78
  when String
71
79
  obj = { message: log }
72
- obj.merge!(push_slack: true) if push_slack
80
+ obj.merge!(kwargs)
73
81
  obj
74
82
  else
75
83
  raise UnsupportedLogType, "#{log.class.name} is not supported!"
@@ -79,7 +87,7 @@ module ZgcpToolkit
79
87
  end
80
88
 
81
89
  def error_request(error, request, **args)
82
- filter_request_params = format_request_env(request)
90
+ filter_request_params = ZgcpToolkit::Formatter::Request.new.call(request)
83
91
 
84
92
  error({ message: error.message, backtrace: error.backtrace.first(backtrace_limit) }.merge!(filter_request_params).merge!(args))
85
93
  end
@@ -87,45 +95,5 @@ module ZgcpToolkit
87
95
  def flush!
88
96
  loggers.each { |a| a.flush! }
89
97
  end
90
-
91
- private
92
-
93
- def format_request_env(request)
94
- log_object = {}
95
- log_object[:request] = request_filter(request)
96
- log_object[:session] = session_filter(request)
97
- log_object[:environment] = environment_filter(request)
98
- log_object
99
- end
100
-
101
- def environment_filter(request)
102
- result = {}
103
- request.filtered_env.keys.each do |key|
104
- result[key] = request.filtered_env[key]
105
- end
106
- result
107
- end
108
-
109
- def session_filter(request)
110
- result = {}
111
- result[:session_id] = request.ssl? ? "[FILTERED]" : request.session['session_id'] || request.env['rack.session.options'][:id].inspect
112
- result[:data_session] = request.session.to_hash
113
- result
114
- end
115
-
116
- def request_filter(request)
117
- result = {}
118
- result[:url] = request.url
119
- result[:request_method] = request.request_method
120
- result[:ip_address] = request.remote_ip
121
- result[:parameters] = request.filtered_parameters.inspect
122
- result[:timestamp] = Time.current
123
- result[:server] = Socket.gethostname
124
- result[:process] = $$
125
- if defined?(Rails) && Rails.respond_to?(:root)
126
- result[:rails_root] = Rails.root
127
- end
128
- result
129
- end
130
98
  end
131
99
  end
@@ -1,3 +1,3 @@
1
1
  module ZgcpToolkit
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
data/zgcp_toolkit.gemspec CHANGED
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_dependency 'stackdriver', '~> 0.20.1'
26
26
  spec.add_dependency 'dry-configurable', '~> 0.11.6'
27
+ spec.add_dependency 'google-cloud-error_reporting', '~> 0.42.0'
27
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zgcp_toolkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ZIGExN VeNtura developers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-09 00:00:00.000000000 Z
11
+ date: 2021-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: stackdriver
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.11.6
41
+ - !ruby/object:Gem::Dependency
42
+ name: google-cloud-error_reporting
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.42.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.42.0
41
55
  description: Manage essential toolset
42
56
  email: kuruma-dev@zigexn.vn
43
57
  executables: []
@@ -55,6 +69,7 @@ files:
55
69
  - bin/console
56
70
  - bin/setup
57
71
  - lib/zgcp_toolkit.rb
72
+ - lib/zgcp_toolkit/formatter/request.rb
58
73
  - lib/zgcp_toolkit/generators/templates/zgcp_toolkit.rb
59
74
  - lib/zgcp_toolkit/generators/zgcp_toolkit_generator.rb
60
75
  - lib/zgcp_toolkit/logger.rb