rails_error_dashboard 0.1.1 → 0.1.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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +66 -21
  3. data/app/assets/stylesheets/rails_error_dashboard/_catppuccin_mocha.scss +107 -0
  4. data/app/assets/stylesheets/rails_error_dashboard/_components.scss +625 -0
  5. data/app/assets/stylesheets/rails_error_dashboard/_layout.scss +257 -0
  6. data/app/assets/stylesheets/rails_error_dashboard/_theme_variables.scss +203 -0
  7. data/app/assets/stylesheets/rails_error_dashboard/application.css +926 -15
  8. data/app/assets/stylesheets/rails_error_dashboard/application.css.map +7 -0
  9. data/app/assets/stylesheets/rails_error_dashboard/application.scss +61 -0
  10. data/app/controllers/rails_error_dashboard/errors_controller.rb +94 -1
  11. data/app/helpers/rails_error_dashboard/application_helper.rb +42 -4
  12. data/app/helpers/rails_error_dashboard/backtrace_helper.rb +91 -0
  13. data/app/helpers/rails_error_dashboard/overview_helper.rb +78 -0
  14. data/app/helpers/rails_error_dashboard/user_agent_helper.rb +118 -0
  15. data/app/models/rails_error_dashboard/error_comment.rb +27 -0
  16. data/app/models/rails_error_dashboard/error_log.rb +145 -0
  17. data/app/views/layouts/rails_error_dashboard.html.erb +796 -299
  18. data/app/views/layouts/rails_error_dashboard_old_backup.html.erb +383 -0
  19. data/app/views/rails_error_dashboard/errors/_error_row.html.erb +2 -0
  20. data/app/views/rails_error_dashboard/errors/_pattern_insights.html.erb +4 -4
  21. data/app/views/rails_error_dashboard/errors/_timeline.html.erb +167 -0
  22. data/app/views/rails_error_dashboard/errors/analytics.html.erb +138 -22
  23. data/app/views/rails_error_dashboard/errors/index.html.erb +83 -4
  24. data/app/views/rails_error_dashboard/errors/overview.html.erb +253 -0
  25. data/app/views/rails_error_dashboard/errors/platform_comparison.html.erb +29 -18
  26. data/app/views/rails_error_dashboard/errors/show.html.erb +353 -54
  27. data/config/routes.rb +7 -0
  28. data/db/migrate/20251226020000_add_workflow_fields_to_error_logs.rb +27 -0
  29. data/db/migrate/20251226020100_create_error_comments.rb +18 -0
  30. data/lib/generators/rails_error_dashboard/install/install_generator.rb +8 -2
  31. data/lib/generators/rails_error_dashboard/install/templates/initializer.rb +21 -0
  32. data/lib/rails_error_dashboard/commands/batch_delete_errors.rb +1 -1
  33. data/lib/rails_error_dashboard/commands/batch_resolve_errors.rb +2 -2
  34. data/lib/rails_error_dashboard/commands/log_error.rb +47 -9
  35. data/lib/rails_error_dashboard/commands/resolve_error.rb +1 -1
  36. data/lib/rails_error_dashboard/configuration.rb +8 -0
  37. data/lib/rails_error_dashboard/error_reporter.rb +4 -4
  38. data/lib/rails_error_dashboard/logger.rb +105 -0
  39. data/lib/rails_error_dashboard/middleware/error_catcher.rb +2 -2
  40. data/lib/rails_error_dashboard/plugin.rb +3 -3
  41. data/lib/rails_error_dashboard/plugin_registry.rb +2 -2
  42. data/lib/rails_error_dashboard/plugins/jira_integration_plugin.rb +1 -1
  43. data/lib/rails_error_dashboard/plugins/metrics_plugin.rb +1 -1
  44. data/lib/rails_error_dashboard/queries/dashboard_stats.rb +109 -1
  45. data/lib/rails_error_dashboard/queries/errors_list.rb +61 -6
  46. data/lib/rails_error_dashboard/services/backtrace_parser.rb +113 -0
  47. data/lib/rails_error_dashboard/version.rb +1 -1
  48. data/lib/rails_error_dashboard.rb +2 -0
  49. metadata +18 -2
  50. data/lib/tasks/rails_error_dashboard_tasks.rake +0 -4
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "mappings": "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",
4
+ "sources": ["_catppuccin_mocha.scss","_theme_variables.scss","_components.scss","_layout.scss","application.scss"],
5
+ "names": [],
6
+ "file": "application.css"
7
+ }
@@ -0,0 +1,61 @@
1
+ // =============================================================================
2
+ // Rails Error Dashboard - Main Stylesheet
3
+ // =============================================================================
4
+ // Theme: Catppuccin Mocha (Dark) / Traditional Light
5
+ //
6
+ // This is the main manifest file for Rails Error Dashboard styles.
7
+ // All Catppuccin theming and component styles are imported here.
8
+ //
9
+ // Color Palette: https://github.com/catppuccin/catppuccin
10
+ // =============================================================================
11
+
12
+ // Import Catppuccin Mocha color palette
13
+ // Defines all 24 Catppuccin colors as SCSS variables and CSS custom properties
14
+ @import 'catppuccin_mocha';
15
+
16
+ // Import semantic theme variables
17
+ // Maps Catppuccin colors to dashboard purposes (primary, success, danger, etc.)
18
+ @import 'theme_variables';
19
+
20
+ // Import component-specific styles
21
+ // Badges, cards, tables, forms, buttons, etc. with Catppuccin theming
22
+ @import 'components';
23
+
24
+ // Import layout and structural styles
25
+ // Navbar, sidebar, animations, and page structure
26
+ @import 'layout';
27
+
28
+ // =============================================================================
29
+ // Global Styles
30
+ // =============================================================================
31
+
32
+ body {
33
+ background-color: var(--bg-color);
34
+ color: var(--text-color);
35
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
36
+ transition: background-color 300ms ease, color 300ms ease;
37
+ }
38
+
39
+ // Links
40
+ a {
41
+ color: var(--text-link);
42
+ text-decoration: none;
43
+ transition: color 150ms ease;
44
+
45
+ &:hover {
46
+ color: var(--text-link-hover);
47
+ text-decoration: underline;
48
+ }
49
+ }
50
+
51
+ // Smooth transitions for theme switching
52
+ * {
53
+ transition-property: background-color, border-color, color;
54
+ transition-duration: 300ms;
55
+ transition-timing-function: ease;
56
+ }
57
+
58
+ // Disable transitions during initial page load
59
+ .no-transition * {
60
+ transition: none !important;
61
+ }
@@ -6,6 +6,30 @@ module RailsErrorDashboard
6
6
 
7
7
  before_action :authenticate_dashboard_user!
8
8
 
9
+ def overview
10
+ # Get dashboard stats using Query
11
+ @stats = Queries::DashboardStats.call
12
+
13
+ # Get platform health summary (if enabled)
14
+ if RailsErrorDashboard.configuration.enable_platform_comparison
15
+ comparison = Queries::PlatformComparison.new(days: 7)
16
+ @platform_health = comparison.platform_health_summary
17
+ @platform_scores = comparison.platform_stability_scores
18
+ else
19
+ @platform_health = {}
20
+ @platform_scores = {}
21
+ end
22
+
23
+ # Get critical alerts (critical/high severity errors from last hour)
24
+ @critical_alerts = ErrorLog
25
+ .where("occurred_at >= ?", 1.hour.ago)
26
+ .where(resolved_at: nil)
27
+ .select { |error| [ :critical, :high ].include?(error.severity) }
28
+ .sort_by(&:occurred_at)
29
+ .reverse
30
+ .first(10)
31
+ end
32
+
9
33
  def index
10
34
  # Use Query to get filtered errors
11
35
  errors_query = Queries::ErrorsList.call(filter_params)
@@ -42,6 +66,70 @@ module RailsErrorDashboard
42
66
  redirect_to error_path(@error)
43
67
  end
44
68
 
69
+ # Phase 3: Workflow Integration Actions
70
+
71
+ def assign
72
+ @error = ErrorLog.find(params[:id])
73
+ @error.assign_to!(params[:assigned_to])
74
+ redirect_to error_path(@error)
75
+ rescue => e
76
+ redirect_to error_path(@error)
77
+ end
78
+
79
+ def unassign
80
+ @error = ErrorLog.find(params[:id])
81
+ @error.unassign!
82
+ redirect_to error_path(@error)
83
+ rescue => e
84
+ redirect_to error_path(@error)
85
+ end
86
+
87
+ def update_priority
88
+ @error = ErrorLog.find(params[:id])
89
+ @error.update!(priority_level: params[:priority_level])
90
+ redirect_to error_path(@error)
91
+ rescue => e
92
+ redirect_to error_path(@error)
93
+ end
94
+
95
+ def snooze
96
+ @error = ErrorLog.find(params[:id])
97
+ @error.snooze!(params[:hours].to_i, reason: params[:reason])
98
+ redirect_to error_path(@error)
99
+ rescue => e
100
+ redirect_to error_path(@error)
101
+ end
102
+
103
+ def unsnooze
104
+ @error = ErrorLog.find(params[:id])
105
+ @error.unsnooze!
106
+ redirect_to error_path(@error)
107
+ rescue => e
108
+ redirect_to error_path(@error)
109
+ end
110
+
111
+ def update_status
112
+ @error = ErrorLog.find(params[:id])
113
+ if @error.update_status!(params[:status], comment: params[:comment])
114
+ redirect_to error_path(@error)
115
+ else
116
+ redirect_to error_path(@error)
117
+ end
118
+ rescue => e
119
+ redirect_to error_path(@error)
120
+ end
121
+
122
+ def add_comment
123
+ @error = ErrorLog.find(params[:id])
124
+ @error.comments.create!(
125
+ author_name: params[:author_name],
126
+ body: params[:body]
127
+ )
128
+ redirect_to error_path(@error)
129
+ rescue => e
130
+ redirect_to error_path(@error)
131
+ end
132
+
45
133
  def analytics
46
134
  days = (params[:days] || 30).to_i
47
135
  @days = days
@@ -139,7 +227,12 @@ module RailsErrorDashboard
139
227
  unresolved: params[:unresolved],
140
228
  platform: params[:platform],
141
229
  search: params[:search],
142
- severity: params[:severity]
230
+ severity: params[:severity],
231
+ # Phase 3: Workflow filter params
232
+ status: params[:status],
233
+ assigned_to: params[:assigned_to],
234
+ priority_level: params[:priority_level],
235
+ hide_snoozed: params[:hide_snoozed]
143
236
  }
144
237
  end
145
238
 
@@ -1,21 +1,59 @@
1
1
  module RailsErrorDashboard
2
2
  module ApplicationHelper
3
3
  # Returns Bootstrap color class for error severity
4
+ # Uses Catppuccin Mocha colors in dark theme via CSS variables
4
5
  # @param severity [Symbol] The severity level (:critical, :high, :medium, :low, :info)
5
6
  # @return [String] Bootstrap color class (danger, warning, info, secondary)
6
7
  def severity_color(severity)
7
8
  case severity&.to_sym
8
9
  when :critical
9
- "danger"
10
+ "danger" # Maps to --ctp-red in dark mode
10
11
  when :high
11
- "warning"
12
+ "warning" # Maps to --ctp-peach in dark mode
12
13
  when :medium
13
- "info"
14
+ "info" # Maps to --ctp-blue in dark mode
14
15
  when :low
15
- "secondary"
16
+ "secondary" # Maps to --ctp-overlay1 in dark mode
16
17
  else
17
18
  "secondary"
18
19
  end
19
20
  end
21
+
22
+ # Returns CSS variable for severity color (for inline styles)
23
+ # Useful when you need to set background-color or color directly
24
+ # @param severity [Symbol] The severity level
25
+ # @return [String] CSS variable reference
26
+ def severity_color_var(severity)
27
+ case severity&.to_sym
28
+ when :critical
29
+ "var(--ctp-red)"
30
+ when :high
31
+ "var(--ctp-peach)"
32
+ when :medium
33
+ "var(--ctp-blue)"
34
+ when :low
35
+ "var(--ctp-overlay1)"
36
+ else
37
+ "var(--ctp-overlay1)"
38
+ end
39
+ end
40
+
41
+ # Returns platform-specific color class
42
+ # @param platform [String] Platform name (ios, android, web, api)
43
+ # @return [String] CSS color variable
44
+ def platform_color_var(platform)
45
+ case platform&.downcase
46
+ when "ios"
47
+ "var(--platform-ios)"
48
+ when "android"
49
+ "var(--platform-android)"
50
+ when "web"
51
+ "var(--platform-web)"
52
+ when "api"
53
+ "var(--platform-api)"
54
+ else
55
+ "var(--text-color)"
56
+ end
57
+ end
20
58
  end
21
59
  end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsErrorDashboard
4
+ module BacktraceHelper
5
+ # Parse backtrace string into structured frames
6
+ def parse_backtrace(backtrace_string)
7
+ Services::BacktraceParser.parse(backtrace_string)
8
+ end
9
+
10
+ # Filter to show only application code
11
+ def filter_app_code(frames)
12
+ frames.select { |f| f[:category] == :app }
13
+ end
14
+
15
+ # Filter to show framework/gem code
16
+ def filter_framework_code(frames)
17
+ frames.reject { |f| f[:category] == :app }
18
+ end
19
+
20
+ # Get icon for frame category
21
+ def frame_icon(category)
22
+ case category
23
+ when :app
24
+ '<i class="bi bi-code-square text-success"></i>'.html_safe
25
+ when :gem
26
+ '<i class="bi bi-box text-info"></i>'.html_safe
27
+ when :framework
28
+ '<i class="bi bi-gear text-warning"></i>'.html_safe
29
+ when :ruby_core
30
+ '<i class="bi bi-gem text-secondary"></i>'.html_safe
31
+ else
32
+ '<i class="bi bi-question-circle text-muted"></i>'.html_safe
33
+ end
34
+ end
35
+
36
+ # Get color class for frame category
37
+ def frame_color_class(category)
38
+ case category
39
+ when :app
40
+ "text-success fw-bold"
41
+ when :gem
42
+ "text-info"
43
+ when :framework
44
+ "text-warning"
45
+ when :ruby_core
46
+ "text-secondary"
47
+ else
48
+ "text-muted"
49
+ end
50
+ end
51
+
52
+ # Get background color class for frame
53
+ # Uses Catppuccin-themed backtrace frame classes from _components.scss
54
+ def frame_bg_class(category)
55
+ case category
56
+ when :app
57
+ "backtrace-frame frame-app"
58
+ when :gem
59
+ "backtrace-frame frame-gem"
60
+ when :framework
61
+ "backtrace-frame frame-framework"
62
+ when :ruby_core
63
+ "backtrace-frame frame-ruby-core"
64
+ else
65
+ ""
66
+ end
67
+ end
68
+
69
+ # Format category name
70
+ def frame_category_name(category)
71
+ case category
72
+ when :app
73
+ "Your Code"
74
+ when :gem
75
+ "Gem"
76
+ when :framework
77
+ "Rails Framework"
78
+ when :ruby_core
79
+ "Ruby Core"
80
+ else
81
+ "Unknown"
82
+ end
83
+ end
84
+
85
+ # Count frames by category
86
+ def frame_count_by_category(frames)
87
+ frames.group_by { |f| f[:category] }
88
+ .transform_values(&:count)
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsErrorDashboard
4
+ module OverviewHelper
5
+ # All helper methods return Bootstrap semantic classes (success, warning, danger)
6
+ # These automatically map to Catppuccin Mocha colors in dark theme via CSS variables:
7
+ # - success → --ctp-green
8
+ # - warning → --ctp-peach
9
+ # - danger → --ctp-red
10
+ def error_rate_border_class(rate)
11
+ return "border-success" if rate < 1.0
12
+ return "border-warning" if rate < 5.0
13
+ "border-danger"
14
+ end
15
+
16
+ def error_rate_text_class(rate)
17
+ return "text-success" if rate < 1.0
18
+ return "text-warning" if rate < 5.0
19
+ "text-danger"
20
+ end
21
+
22
+ def trend_arrow(value)
23
+ return "→" if value.zero?
24
+ value > 0 ? "↑" : "↓"
25
+ end
26
+
27
+ def trend_color_class(value)
28
+ return "text-muted" if value.zero?
29
+ value > 0 ? "text-danger" : "text-success"
30
+ end
31
+
32
+ def trend_text(direction)
33
+ case direction
34
+ when :increasing
35
+ "Increasing"
36
+ when :decreasing
37
+ "Decreasing"
38
+ else
39
+ "Stable"
40
+ end
41
+ end
42
+
43
+ def severity_icon(severity)
44
+ case severity
45
+ when :critical
46
+ "🔴"
47
+ when :high
48
+ "🟠"
49
+ when :medium
50
+ "🟡"
51
+ else
52
+ "⚪"
53
+ end
54
+ end
55
+
56
+ def health_status_color(status)
57
+ case status
58
+ when :healthy
59
+ "success"
60
+ when :warning
61
+ "warning"
62
+ else
63
+ "danger"
64
+ end
65
+ end
66
+
67
+ def health_status_text(status)
68
+ case status
69
+ when :healthy
70
+ "✅ Healthy"
71
+ when :warning
72
+ "⚠️ Warning"
73
+ else
74
+ "🔴 Critical"
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsErrorDashboard
4
+ module UserAgentHelper
5
+ # Parse user agent string into browser, OS, and device info
6
+ def parse_user_agent(user_agent_string)
7
+ return default_user_agent_info if user_agent_string.blank?
8
+
9
+ browser = Browser.new(user_agent_string)
10
+
11
+ {
12
+ browser_name: browser_name(browser),
13
+ browser_version: browser.version,
14
+ os_name: os_name(browser),
15
+ device_type: device_type(browser),
16
+ platform: browser.platform.to_s.titleize,
17
+ is_mobile: browser.device.mobile?,
18
+ is_tablet: browser.device.tablet?,
19
+ is_bot: browser.bot?
20
+ }
21
+ rescue StandardError => e
22
+ Rails.logger.warn "[RailsErrorDashboard] Failed to parse user agent: #{e.message}"
23
+ default_user_agent_info
24
+ end
25
+
26
+ # Get browser icon based on browser name
27
+ def browser_icon(browser_info)
28
+ return '<i class="bi bi-question-circle text-muted"></i>'.html_safe if browser_info.blank?
29
+
30
+ case browser_info[:browser_name]&.downcase
31
+ when "chrome"
32
+ '<i class="bi bi-browser-chrome text-warning"></i>'.html_safe
33
+ when "firefox"
34
+ '<i class="bi bi-browser-firefox text-danger"></i>'.html_safe
35
+ when "safari"
36
+ '<i class="bi bi-browser-safari text-primary"></i>'.html_safe
37
+ when "edge"
38
+ '<i class="bi bi-browser-edge text-info"></i>'.html_safe
39
+ else
40
+ '<i class="bi bi-globe text-secondary"></i>'.html_safe
41
+ end
42
+ end
43
+
44
+ # Get OS icon based on OS name
45
+ def os_icon(browser_info)
46
+ return '<i class="bi bi-question-circle text-muted"></i>'.html_safe if browser_info.blank?
47
+
48
+ case browser_info[:os_name]&.downcase
49
+ when /windows/
50
+ '<i class="bi bi-windows text-primary"></i>'.html_safe
51
+ when /mac|darwin/
52
+ '<i class="bi bi-apple text-secondary"></i>'.html_safe
53
+ when /linux/
54
+ '<i class="bi bi-ubuntu text-danger"></i>'.html_safe
55
+ when /android/
56
+ '<i class="bi bi-android2 text-success"></i>'.html_safe
57
+ when /ios|iphone|ipad/
58
+ '<i class="bi bi-apple text-secondary"></i>'.html_safe
59
+ else
60
+ '<i class="bi bi-cpu text-muted"></i>'.html_safe
61
+ end
62
+ end
63
+
64
+ # Get device icon based on device type
65
+ def device_icon(browser_info)
66
+ return '<i class="bi bi-question-circle text-muted"></i>'.html_safe if browser_info.blank?
67
+
68
+ if browser_info[:is_mobile]
69
+ '<i class="bi bi-phone text-success"></i>'.html_safe
70
+ elsif browser_info[:is_tablet]
71
+ '<i class="bi bi-tablet text-info"></i>'.html_safe
72
+ else
73
+ '<i class="bi bi-laptop text-secondary"></i>'.html_safe
74
+ end
75
+ end
76
+
77
+ private
78
+
79
+ def browser_name(browser)
80
+ return "Chrome" if browser.chrome?
81
+ return "Firefox" if browser.firefox?
82
+ return "Safari" if browser.safari?
83
+ return "Edge" if browser.edge?
84
+ return "Opera" if browser.opera?
85
+ return "Internet Explorer" if browser.ie?
86
+ "Unknown"
87
+ end
88
+
89
+ def os_name(browser)
90
+ return "Windows" if browser.platform.windows?
91
+ return "macOS" if browser.platform.mac?
92
+ return "Linux" if browser.platform.linux?
93
+ return "Android" if browser.platform.android?
94
+ return "iOS" if browser.platform.ios?
95
+ "Unknown"
96
+ end
97
+
98
+ def device_type(browser)
99
+ return "Mobile" if browser.device.mobile?
100
+ return "Tablet" if browser.device.tablet?
101
+ return "Bot" if browser.bot?
102
+ "Desktop"
103
+ end
104
+
105
+ def default_user_agent_info
106
+ {
107
+ browser_name: "Unknown",
108
+ browser_version: nil,
109
+ os_name: "Unknown",
110
+ device_type: "Unknown",
111
+ platform: "Unknown",
112
+ is_mobile: false,
113
+ is_tablet: false,
114
+ is_bot: false
115
+ }
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsErrorDashboard
4
+ # Model: ErrorComment
5
+ # Represents a comment/note on an error for team collaboration
6
+ class ErrorComment < ErrorLogsRecord
7
+ self.table_name = "rails_error_dashboard_error_comments"
8
+
9
+ belongs_to :error_log, class_name: "RailsErrorDashboard::ErrorLog"
10
+
11
+ validates :author_name, presence: true, length: { maximum: 255 }
12
+ validates :body, presence: true, length: { maximum: 10_000 }
13
+
14
+ scope :recent_first, -> { order(created_at: :desc) }
15
+ scope :oldest_first, -> { order(created_at: :asc) }
16
+
17
+ # Get formatted timestamp for display
18
+ def formatted_time
19
+ created_at.strftime("%b %d, %Y at %I:%M %p")
20
+ end
21
+
22
+ # Check if comment was created recently (within last hour)
23
+ def recent?
24
+ created_at > 1.hour.ago
25
+ end
26
+ end
27
+ end