dislogger 0.1.8 → 0.1.9
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/lib/dislogger/error_handler.rb +25 -8
- data/lib/dislogger/notifiers/discord_notifier.rb +33 -12
- data/lib/dislogger/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a274a53633279d495fd56b23a36c52730b7ca8e8c848f918e88be497b3d1dcf
|
4
|
+
data.tar.gz: 7fb1ce90ab63bbff72470682564c11772d5985e32195c46681daa8daf95c83ac
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64dc81ec91e4c71e6e168aadd71ab5a7d6abd4a632a7f192a7373cf47a816a4365f232bcf337b834c29c12a1abba3c71fd660305e2e8a66bde392b4d24342f9a
|
7
|
+
data.tar.gz: 2f55c155f9158f0252599b34353546d65bb14b9ea447efb35ce9cc59ea9b0a58a05777775cdfc32a352065eb42d9026c169f3cf4445d01a4ca767f3be3b690da
|
@@ -7,16 +7,30 @@ module Dislogger
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
|
9
9
|
included do
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
if ancestors.include?(ActionController::API) || ancestors.include?(ActionController::Base)
|
11
|
+
rescue_from Exception, with: :handle_exception
|
12
|
+
rescue_from StandardError, with: :handle_internal_server_error
|
13
|
+
rescue_from ActiveRecord::RecordNotFound, with: :handle_not_found
|
14
|
+
rescue_from ActiveRecord::RecordInvalid, with: :handle_unprocessable_entity
|
15
|
+
rescue_from ActionController::ParameterMissing, with: :handle_unprocessable_entity
|
16
|
+
rescue_from Pundit::NotAuthorizedError, with: :handle_forbidden if defined?(Pundit)
|
17
|
+
rescue_from CanCan::AccessDenied, with: :handle_forbidden if defined?(CanCan)
|
18
|
+
end
|
16
19
|
end
|
17
20
|
|
18
21
|
private
|
19
22
|
|
23
|
+
def handle_exception(exception)
|
24
|
+
Rails.logger.error("Dislogger caught exception: #{exception.class.name} - #{exception.message}")
|
25
|
+
Rails.logger.error(exception.backtrace.join("\n")) if exception.backtrace
|
26
|
+
|
27
|
+
notify_and_render_error(
|
28
|
+
message: "#{exception.class.name}: #{exception.message}",
|
29
|
+
status: :internal_server_error,
|
30
|
+
backtrace: exception.backtrace
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
20
34
|
def handle_not_found(exception)
|
21
35
|
notify_and_render_error(
|
22
36
|
message: exception.message.presence || 'Resource not found',
|
@@ -42,7 +56,7 @@ module Dislogger
|
|
42
56
|
|
43
57
|
def handle_internal_server_error(exception)
|
44
58
|
notify_and_render_error(
|
45
|
-
message: 'Internal Server Error',
|
59
|
+
message: exception.message || 'Internal Server Error',
|
46
60
|
status: :internal_server_error,
|
47
61
|
backtrace: exception.backtrace
|
48
62
|
)
|
@@ -51,12 +65,15 @@ module Dislogger
|
|
51
65
|
def notify_and_render_error(message:, status:, details: nil, backtrace: nil)
|
52
66
|
status_code = Rack::Utils::SYMBOL_TO_STATUS_CODE[status]
|
53
67
|
|
54
|
-
Notifiers::DiscordNotifier.new
|
68
|
+
notifier = Notifiers::DiscordNotifier.new
|
69
|
+
notification_result = notifier.notify(
|
55
70
|
message: message,
|
56
71
|
status: status_code,
|
57
72
|
backtrace: backtrace
|
58
73
|
)
|
59
74
|
|
75
|
+
Rails.logger.info("Dislogger notification result: #{notification_result}") if defined?(Rails)
|
76
|
+
|
60
77
|
render_error(message, status, details)
|
61
78
|
end
|
62
79
|
|
@@ -4,22 +4,21 @@ module Dislogger
|
|
4
4
|
module Notifiers
|
5
5
|
class DiscordNotifier < BaseNotifier
|
6
6
|
def notify(message:, status:, backtrace: nil)
|
7
|
-
return unless enabled? && @config.discord_webhook_url.present?
|
7
|
+
return false unless enabled? && @config.discord_webhook_url.present?
|
8
8
|
|
9
|
+
log_info("Attempting to send Discord notification")
|
9
10
|
formatted_message = format_message(message, status, backtrace)
|
10
11
|
send_notification(formatted_message)
|
11
12
|
rescue StandardError => e
|
12
|
-
|
13
|
-
|
14
|
-
else
|
15
|
-
warn("Discord notification failed: #{e.message}")
|
16
|
-
end
|
13
|
+
log_error("Discord notification failed: #{e.message}")
|
14
|
+
log_error(e.backtrace.join("\n")) if e.backtrace
|
17
15
|
false
|
18
16
|
end
|
19
17
|
|
20
18
|
protected
|
21
19
|
|
22
20
|
def format_message(message, status, backtrace)
|
21
|
+
log_info("Formatting Discord message")
|
23
22
|
Formatters::DiscordFormatter.new(
|
24
23
|
message: message,
|
25
24
|
status: status,
|
@@ -29,6 +28,7 @@ module Dislogger
|
|
29
28
|
end
|
30
29
|
|
31
30
|
def send_notification(payload)
|
31
|
+
log_info("Sending notification to Discord")
|
32
32
|
response = HTTParty.post(
|
33
33
|
@config.discord_webhook_url,
|
34
34
|
body: payload.to_json,
|
@@ -37,19 +37,40 @@ module Dislogger
|
|
37
37
|
|
38
38
|
unless response.success?
|
39
39
|
error_message = "Discord API Error: #{response.code} - #{response.body}"
|
40
|
-
|
41
|
-
Rails.logger.error(error_message)
|
42
|
-
else
|
43
|
-
warn(error_message)
|
44
|
-
end
|
40
|
+
log_error(error_message)
|
45
41
|
return false
|
46
42
|
end
|
47
43
|
|
44
|
+
log_info("Discord notification sent successfully")
|
48
45
|
true
|
46
|
+
rescue StandardError => e
|
47
|
+
log_error("Failed to send Discord notification: #{e.message}")
|
48
|
+
log_error(e.backtrace.join("\n")) if e.backtrace
|
49
|
+
false
|
49
50
|
end
|
50
51
|
|
51
52
|
def enabled?
|
52
|
-
@config.enabled?
|
53
|
+
result = @config.enabled?
|
54
|
+
log_info("Dislogger enabled? #{result} (environment: #{@config.environment}, enabled_environments: #{@config.enabled_environments})")
|
55
|
+
result
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def log_info(message)
|
61
|
+
if defined?(Rails) && Rails.logger
|
62
|
+
Rails.logger.info("[Dislogger] #{message}")
|
63
|
+
else
|
64
|
+
puts "[Dislogger] #{message}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def log_error(message)
|
69
|
+
if defined?(Rails) && Rails.logger
|
70
|
+
Rails.logger.error("[Dislogger] #{message}")
|
71
|
+
else
|
72
|
+
warn "[Dislogger] #{message}"
|
73
|
+
end
|
53
74
|
end
|
54
75
|
end
|
55
76
|
end
|
data/lib/dislogger/version.rb
CHANGED