zgcp_toolkit 1.0.0 → 1.2.2

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: 84c4f7b62ed93f221db66092956a7453fd48b7ff1c89b2f826c8c4a75e265cc5
4
- data.tar.gz: 19455250ff04e244d99487919385aabc21337289457780beab27663b7fb3f639
3
+ metadata.gz: 6a48846da4e9363d9e5319cf4bfa71e9649f0759e6dd57aa4039b6e93c2976f2
4
+ data.tar.gz: da68f0383381c5e35d6cb830b70d736b2992390e39ef3ce55acd5ce37a629308
5
5
  SHA512:
6
- metadata.gz: 06ae78cb77e1ad779e7e19e1093b47dd2e2ee96ed32f6020a25dc1b49d4b1e2c4ee442f326f5603820dd02170b515e33ae7e142d5264104666fa9a131cf9a8a6
7
- data.tar.gz: 0bf4ee4bca3bc738a4ea06e9b18a7cef34ece61e5c90353767cfc8bec4b7cd438bd7501a1179b3d00b34cf96226dc16b747b3aac20a6821837d489bb12ad474a
6
+ metadata.gz: 63059b872d5538d3fba942a482a7c1e642d68409089f991938da231b0f6e4c902f6bd50c9a39c518a7ee5167588de70672884c8cf99307b361d19ea2416c5d17
7
+ data.tar.gz: 5aff4f67e3b79e90718496a4980480dd9a7d7c928cbb2486363cce89c3df980e2ef830acc5c3843693b0ced4cf957ad71d53fec204a880a90ff598b6eca79f67
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?
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,5 @@
1
+ require 'google/cloud/logging'
2
+
1
3
  module ZgcpToolkit
2
4
  class Logger
3
5
  class GoogleCloudLogging
@@ -1,3 +1,3 @@
1
1
  module ZgcpToolkit
2
- VERSION = '1.0.0'
2
+ VERSION = '1.2.2'
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.0.0
4
+ version: 1.2.2
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-07-29 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