Class: RailsErrorDashboard::ErrorsController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- RailsErrorDashboard::ErrorsController
- Includes:
- Pagy::Backend
- Defined in:
- app/controllers/rails_error_dashboard/errors_controller.rb
Instance Method Summary collapse
- #add_comment ⇒ Object
- #analytics ⇒ Object
-
#assign ⇒ Object
Phase 3: Workflow Integration Actions.
- #batch_action ⇒ Object
- #correlation ⇒ Object
- #index ⇒ Object
- #overview ⇒ Object
- #platform_comparison ⇒ Object
- #resolve ⇒ Object
- #show ⇒ Object
- #snooze ⇒ Object
- #unassign ⇒ Object
- #unsnooze ⇒ Object
- #update_priority ⇒ Object
- #update_status ⇒ Object
Instance Method Details
#add_comment ⇒ Object
122 123 124 125 126 127 128 129 130 131 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 122 def add_comment @error = ErrorLog.find(params[:id]) @error.comments.create!( author_name: params[:author_name], body: params[:body] ) redirect_to error_path(@error) rescue => e redirect_to error_path(@error) end |
#analytics ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 133 def analytics days = (params[:days] || 30).to_i @days = days # Use Query to get analytics data analytics = Queries::AnalyticsStats.call(days) @error_stats = analytics[:error_stats] @errors_over_time = analytics[:errors_over_time] @errors_by_type = analytics[:errors_by_type] @errors_by_platform = analytics[:errors_by_platform] @errors_by_hour = analytics[:errors_by_hour] @top_users = analytics[:top_users] @resolution_rate = analytics[:resolution_rate] @mobile_errors = analytics[:mobile_errors] @api_errors = analytics[:api_errors] end |
#assign ⇒ Object
Phase 3: Workflow Integration Actions
71 72 73 74 75 76 77 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 71 def assign @error = ErrorLog.find(params[:id]) @error.assign_to!(params[:assigned_to]) redirect_to error_path(@error) rescue => e redirect_to error_path(@error) end |
#batch_action ⇒ Object
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 175 def batch_action error_ids = params[:error_ids] || [] action_type = params[:action_type] result = case action_type when "resolve" Commands::BatchResolveErrors.call( error_ids, resolved_by_name: params[:resolved_by_name], resolution_comment: params[:resolution_comment] ) when "delete" Commands::BatchDeleteErrors.call(error_ids) else { success: false, count: 0, errors: [ "Invalid action type" ] } end if result[:success] flash[:notice] = "Successfully #{action_type}d #{result[:count]} error(s)" else flash[:alert] = "Batch operation failed: #{result[:errors].join(', ')}" end redirect_to errors_path end |
#correlation ⇒ Object
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 201 def correlation # Check if feature is enabled unless RailsErrorDashboard.configuration.enable_error_correlation flash[:alert] = "Error Correlation is not enabled. Enable it in config/initializers/rails_error_dashboard.rb" redirect_to errors_path return end days = (params[:days] || 30).to_i @days = days correlation = Queries::ErrorCorrelation.new(days: days) @errors_by_version = correlation.errors_by_version @errors_by_git_sha = correlation.errors_by_git_sha @problematic_releases = correlation.problematic_releases @multi_error_users = correlation.multi_error_users(min_error_types: 2) @time_correlated_errors = correlation. @period_comparison = correlation.period_comparison @platform_specific_errors = correlation.platform_specific_errors end |
#index ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 33 def index # Use Query to get filtered errors errors_query = Queries::ErrorsList.call(filter_params) # Paginate with Pagy @pagy, @errors = pagy(errors_query, items: params[:per_page] || 25) # Get dashboard stats using Query @stats = Queries::DashboardStats.call # Get filter options using Query = Queries::FilterOptions.call @error_types = [:error_types] @platforms = [:platforms] end |
#overview ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 9 def overview # Get dashboard stats using Query @stats = Queries::DashboardStats.call # Get platform health summary (if enabled) if RailsErrorDashboard.configuration.enable_platform_comparison comparison = Queries::PlatformComparison.new(days: 7) @platform_health = comparison.platform_health_summary @platform_scores = comparison.platform_stability_scores else @platform_health = {} @platform_scores = {} end # Get critical alerts (critical/high severity errors from last hour) @critical_alerts = ErrorLog .where("occurred_at >= ?", 1.hour.ago) .where(resolved_at: nil) .select { |error| [ :critical, :high ].include?(error.severity) } .sort_by(&:occurred_at) .reverse .first(10) end |
#platform_comparison ⇒ Object
151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 151 def platform_comparison # Check if feature is enabled unless RailsErrorDashboard.configuration.enable_platform_comparison flash[:alert] = "Platform Comparison is not enabled. Enable it in config/initializers/rails_error_dashboard.rb" redirect_to errors_path return end days = (params[:days] || 7).to_i @days = days # Use Query to get platform comparison data comparison = Queries::PlatformComparison.new(days: days) @error_rate_by_platform = comparison.error_rate_by_platform @severity_distribution = comparison.severity_distribution_by_platform @resolution_times = comparison.resolution_time_by_platform @top_errors_by_platform = comparison.top_errors_by_platform @stability_scores = comparison.platform_stability_scores @cross_platform_errors = comparison.cross_platform_errors @daily_trends = comparison.daily_trend_by_platform @platform_health = comparison.platform_health_summary end |
#resolve ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 57 def resolve # Use Command to resolve error @error = Commands::ResolveError.call( params[:id], resolved_by_name: params[:resolved_by_name], resolution_comment: params[:resolution_comment], resolution_reference: params[:resolution_reference] ) redirect_to error_path(@error) end |
#show ⇒ Object
49 50 51 52 53 54 55 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 49 def show @error = ErrorLog.find(params[:id]) @related_errors = @error.(limit: 5) # Dispatch plugin event for error viewed RailsErrorDashboard::PluginRegistry.dispatch(:on_error_viewed, @error) end |
#snooze ⇒ Object
95 96 97 98 99 100 101 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 95 def snooze @error = ErrorLog.find(params[:id]) @error.snooze!(params[:hours].to_i, reason: params[:reason]) redirect_to error_path(@error) rescue => e redirect_to error_path(@error) end |
#unassign ⇒ Object
79 80 81 82 83 84 85 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 79 def unassign @error = ErrorLog.find(params[:id]) @error.unassign! redirect_to error_path(@error) rescue => e redirect_to error_path(@error) end |
#unsnooze ⇒ Object
103 104 105 106 107 108 109 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 103 def unsnooze @error = ErrorLog.find(params[:id]) @error.unsnooze! redirect_to error_path(@error) rescue => e redirect_to error_path(@error) end |
#update_priority ⇒ Object
87 88 89 90 91 92 93 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 87 def update_priority @error = ErrorLog.find(params[:id]) @error.update!(priority_level: params[:priority_level]) redirect_to error_path(@error) rescue => e redirect_to error_path(@error) end |
#update_status ⇒ Object
111 112 113 114 115 116 117 118 119 120 |
# File 'app/controllers/rails_error_dashboard/errors_controller.rb', line 111 def update_status @error = ErrorLog.find(params[:id]) if @error.update_status!(params[:status], comment: params[:comment]) redirect_to error_path(@error) else redirect_to error_path(@error) end rescue => e redirect_to error_path(@error) end |