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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0b7ddd219546d4b47916d9e0cfd1303679ed1a3f4befa6675a7be486ada7de25
4
- data.tar.gz: '001685aeefc4f82fd7a07f8a539ea9c737de5a1760eebdc0799660ea62c4087d'
3
+ metadata.gz: 9a274a53633279d495fd56b23a36c52730b7ca8e8c848f918e88be497b3d1dcf
4
+ data.tar.gz: 7fb1ce90ab63bbff72470682564c11772d5985e32195c46681daa8daf95c83ac
5
5
  SHA512:
6
- metadata.gz: 40495b36577cce4bb00ea8ab38b74019b4792e2ca6452c1edd735f4042557403ab382bb70b08f94e4fb952b7e5240c1828057a5068f76aad4c1da5ba6be1fc41
7
- data.tar.gz: 2d90483f3e1db1969355be2565384cde9f38f7048e5dd4f7573203a47bb814f3ba45bf11554bf9e0dd71c4751e0d7fcece7d547664afa8f2959bc98fbdba0eb9
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
- rescue_from StandardError, with: :handle_internal_server_error
11
- rescue_from ActiveRecord::RecordNotFound, with: :handle_not_found
12
- rescue_from ActiveRecord::RecordInvalid, with: :handle_unprocessable_entity
13
- rescue_from ActionController::ParameterMissing, with: :handle_unprocessable_entity
14
- rescue_from Pundit::NotAuthorizedError, with: :handle_forbidden if defined?(Pundit)
15
- rescue_from CanCan::AccessDenied, with: :handle_forbidden if defined?(CanCan)
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.notify(
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
- if defined?(Rails) && Rails.logger
13
- Rails.logger.error("Discord notification failed: #{e.message}")
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
- if defined?(Rails) && Rails.logger
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dislogger
4
- VERSION = "0.1.8"
4
+ VERSION = "0.1.9"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dislogger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nelson