zgcp_toolkit 1.1.0 → 1.2.0
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 +4 -4
- data/README.md +3 -0
- data/lib/zgcp_toolkit.rb +1 -0
- data/lib/zgcp_toolkit/formatter/request.rb +101 -0
- data/lib/zgcp_toolkit/logger.rb +14 -46
- data/lib/zgcp_toolkit/version.rb +1 -1
- data/zgcp_toolkit.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd687c8e796176929ce117783a4d5f9f9948a27260d744feee40c497d670f5b0
|
4
|
+
data.tar.gz: 83c0d180249472a52495955606395869804c8c4a26732e308bfc670cd67124f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
@@ -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
|
data/lib/zgcp_toolkit/logger.rb
CHANGED
@@ -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
|
-
|
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,
|
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!(
|
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!(
|
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 =
|
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
|
data/lib/zgcp_toolkit/version.rb
CHANGED
data/zgcp_toolkit.gemspec
CHANGED
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.
|
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-
|
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
|