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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 691381f36c471f3cfbf429041d6fb30398115834b1e7f996a92bdb62a5c189f3
4
- data.tar.gz: f07d99fdbea33895b07542d9744c5682e499ffdb3c2f7bdaea216f3a146f330a
3
+ metadata.gz: e1a9df2f0bcc6d3287fbe692e9e2c4fc9f6709302b3d6e43b6b5962e78571351
4
+ data.tar.gz: 3253cdf248c707f9bd4c8e11c97d621fe224f12c80132bef53ec137f70f30780
5
5
  SHA512:
6
- metadata.gz: fb1188320cfcc660b9dde35e862c51fcb4ff81d2fef9cd3bce349f3b1e6ad8f2c7f1c59716eab35067209a85e55ffe2b0577a07d555fa6bddcc836b4589da210
7
- data.tar.gz: 95cf1705da9ce68c5c4ae128cff61933e840096604db4a77e3668c72541a733c505ba535b4711669a643f92fa6b71549e8555c347980c299a5849bdfe1089423
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"], push_slack: true)
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
- logger = ZgcpToolkit::Logger.new(Rails.env)
73
- logger.error_request(e, request)
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
@@ -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,5 +1,7 @@
1
- loggers = [:std_out]
2
-
3
- loggers.push(:google_cloud_logging) unless Rails.env.development?
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
@@ -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)
@@ -47,29 +55,28 @@ module ZgcpToolkit
47
55
 
48
56
  DEFAULT_BACKTRACE_LIMIT = 10
49
57
 
50
- attr_accessor :send_unexpected_error_to_slack, :backtrace_limit
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, push_slack: false|
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!(push_slack: true) if push_slack
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!(push_slack: true) if push_slack
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 = format_request_env(request)
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
@@ -1,3 +1,3 @@
1
1
  module ZgcpToolkit
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.3'
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.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-06-09 00:00:00.000000000 Z
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.1.4
101
+ rubygems_version: 3.0.8
87
102
  signing_key:
88
103
  specification_version: 4
89
104
  summary: GCP Toolkit