dislogger 0.1.2 → 0.1.6
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36f02d278c361c1316f47a29bedad900e03183f2f40e750656cf200d01d80f66
|
4
|
+
data.tar.gz: 2d78928ccb2740d8eca3a15fc81e5cc0168c2730511417b2ece3167a9f973f18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 519c66523ab2f57d73f85cd06cbda35ceef6e7ae359164d45df6c2b1b30aadfe5e6828c5aa344c7862b6a89cea8807b46905b9c01bc1e135fc1da7d53a677519
|
7
|
+
data.tar.gz: 429ebbb1a4ee2faf591092e3cd532a519fc65d47f7a26a51a397298a31e2651dd766b4e0fdbd7cb06df689ba59a5d188f087d4b59a8c1502bd72508a40acf1ca
|
data/dislogger.gemspec
CHANGED
@@ -10,15 +10,15 @@ Gem::Specification.new do |spec|
|
|
10
10
|
|
11
11
|
spec.summary = "A Rails gem for standardized error handling with Discord notifications"
|
12
12
|
spec.description = "DisLogger provides a robust error handling system for Rails applications with automatic Discord notifications and standardized JSON responses"
|
13
|
-
spec.homepage = "https://github.com/
|
13
|
+
spec.homepage = "https://github.com/nduartex/dislogger"
|
14
14
|
spec.license = "MIT"
|
15
15
|
spec.required_ruby_version = ">= 2.7.0"
|
16
16
|
|
17
17
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
18
18
|
|
19
19
|
spec.metadata["homepage_uri"] = spec.homepage
|
20
|
-
spec.metadata["source_code_uri"] = "https://github.com/
|
21
|
-
spec.metadata["changelog_uri"] = "https://github.com/
|
20
|
+
spec.metadata["source_code_uri"] = "https://github.com/nduartex/dislogger"
|
21
|
+
spec.metadata["changelog_uri"] = "https://github.com/nduartex/dislogger/blob/main/CHANGELOG.md"
|
22
22
|
|
23
23
|
# Specify which files should be added to the gem when it is released.
|
24
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -48,4 +48,4 @@ Gem::Specification.new do |spec|
|
|
48
48
|
|
49
49
|
# For more information and examples about making a new gem, check out our
|
50
50
|
# guide at: https://bundler.io/guides/creating_gem.html
|
51
|
-
end
|
51
|
+
end
|
@@ -11,10 +11,10 @@ module Dislogger
|
|
11
11
|
|
12
12
|
def initialize
|
13
13
|
@discord_webhook_url = nil
|
14
|
-
@environment = nil
|
15
14
|
@bot_username = 'Error Logger'
|
16
15
|
@backtrace_lines_limit = 5
|
17
16
|
@enabled_environments = %w[production staging]
|
17
|
+
@environment = nil
|
18
18
|
@error_color_map = {
|
19
19
|
500 => 15158332, # Red for server errors
|
20
20
|
404 => 3447003, # Blue for not found
|
@@ -24,6 +24,14 @@ module Dislogger
|
|
24
24
|
}
|
25
25
|
end
|
26
26
|
|
27
|
+
def validate!
|
28
|
+
raise Errors::ConfigurationError, 'Discord webhook URL is required' unless discord_webhook_url.present?
|
29
|
+
raise Errors::ConfigurationError, 'Bot username is required' unless bot_username.present?
|
30
|
+
raise Errors::ConfigurationError, 'Enabled environments must be an array' unless enabled_environments.is_a?(Array)
|
31
|
+
raise Errors::ConfigurationError, 'Environment must be present' unless environment.present?
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
27
35
|
def enabled?
|
28
36
|
return false if environment.nil? || enabled_environments.empty?
|
29
37
|
enabled_environments.include?(environment)
|
@@ -8,11 +8,11 @@ module Dislogger
|
|
8
8
|
username: @config.bot_username,
|
9
9
|
embeds: [
|
10
10
|
{
|
11
|
-
title:
|
12
|
-
description:
|
13
|
-
color:
|
11
|
+
title: format_title,
|
12
|
+
description: format_description,
|
13
|
+
color: get_error_color,
|
14
14
|
fields: build_fields,
|
15
|
-
timestamp: Time.current.utc.
|
15
|
+
timestamp: Time.current.utc.iso8601
|
16
16
|
}
|
17
17
|
]
|
18
18
|
}
|
@@ -20,22 +20,46 @@ module Dislogger
|
|
20
20
|
|
21
21
|
private
|
22
22
|
|
23
|
+
def format_title
|
24
|
+
"#{@config.environment.capitalize} - Error Notification (#{@status})"
|
25
|
+
end
|
26
|
+
|
27
|
+
def format_description
|
28
|
+
return @message if @message.is_a?(String)
|
29
|
+
return @message.message if @message.respond_to?(:message)
|
30
|
+
@message.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_error_color
|
34
|
+
@config.error_color_map[@status] || @config.error_color_map[:default]
|
35
|
+
end
|
36
|
+
|
23
37
|
def build_fields
|
24
38
|
fields = [
|
25
39
|
{ name: 'Status Code', value: @status.to_s, inline: true },
|
26
40
|
{ name: 'Environment', value: @config.environment, inline: true }
|
27
41
|
]
|
28
42
|
|
29
|
-
if @backtrace
|
43
|
+
if @backtrace && !@backtrace.empty?
|
30
44
|
fields << {
|
31
45
|
name: 'Backtrace',
|
32
|
-
value: @backtrace
|
46
|
+
value: format_backtrace(@backtrace),
|
33
47
|
inline: false
|
34
48
|
}
|
35
49
|
end
|
36
50
|
|
37
51
|
fields
|
38
52
|
end
|
53
|
+
|
54
|
+
def format_backtrace(backtrace)
|
55
|
+
return 'No backtrace available' if backtrace.nil? || backtrace.empty?
|
56
|
+
|
57
|
+
trace = backtrace.first(@config.backtrace_lines_limit)
|
58
|
+
if trace.length >= @config.backtrace_lines_limit
|
59
|
+
trace << "... (truncated)"
|
60
|
+
end
|
61
|
+
trace.join("\n")
|
62
|
+
end
|
39
63
|
end
|
40
64
|
end
|
41
65
|
end
|
@@ -8,6 +8,13 @@ module Dislogger
|
|
8
8
|
|
9
9
|
formatted_message = format_message(message, status, backtrace)
|
10
10
|
send_notification(formatted_message)
|
11
|
+
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
|
17
|
+
false
|
11
18
|
end
|
12
19
|
|
13
20
|
protected
|
@@ -22,17 +29,27 @@ module Dislogger
|
|
22
29
|
end
|
23
30
|
|
24
31
|
def send_notification(payload)
|
25
|
-
HTTParty.post(
|
32
|
+
response = HTTParty.post(
|
26
33
|
@config.discord_webhook_url,
|
27
34
|
body: payload.to_json,
|
28
35
|
headers: { 'Content-Type' => 'application/json' }
|
29
36
|
)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
37
|
+
|
38
|
+
unless response.success?
|
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
|
45
|
+
return false
|
35
46
|
end
|
47
|
+
|
48
|
+
true
|
49
|
+
end
|
50
|
+
|
51
|
+
def enabled?
|
52
|
+
@config.enabled?
|
36
53
|
end
|
37
54
|
end
|
38
55
|
end
|
data/lib/dislogger/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dislogger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nelson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-03-
|
11
|
+
date: 2025-03-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -193,14 +193,14 @@ files:
|
|
193
193
|
- lib/dislogger/railtie.rb
|
194
194
|
- lib/dislogger/version.rb
|
195
195
|
- sig/dislogger.rbs
|
196
|
-
homepage: https://github.com/
|
196
|
+
homepage: https://github.com/nduartex/dislogger
|
197
197
|
licenses:
|
198
198
|
- MIT
|
199
199
|
metadata:
|
200
200
|
allowed_push_host: https://rubygems.org
|
201
|
-
homepage_uri: https://github.com/
|
202
|
-
source_code_uri: https://github.com/
|
203
|
-
changelog_uri: https://github.com/
|
201
|
+
homepage_uri: https://github.com/nduartex/dislogger
|
202
|
+
source_code_uri: https://github.com/nduartex/dislogger
|
203
|
+
changelog_uri: https://github.com/nduartex/dislogger/blob/main/CHANGELOG.md
|
204
204
|
post_install_message:
|
205
205
|
rdoc_options: []
|
206
206
|
require_paths:
|