zgcp_toolkit 1.1.0 → 1.2.3
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 +4 -19
- data/lib/zgcp_toolkit.rb +1 -0
- data/lib/zgcp_toolkit/formatter/request.rb +101 -0
- data/lib/zgcp_toolkit/generators/templates/zgcp_toolkit.rb +5 -3
- data/lib/zgcp_toolkit/logger.rb +15 -48
- data/lib/zgcp_toolkit/version.rb +1 -1
- data/zgcp_toolkit.gemspec +1 -0
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1a9df2f0bcc6d3287fbe692e9e2c4fc9f6709302b3d6e43b6b5962e78571351
|
4
|
+
data.tar.gz: 3253cdf248c707f9bd4c8e11c97d621fe224f12c80132bef53ec137f70f30780
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d43f0d91122f12bbe3e160bb57643705ab21d039c5be263d5da333da90e405f4d33b57ca15cc4268a6121b1c8c3fe8000180d71a465983a178cd812aa1aa24c3
|
7
|
+
data.tar.gz: 32993c081275fb71b82b9e102b5dda2696781cda57b03d9527daa94ec5324867a81a07b5834190f3384869176262e6f7e2bcb83e622c5e4e533253c24f9e6f9e
|
data/README.md
CHANGED
@@ -6,6 +6,7 @@ Manage integration between Rails & Google Cloud services.
|
|
6
6
|
Add this line to your application's Gemfile:
|
7
7
|
|
8
8
|
```ruby
|
9
|
+
gem 'stackdriver' # Stackdriver gem auto installs middlewares to catch errors if you are running a Rails app.
|
9
10
|
gem 'zgcp_toolkit'
|
10
11
|
```
|
11
12
|
|
@@ -42,23 +43,10 @@ end
|
|
42
43
|
logger = ZgcpToolkit::Logger.new(:log_name)
|
43
44
|
logger.info("Heyyyyyy!")
|
44
45
|
logger.error(message: "Heyyyyy!", backtrace: ["line-1", "line-2"])
|
45
|
-
logger.error(message: "Hello Bug !!", backtrace: ["line-1", "line-2"]
|
46
|
+
logger.error(message: "Hello Bug !!", backtrace: ["line-1", "line-2"])
|
46
47
|
logger.warn("Hey hey nyc!")
|
47
48
|
```
|
48
49
|
|
49
|
-
- Set `send_unexpected_error_to_slack` to `false` will delete `push_slack` key from unexpected error log.
|
50
|
-
|
51
|
-
```ruby
|
52
|
-
namespace :test_log do
|
53
|
-
task do: :environment
|
54
|
-
ZgcpToolkit::Logger.create(:log_name) do |logger|
|
55
|
-
logger.send_unexpected_error_to_slack = false
|
56
|
-
raise 'errors'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
```
|
61
|
-
|
62
50
|
### Controller
|
63
51
|
|
64
52
|
You can send controller errors to Google Cloud Loggings
|
@@ -69,11 +57,8 @@ You can send controller errors to Google Cloud Loggings
|
|
69
57
|
rescue_from StandardError do |e|
|
70
58
|
raise e if Rails.env.development?
|
71
59
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
# If you want send notity to slack
|
76
|
-
# logger.error_request(e, request, push_slack: true)
|
60
|
+
# Useful ENV information will also be sent along with the error
|
61
|
+
ZgcpToolkit::Logger.report_error_request(e, request)
|
77
62
|
|
78
63
|
head :internal_server_error
|
79
64
|
end
|
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
|
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
if Rails.env.development? || Rails.env.test?
|
2
|
+
loggers = [:std_out]
|
3
|
+
else
|
4
|
+
loggers = [:google_cloud_logging]
|
5
|
+
end
|
4
6
|
|
5
7
|
ZgcpToolkit::Logger.config.registered_loggers = loggers
|
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)
|
@@ -47,29 +55,28 @@ module ZgcpToolkit
|
|
47
55
|
|
48
56
|
DEFAULT_BACKTRACE_LIMIT = 10
|
49
57
|
|
50
|
-
attr_accessor :
|
58
|
+
attr_accessor :backtrace_limit
|
51
59
|
attr_reader :loggers, :log_name
|
52
60
|
|
53
61
|
def initialize(log_name)
|
54
62
|
@log_name = log_name
|
55
|
-
@send_unexpected_error_to_slack = true
|
56
63
|
@backtrace_limit = DEFAULT_BACKTRACE_LIMIT
|
57
64
|
@loggers = ZgcpToolkit::Logger.registered_loggers.map { |logger| logger.new(log_name) }
|
58
65
|
end
|
59
66
|
|
60
67
|
[:debug, :info, :warn, :error, :fatal, :unknown].each do |log_level_method|
|
61
|
-
define_method(log_level_method) do |log,
|
68
|
+
define_method(log_level_method) do |log, **kwargs|
|
62
69
|
log_object =
|
63
70
|
case log
|
64
71
|
when StandardError
|
65
72
|
obj = { message: log.message, backtrace: log.backtrace.first(backtrace_limit) }
|
66
|
-
obj.merge!(
|
73
|
+
obj.merge!(kwargs)
|
67
74
|
obj
|
68
75
|
when Hash
|
69
76
|
log
|
70
77
|
when String
|
71
78
|
obj = { message: log }
|
72
|
-
obj.merge!(
|
79
|
+
obj.merge!(kwargs)
|
73
80
|
obj
|
74
81
|
else
|
75
82
|
raise UnsupportedLogType, "#{log.class.name} is not supported!"
|
@@ -79,7 +86,7 @@ module ZgcpToolkit
|
|
79
86
|
end
|
80
87
|
|
81
88
|
def error_request(error, request, **args)
|
82
|
-
filter_request_params =
|
89
|
+
filter_request_params = ZgcpToolkit::Formatter::Request.new.call(request)
|
83
90
|
|
84
91
|
error({ message: error.message, backtrace: error.backtrace.first(backtrace_limit) }.merge!(filter_request_params).merge!(args))
|
85
92
|
end
|
@@ -87,45 +94,5 @@ module ZgcpToolkit
|
|
87
94
|
def flush!
|
88
95
|
loggers.each { |a| a.flush! }
|
89
96
|
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
97
|
end
|
131
98
|
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.3
|
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-
|
11
|
+
date: 2021-08-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
|
@@ -83,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
98
|
- !ruby/object:Gem::Version
|
84
99
|
version: '0'
|
85
100
|
requirements: []
|
86
|
-
rubygems_version: 3.
|
101
|
+
rubygems_version: 3.0.8
|
87
102
|
signing_key:
|
88
103
|
specification_version: 4
|
89
104
|
summary: GCP Toolkit
|