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.
- checksums.yaml +4 -4
- data/README.md +66 -21
- data/app/assets/stylesheets/rails_error_dashboard/_catppuccin_mocha.scss +107 -0
- data/app/assets/stylesheets/rails_error_dashboard/_components.scss +625 -0
- data/app/assets/stylesheets/rails_error_dashboard/_layout.scss +257 -0
- data/app/assets/stylesheets/rails_error_dashboard/_theme_variables.scss +203 -0
- data/app/assets/stylesheets/rails_error_dashboard/application.css +926 -15
- data/app/assets/stylesheets/rails_error_dashboard/application.css.map +7 -0
- data/app/assets/stylesheets/rails_error_dashboard/application.scss +61 -0
- data/app/controllers/rails_error_dashboard/errors_controller.rb +94 -1
- data/app/helpers/rails_error_dashboard/application_helper.rb +42 -4
- data/app/helpers/rails_error_dashboard/backtrace_helper.rb +91 -0
- data/app/helpers/rails_error_dashboard/overview_helper.rb +78 -0
- data/app/helpers/rails_error_dashboard/user_agent_helper.rb +118 -0
- data/app/models/rails_error_dashboard/error_comment.rb +27 -0
- data/app/models/rails_error_dashboard/error_log.rb +145 -0
- data/app/views/layouts/rails_error_dashboard.html.erb +796 -299
- data/app/views/layouts/rails_error_dashboard_old_backup.html.erb +383 -0
- data/app/views/rails_error_dashboard/errors/_error_row.html.erb +2 -0
- data/app/views/rails_error_dashboard/errors/_pattern_insights.html.erb +4 -4
- data/app/views/rails_error_dashboard/errors/_timeline.html.erb +167 -0
- data/app/views/rails_error_dashboard/errors/analytics.html.erb +138 -22
- data/app/views/rails_error_dashboard/errors/index.html.erb +83 -4
- data/app/views/rails_error_dashboard/errors/overview.html.erb +253 -0
- data/app/views/rails_error_dashboard/errors/platform_comparison.html.erb +29 -18
- data/app/views/rails_error_dashboard/errors/show.html.erb +353 -54
- data/config/routes.rb +7 -0
- data/db/migrate/20251226020000_add_workflow_fields_to_error_logs.rb +27 -0
- data/db/migrate/20251226020100_create_error_comments.rb +18 -0
- data/lib/generators/rails_error_dashboard/install/install_generator.rb +8 -2
- data/lib/generators/rails_error_dashboard/install/templates/initializer.rb +21 -0
- data/lib/rails_error_dashboard/commands/batch_delete_errors.rb +1 -1
- data/lib/rails_error_dashboard/commands/batch_resolve_errors.rb +2 -2
- data/lib/rails_error_dashboard/commands/log_error.rb +47 -9
- data/lib/rails_error_dashboard/commands/resolve_error.rb +1 -1
- data/lib/rails_error_dashboard/configuration.rb +8 -0
- data/lib/rails_error_dashboard/error_reporter.rb +4 -4
- data/lib/rails_error_dashboard/logger.rb +105 -0
- data/lib/rails_error_dashboard/middleware/error_catcher.rb +2 -2
- data/lib/rails_error_dashboard/plugin.rb +3 -3
- data/lib/rails_error_dashboard/plugin_registry.rb +2 -2
- data/lib/rails_error_dashboard/plugins/jira_integration_plugin.rb +1 -1
- data/lib/rails_error_dashboard/plugins/metrics_plugin.rb +1 -1
- data/lib/rails_error_dashboard/queries/dashboard_stats.rb +109 -1
- data/lib/rails_error_dashboard/queries/errors_list.rb +61 -6
- data/lib/rails_error_dashboard/services/backtrace_parser.rb +113 -0
- data/lib/rails_error_dashboard/version.rb +1 -1
- data/lib/rails_error_dashboard.rb +2 -0
- metadata +18 -2
- data/lib/tasks/rails_error_dashboard_tasks.rake +0 -4
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"mappings": "AAsDA,KAAM;EAEJ,eAAe,EAAE,OAAiB;EAClC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,WAAW,EAAM,OAAa;EAC9B,SAAS,EAAQ,OAAW;EAC5B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,UAAU,EAAO,OAAY;EAC7B,SAAS,EAAQ,OAAW;EAC5B,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EAGjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;;AA7BhC,KAAM;EAEJ,eAAe,EAAE,OAAiB;EAClC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,WAAW,EAAM,OAAa;EAC9B,SAAS,EAAQ,OAAW;EAC5B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,UAAU,EAAO,OAAY;EAC7B,SAAS,EAAQ,OAAW;EAC5B,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EAGjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;;ACpEhC,KAAM;EAEJ,eAAe,EAAI,OAAO;EAC1B,eAAe,EAAI,OAAO;EAC1B,cAAc,EAAK,OAAO;EAC1B,eAAe,EAAI,OAAO;EAC1B,YAAY,EAAO,OAAO;EAC1B,iBAAiB,EAAE,OAAO;EAG1B,UAAU,EAAY,OAAO;EAC7B,SAAS,EAAa,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,eAAe,EAAO,OAAO;EAC7B,eAAe,EAAO,OAAO;EAC7B,aAAa,EAAS,OAAO;EAC7B,SAAS,EAAa,OAAO;EAG7B,YAAY,EAAU,OAAO;EAC7B,gBAAgB,EAAM,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,WAAW,EAAW,OAAO;EAC7B,iBAAiB,EAAK,OAAO;EAG7B,cAAc,EAAQ,OAAO;EAC7B,eAAe,EAAO,OAAO;EAG7B,cAAc,EAAQ,OAAO;EAC7B,kBAAkB,EAAI,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAG7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,YAAY,EAAU,kBAAkB;EACxC,YAAY,EAAU,OAAO;EAC7B,kBAAkB,EAAI,OAAO;EAG7B,YAAY,EAAU,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,WAAW,EAAW,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,SAAS,EAAa,OAAO;EAC7B,cAAc,EAAQ,OAAO;;AAQ/B,+BAAoB;EAIlB,eAAe,EAAI,gBAAgB;EACnC,eAAe,EAAI,gBAAgB;EACnC,cAAc,EAAK,cAAc;EACjC,eAAe,EAAI,gBAAgB;EACnC,YAAY,EAAO,eAAe;EAClC,iBAAiB,EAAE,mBAAmB;EAKtC,UAAU,EAAY,eAAe;EACrC,SAAS,EAAa,mBAAmB;EACzC,YAAY,EAAU,iBAAiB;EACvC,eAAe,EAAO,mBAAmB;EACzC,eAAe,EAAO,mBAAmB;EACzC,aAAa,EAAS,mBAAmB;EACzC,SAAS,EAAa,iBAAiB;EAKvC,YAAY,EAAU,eAAe;EACrC,gBAAgB,EAAM,mBAAmB;EACzC,YAAY,EAAU,mBAAmB;EACzC,WAAW,EAAW,cAAc;EACpC,iBAAiB,EAAK,mBAAmB;EAKzC,cAAc,EAAQ,mBAAmB;EACzC,eAAe,EAAO,mBAAmB;EAKzC,cAAc,EAAQ,eAAe;EACrC,kBAAkB,EAAI,gBAAgB;EACtC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EAKzC,mBAAmB,EAAG,cAAc;EACpC,eAAe,EAAO,gBAAgB;EACtC,iBAAiB,EAAK,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EAKzC,cAAc,EAAQ,cAAc;EACpC,cAAc,EAAQ,gBAAgB;EACtC,cAAc,EAAQ,iBAAiB;EACvC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,gBAAgB;EACtC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EAEzC,YAAY,EAAU,sBAAkC;EACxD,YAAY,EAAU,eAAe;EACrC,kBAAkB,EAAI,mBAAmB;EAMzC,YAAY,EAAU,gBAAgB;EACtC,YAAY,EAAU,gBAAgB;EACtC,WAAW,EAAW,cAAc;EACpC,YAAY,EAAU,gBAAgB;EACtC,SAAS,EAAa,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EACzC,UAAU,EAAY,mBAAmB;EACzC,SAAS,EAAa,iBAAiB;EAGvC,YAAY,EAAU,eAAe;EACrC,eAAe,EAAO,eAAe;EACrC,iBAAiB,EAAK,mBAAmB;EACzC,eAAe,EAAO,cAAc;EACpC,qBAAqB,EAAE,mBAAmB;;AD3G5C,KAAM;EAEJ,eAAe,EAAE,OAAiB;EAClC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,WAAW,EAAM,OAAa;EAC9B,SAAS,EAAQ,OAAW;EAC5B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,UAAU,EAAO,OAAY;EAC7B,SAAS,EAAQ,OAAW;EAC5B,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EAGjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;;AA7BhC,KAAM;EAEJ,eAAe,EAAE,OAAiB;EAClC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,WAAW,EAAM,OAAa;EAC9B,SAAS,EAAQ,OAAW;EAC5B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,UAAU,EAAO,OAAY;EAC7B,SAAS,EAAQ,OAAW;EAC5B,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EAGjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;;ACpEhC,KAAM;EAEJ,eAAe,EAAI,OAAO;EAC1B,eAAe,EAAI,OAAO;EAC1B,cAAc,EAAK,OAAO;EAC1B,eAAe,EAAI,OAAO;EAC1B,YAAY,EAAO,OAAO;EAC1B,iBAAiB,EAAE,OAAO;EAG1B,UAAU,EAAY,OAAO;EAC7B,SAAS,EAAa,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,eAAe,EAAO,OAAO;EAC7B,eAAe,EAAO,OAAO;EAC7B,aAAa,EAAS,OAAO;EAC7B,SAAS,EAAa,OAAO;EAG7B,YAAY,EAAU,OAAO;EAC7B,gBAAgB,EAAM,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,WAAW,EAAW,OAAO;EAC7B,iBAAiB,EAAK,OAAO;EAG7B,cAAc,EAAQ,OAAO;EAC7B,eAAe,EAAO,OAAO;EAG7B,cAAc,EAAQ,OAAO;EAC7B,kBAAkB,EAAI,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAG7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,YAAY,EAAU,kBAAkB;EACxC,YAAY,EAAU,OAAO;EAC7B,kBAAkB,EAAI,OAAO;EAG7B,YAAY,EAAU,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,WAAW,EAAW,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,SAAS,EAAa,OAAO;EAC7B,cAAc,EAAQ,OAAO;;AAQ/B,+BAAoB;EAIlB,eAAe,EAAI,gBAAgB;EACnC,eAAe,EAAI,gBAAgB;EACnC,cAAc,EAAK,cAAc;EACjC,eAAe,EAAI,gBAAgB;EACnC,YAAY,EAAO,eAAe;EAClC,iBAAiB,EAAE,mBAAmB;EAKtC,UAAU,EAAY,eAAe;EACrC,SAAS,EAAa,mBAAmB;EACzC,YAAY,EAAU,iBAAiB;EACvC,eAAe,EAAO,mBAAmB;EACzC,eAAe,EAAO,mBAAmB;EACzC,aAAa,EAAS,mBAAmB;EACzC,SAAS,EAAa,iBAAiB;EAKvC,YAAY,EAAU,eAAe;EACrC,gBAAgB,EAAM,mBAAmB;EACzC,YAAY,EAAU,mBAAmB;EACzC,WAAW,EAAW,cAAc;EACpC,iBAAiB,EAAK,mBAAmB;EAKzC,cAAc,EAAQ,mBAAmB;EACzC,eAAe,EAAO,mBAAmB;EAKzC,cAAc,EAAQ,eAAe;EACrC,kBAAkB,EAAI,gBAAgB;EACtC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EAKzC,mBAAmB,EAAG,cAAc;EACpC,eAAe,EAAO,gBAAgB;EACtC,iBAAiB,EAAK,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EAKzC,cAAc,EAAQ,cAAc;EACpC,cAAc,EAAQ,gBAAgB;EACtC,cAAc,EAAQ,iBAAiB;EACvC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,gBAAgB;EACtC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EAEzC,YAAY,EAAU,sBAAkC;EACxD,YAAY,EAAU,eAAe;EACrC,kBAAkB,EAAI,mBAAmB;EAMzC,YAAY,EAAU,gBAAgB;EACtC,YAAY,EAAU,gBAAgB;EACtC,WAAW,EAAW,cAAc;EACpC,YAAY,EAAU,gBAAgB;EACtC,SAAS,EAAa,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EACzC,UAAU,EAAY,mBAAmB;EACzC,SAAS,EAAa,iBAAiB;EAGvC,YAAY,EAAU,eAAe;EACrC,eAAe,EAAO,eAAe;EACrC,iBAAiB,EAAK,mBAAmB;EACzC,eAAe,EAAO,cAAc;EACpC,qBAAqB,EAAE,mBAAmB;;AC/IxC,iEAAsB;EACpB,gBAAgB,EAAE,mBAAmB;EACrC,KAAK,EAAE,eAAe;EACtB,MAAM,EAAE,6BAA6B;AAMvC,yEAAsB;EACpB,gBAAgB,EAAE,wBAA+B;EACjD,KAAK,EAAE,gBAAgB;EACvB,MAAM,EAAE,0BAA0B;AAMpC,iEAAsB;EACpB,gBAAgB,EAAE,wBAA8B;EAChD,KAAK,EAAE,eAAe;EACtB,MAAM,EAAE,yBAAyB;AAMnC,iEAAsB;EACpB,gBAAgB,EAAE,wBAAkC;EACpD,KAAK,EAAE,mBAAmB;EAC1B,MAAM,EAAE,6BAA6B;AAMvC,iEAAsB;EACpB,gBAAgB,EAAE,yBAAyB;EAC3C,KAAK,EAAE,0BAA0B;AAKnC,mEAAsB;EACpB,gBAAgB,EAAE,2BAA2B;EAC7C,KAAK,EAAE,0BAA0B;AAKnC,mEAAsB;EACpB,gBAAgB,EAAE,2BAA2B;EAC7C,KAAK,EAAE,0BAA0B;AAKnC,6DAAsB;EACpB,gBAAgB,EAAE,0BAA0B;EAC5C,KAAK,EAAE,0BAA0B;AAKnC,uEAAsB;EACpB,gBAAgB,EAAE,8BAA8B;EAChD,KAAK,EAAE,0BAA0B;;AAUrC,2CAAsB;EACpB,gBAAgB,EAAE,cAAc;EAChC,YAAY,EAAE,mBAAmB;EACjC,KAAK,EAAE,iBAAiB;EAExB,qEAAa;IACX,gBAAgB,EAAE,cAAc;IAChC,mBAAmB,EAAE,mBAAmB;IACxC,KAAK,EAAE,iBAAiB;IAGxB,uFAAW;MACT,gBAAgB,EAAE,yBAAyB;MAC3C,KAAK,EAAE,4BAA4B;IAGrC,yFAAY;MACV,gBAAgB,EAAE,yBAAyB;MAC3C,KAAK,EAAE,0BAA0B;IAGnC,2FAAa;MACX,gBAAgB,EAAE,2BAA2B;MAC7C,KAAK,EAAE,0BAA0B;IAGnC,2FAAa;MACX,gBAAgB,EAAE,2BAA2B;MAC7C,KAAK,EAAE,0BAA0B;IAGnC,qFAAU;MACR,gBAAgB,EAAE,0BAA0B;MAC5C,KAAK,EAAE,0BAA0B;EAIrC,iEAAW;IACT,KAAK,EAAE,iBAAiB;EAG1B,qEAAa;IACX,gBAAgB,EAAE,cAAc;IAChC,gBAAgB,EAAE,mBAAmB;IACrC,KAAK,EAAE,qBAAqB;;AAUhC,kFAAsB;EACpB,gBAAgB,EAAE,yBAAyB;EAC3C,KAAK,EAAE,4BAA4B;EACnC,YAAY,EAAE,mBAAmB;;AAKnC,uDAAsB;EACpB,gBAAgB,EAAE,cAAc;EAChC,KAAK,EAAE,iBAAiB;EACxB,MAAM,EAAE,6BAA6B;;AAMvC,uEAAsB;EACpB,gBAAgB,EAAE,yBAAyB;EAC3C,KAAK,EAAE,4BAA4B;;AAMrC;;WAAsB;EACpB,gBAAgB,EAAE,yBAAyB;EAC3C,KAAK,EAAE,4BAA4B;;AAUrC,iEAAsB;EACpB,OAAO,EAAE,WAAuB;EAChC,aAAa,EAAE,GAAG;EAClB,aAAa,EDDH,OAAO;ECEjB,WAAW,EAAE,wBAAwB;EACrC,SAAS,EAAE,QAAQ;EAGnB,qFAAY;IACV,gBAAgB,EAAE,mCAA0C;IAC5D,KAAK,EAAE,2BAA2B;IAClC,WAAW,EAAE,0BAA0B;IACvC,WAAW,EAAE,GAAG;EAIlB,qFAAY;IACV,gBAAgB,EAAE,mCAAyC;IAC3D,KAAK,EAAE,0BAA0B;IACjC,WAAW,EAAE,yBAAyB;EAIxC,iGAAkB;IAChB,gBAAgB,EAAE,mCAA2C;IAC7D,KAAK,EAAE,4BAA4B;IACnC,WAAW,EAAE,2BAA2B;EAI1C,iGAAkB;IAChB,gBAAgB,EAAE,mCAA6C;IAC/D,KAAK,EAAE,8BAA8B;IACrC,WAAW,EAAE,6BAA6B;;AAU9C,2DAAsB;EACpB,gBAAgB,EAAE,cAAc;EAChC,KAAK,EAAE,iBAAiB;EACxB,MAAM,EAAE,8BAA8B;EACtC,UAAU,EAAE,cAAoB;EAEhC,uEAAQ;IACN,YAAY,EAAE,mBAAmB;IACjC,SAAS,EAAE,WAAW;;AAa1B,6CAAsB;EACpB,KAAK,EAAE,iBAAiB;EACxB,YAAY,EAAE,mBAAmB;EAG/B,+DAAG;IACD,gBAAgB,EAAE,cAAc;IAChC,mBAAmB,EAAE,mBAAmB;IACxC,KAAK,EAAE,iBAAiB;EAK1B,+DAAG;IACD,gBAAgB,EAAE,WAAW;IAC7B,mBAAmB,EAAE,oBAAoB;IAEzC,2EAAQ;MACN,gBAAgB,EAAE,kBAAkB;IAGtC,qEAAG;MACD,YAAY,EAAE,oBAAoB;MAClC,KAAK,EAAE,iBAAiB;EAO5B,6HAA0B;IACxB,gBAAgB,EAAE,qBAAkC;EAKxD,2EAAiB;IACf,YAAY,EAAE,mBAAmB;IAEjC,oKAAO;MACL,YAAY,EAAE,mBAAmB;;AAYvC;;YAAsB;EACpB,gBAAgB,EAAE,cAAc;EAChC,KAAK,EAAE,iBAAiB;EACxB,YAAY,EAAE,mBAAmB;EAEjC;;oBAAQ;IACN,gBAAgB,EAAE,cAAc;IAChC,YAAY,EAAE,oBAAoB;IAClC,KAAK,EAAE,iBAAiB;IACxB,UAAU,EAAE,sCAA6C;EAG3D;;2BAAe;IACb,KAAK,EAAE,iBAAiB;EAG1B;;uBAAW;IACT,gBAAgB,EAAE,mBAAmB;IACrC,KAAK,EAAE,iBAAiB;;AAM5B,mEAAsB;EACpB,gBAAgB,EAAE,cAAc;EAChC,YAAY,EAAE,mBAAmB;EAEjC,mFAAU;IACR,gBAAgB,EAAE,oBAAoB;IACtC,YAAY,EAAE,oBAAoB;EAGpC,+EAAQ;IACN,YAAY,EAAE,oBAAoB;IAClC,UAAU,EAAE,sCAA6C;;AAY3D,iEAAc;EACZ,gBAAgB,EAAE,gBAAgB;EAClC,YAAY,EAAE,gBAAgB;EAC9B,KAAK,EAAE,eAAe;EAEtB,6EAAQ;IACN,gBAAgB,EAAE,OAA8B;IAChD,YAAY,EAAE,OAA8B;EAG9C,+EAAS;IACP,gBAAgB,EAAE,OAA6B;IAC/C,YAAY,EAAE,OAA6B;AAK/C,+DAAa;EACX,gBAAgB,EAAE,cAAc;EAChC,YAAY,EAAE,cAAc;EAC5B,KAAK,EAAE,eAAe;EAEtB,2EAAQ;IACN,gBAAgB,EAAE,OAA4B;IAC9C,YAAY,EAAE,OAA4B;AAK9C,iEAAc;EACZ,gBAAgB,EAAE,gBAAgB;EAClC,YAAY,EAAE,gBAAgB;EAC9B,KAAK,EAAE,eAAe;EAEtB,6EAAQ;IACN,gBAAgB,EAAE,OAA8B;IAChD,YAAY,EAAE,OAA8B;AAKhD,iEAAc;EACZ,gBAAgB,EAAE,gBAAgB;EAClC,YAAY,EAAE,gBAAgB;EAC9B,KAAK,EAAE,eAAe;EAEtB,6EAAQ;IACN,gBAAgB,EAAE,OAA8B;IAChD,YAAY,EAAE,OAA8B;AAKhD,2DAAW;EACT,gBAAgB,EAAE,eAAe;EACjC,YAAY,EAAE,eAAe;EAC7B,KAAK,EAAE,eAAe;EAEtB,uEAAQ;IACN,gBAAgB,EAAE,OAA6B;IAC/C,YAAY,EAAE,OAA6B;AAK/C,qEAAgB;EACd,gBAAgB,EAAE,mBAAmB;EACrC,YAAY,EAAE,mBAAmB;EACjC,KAAK,EAAE,eAAe;EAEtB,iFAAQ;IACN,gBAAgB,EAAE,mBAAmB;IACrC,YAAY,EAAE,mBAAmB;AAKrC,iFAAsB;EACpB,KAAK,EAAE,gBAAgB;EACvB,YAAY,EAAE,gBAAgB;EAE9B,6FAAQ;IACN,gBAAgB,EAAE,gBAAgB;IAClC,KAAK,EAAE,eAAe;;AAY1B,2EAAe;EACb,gBAAgB,EAAE,cAAc;EAChC,KAAK,EAAE,iBAAiB;EACxB,YAAY,EAAE,mBAAmB;EAEjC,uGAAc;IACZ,gBAAgB,EAAE,cAAc;IAChC,mBAAmB,EAAE,mBAAmB;IACxC,KAAK,EAAE,iBAAiB;IAExB,6HAAW;MACT,MAAM,EAAE,0CAA0C;EAItD,mGAAY;IACV,KAAK,EAAE,iBAAiB;EAG1B,uGAAc;IACZ,gBAAgB,EAAE,cAAc;IAChC,gBAAgB,EAAE,mBAAmB;;AAW3C,6DAAsB;EACpB,gBAAgB,EAAE,cAAc;EAChC,YAAY,EAAE,mBAAmB;EAEjC,2FAAe;IACb,KAAK,EAAE,iBAAiB;IAExB,gNACQ;MACN,gBAAgB,EAAE,kBAAkB;MACpC,KAAK,EAAE,iBAAiB;IAG1B,yGAAS;MACP,gBAAgB,EAAE,oBAAoB;MACtC,KAAK,EAAE,eAAe;EAI1B,iGAAkB;IAChB,gBAAgB,EAAE,mBAAmB;;AAUzC,mDAAsB;EACpB,gBAAgB,EAAE,mBAAmB;EAGnC,qGAAa;IACX,gBAAgB,EAAE,2BAA2B;EAG/C,mGAAY;IACV,gBAAgB,EAAE,yBAAyB;EAG7C,qGAAa;IACX,gBAAgB,EAAE,2BAA2B;EAG/C,+FAAU;IACR,gBAAgB,EAAE,0BAA0B;;AAYhD,uEAAe;EACb,gBAAgB,EAAE,wBAA6B;EAC/C,YAAY,EAAE,cAAc;EAC5B,KAAK,EAAE,cAAc;AAGvB,yEAAgB;EACd,gBAAgB,EAAE,wBAA+B;EACjD,YAAY,EAAE,gBAAgB;EAC9B,KAAK,EAAE,gBAAgB;AAGzB,yEAAgB;EACd,gBAAgB,EAAE,wBAA+B;EACjD,YAAY,EAAE,gBAAgB;EAC9B,KAAK,EAAE,gBAAgB;AAGzB,mEAAa;EACX,gBAAgB,EAAE,wBAA8B;EAChD,YAAY,EAAE,eAAe;EAC7B,KAAK,EAAE,eAAe;;AAWxB,yFAAiB;EACf,gBAAgB,EAAE,cAAc;EAChC,YAAY,EAAE,mBAAmB;EACjC,KAAK,EAAE,iBAAiB;EAExB,qGAAQ;IACN,gBAAgB,EAAE,kBAAkB;EAGtC,uGAAS;IACP,gBAAgB,EAAE,oBAAoB;IACtC,YAAY,EAAE,oBAAoB;IAClC,KAAK,EAAE,eAAe;;AAW5B,uDAAY;EACV,KAAK,EAAE,4BAA4B;AAGrC,2DAAc;EACZ,KAAK,EAAE,+BAA+B;AAGxC,2DAAc;EACZ,KAAK,EAAE,+BAA+B;AAGxC,yDAAa;EACX,KAAK,EAAE,8BAA8B;AAGvC,2DAAc;EACZ,KAAK,EAAE,+BAA+B;AAGxC,qDAAW;EACT,KAAK,EAAE,4BAA4B;AAGrC,+DAAgB;EACd,KAAK,EAAE,iCAAiC;AAG1C,uDAAY;EACV,KAAK,EAAE,4BAA4B;AAGrC,qDAAW;EACT,KAAK,EAAE,4BAA4B;;AFxjBvC,KAAM;EAEJ,eAAe,EAAE,OAAiB;EAClC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,WAAW,EAAM,OAAa;EAC9B,SAAS,EAAQ,OAAW;EAC5B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,UAAU,EAAO,OAAY;EAC7B,SAAS,EAAQ,OAAW;EAC5B,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EAGjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;;AA7BhC,KAAM;EAEJ,eAAe,EAAE,OAAiB;EAClC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,WAAW,EAAM,OAAa;EAC9B,SAAS,EAAQ,OAAW;EAC5B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;EAC9B,UAAU,EAAO,OAAY;EAC7B,SAAS,EAAQ,OAAW;EAC5B,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EAGjC,UAAU,EAAO,OAAY;EAC7B,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,cAAc,EAAG,OAAgB;EACjC,UAAU,EAAO,OAAY;EAC7B,YAAY,EAAK,OAAc;EAC/B,WAAW,EAAM,OAAa;;ACpEhC,KAAM;EAEJ,eAAe,EAAI,OAAO;EAC1B,eAAe,EAAI,OAAO;EAC1B,cAAc,EAAK,OAAO;EAC1B,eAAe,EAAI,OAAO;EAC1B,YAAY,EAAO,OAAO;EAC1B,iBAAiB,EAAE,OAAO;EAG1B,UAAU,EAAY,OAAO;EAC7B,SAAS,EAAa,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,eAAe,EAAO,OAAO;EAC7B,eAAe,EAAO,OAAO;EAC7B,aAAa,EAAS,OAAO;EAC7B,SAAS,EAAa,OAAO;EAG7B,YAAY,EAAU,OAAO;EAC7B,gBAAgB,EAAM,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,WAAW,EAAW,OAAO;EAC7B,iBAAiB,EAAK,OAAO;EAG7B,cAAc,EAAQ,OAAO;EAC7B,eAAe,EAAO,OAAO;EAG7B,cAAc,EAAQ,OAAO;EAC7B,kBAAkB,EAAI,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAG7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,cAAc,EAAQ,OAAO;EAC7B,YAAY,EAAU,kBAAkB;EACxC,YAAY,EAAU,OAAO;EAC7B,kBAAkB,EAAI,OAAO;EAG7B,YAAY,EAAU,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,WAAW,EAAW,OAAO;EAC7B,YAAY,EAAU,OAAO;EAC7B,SAAS,EAAa,OAAO;EAC7B,cAAc,EAAQ,OAAO;;AAQ/B,+BAAoB;EAIlB,eAAe,EAAI,gBAAgB;EACnC,eAAe,EAAI,gBAAgB;EACnC,cAAc,EAAK,cAAc;EACjC,eAAe,EAAI,gBAAgB;EACnC,YAAY,EAAO,eAAe;EAClC,iBAAiB,EAAE,mBAAmB;EAKtC,UAAU,EAAY,eAAe;EACrC,SAAS,EAAa,mBAAmB;EACzC,YAAY,EAAU,iBAAiB;EACvC,eAAe,EAAO,mBAAmB;EACzC,eAAe,EAAO,mBAAmB;EACzC,aAAa,EAAS,mBAAmB;EACzC,SAAS,EAAa,iBAAiB;EAKvC,YAAY,EAAU,eAAe;EACrC,gBAAgB,EAAM,mBAAmB;EACzC,YAAY,EAAU,mBAAmB;EACzC,WAAW,EAAW,cAAc;EACpC,iBAAiB,EAAK,mBAAmB;EAKzC,cAAc,EAAQ,mBAAmB;EACzC,eAAe,EAAO,mBAAmB;EAKzC,cAAc,EAAQ,eAAe;EACrC,kBAAkB,EAAI,gBAAgB;EACtC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EAKzC,mBAAmB,EAAG,cAAc;EACpC,eAAe,EAAO,gBAAgB;EACtC,iBAAiB,EAAK,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EAKzC,cAAc,EAAQ,cAAc;EACpC,cAAc,EAAQ,gBAAgB;EACtC,cAAc,EAAQ,iBAAiB;EACvC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,gBAAgB;EACtC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EAEzC,YAAY,EAAU,sBAAkC;EACxD,YAAY,EAAU,eAAe;EACrC,kBAAkB,EAAI,mBAAmB;EAMzC,YAAY,EAAU,gBAAgB;EACtC,YAAY,EAAU,gBAAgB;EACtC,WAAW,EAAW,cAAc;EACpC,YAAY,EAAU,gBAAgB;EACtC,SAAS,EAAa,eAAe;EACrC,cAAc,EAAQ,mBAAmB;EACzC,UAAU,EAAY,mBAAmB;EACzC,SAAS,EAAa,iBAAiB;EAGvC,YAAY,EAAU,eAAe;EACrC,eAAe,EAAO,eAAe;EACrC,iBAAiB,EAAK,mBAAmB;EACzC,eAAe,EAAO,cAAc;EACpC,qBAAqB,EAAE,mBAAmB;;AEnJ5C,OAAQ;EACN,UAAU,EAAE,sDAAsD;EAClE,UAAU,EAAE,4BAA4B;EACxC,KAAK,EAAE,KAAK;EAGZ;;eAEM;IACJ,KAAK,EAAE,gBAAgB;;AAI3B,aAAc;EACZ,MAAM,EAAE,OAAO;EACf,OAAO,EAAE,WAAW;EACpB,aAAa,EAAE,MAAM;EACrB,gBAAgB,EAAE,wBAAwB;EAC1C,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,qBAAqB;EAEjC,mBAAQ;IACN,gBAAgB,EAAE,wBAAwB;;AAQ9C,QAAS;EACP,UAAU,EAAE,iBAAiB;EAC7B,UAAU,EAAE,kBAAkB;EAC9B,UAAU,EAAE,6BAA6B;EAEzC,kBAAU;IACR,KAAK,EAAE,iBAAiB;IACxB,OAAO,EAAE,cAAc;IACvB,WAAW,EAAE,qBAAqB;IAClC,UAAU,EAAE,QAAQ;IAEpB,wBAAQ;MACN,gBAAgB,EAAE,oBAAoB;MACtC,KAAK,EAAE,oBAAoB;MAC3B,iBAAiB,EAAE,oBAAoB;IAGzC,yBAAS;MACP,gBAAgB,EAAE,oBAAoB;MACtC,KAAK,EAAE,oBAAoB;MAC3B,iBAAiB,EAAE,oBAAoB;MACvC,WAAW,EAAE,GAAG;;AAStB,UAAW;EACT,aAAa,EAAE,OAAO;EACtB,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,4BAA4B;EACxC,UAAU,EAAE,+BAA+B;EAE3C,gBAAQ;IACN,SAAS,EAAE,gBAAgB;IAC3B,UAAU,EAAE,4BAA4B;EAG1C,kBAAU;IACR,SAAS,EAAE,uBAAuB;;AAItC,WAAY;EACV,SAAS,EAAE,IAAI;EACf,WAAW,EAAE,GAAG;;AAGlB,WAAY;EACV,SAAS,EAAE,QAAQ;EACnB,cAAc,EAAE,SAAS;EACzB,cAAc,EAAE,MAAM;EAGtB,KAAK,EAAE,OAAO;EAGd,uDAAsB;IACpB,KAAK,EAAE,qBAAqB;;AAQhC,sBAAuB;EACrB,KAAK,EAAE,oBAAoB;;AAG7B,wBAAyB;EACvB,KAAK,EAAE,mBAAmB;;AAO5B,gBAAiB;EACf,QAAQ,EAAE,QAAQ;EAClB,MAAM,EAAE,KAAK;EACb,MAAM,EAAE,MAAM;;AAQd,qDAAW;EACT,gBAAgB,EAAE,iBAAiB;EACnC,KAAK,EAAE,iBAAiB;AAG1B,mEAAkB;EAChB,YAAY,EAAE,mBAAmB;AAGnC,iEAAiB;EACf,KAAK,EAAE,iBAAiB;;AAQ5B,kBAAmB;EACjB,QAAQ,EAAE,KAAK;EACf,GAAG,EAAE,CAAC;EACN,IAAI,EAAE,CAAC;EACP,KAAK,EAAE,CAAC;EACR,MAAM,EAAE,GAAG;EACX,UAAU,EAAE,gDAAgD;EAC5D,SAAS,EAAE,SAAS;EACpB,gBAAgB,EAAE,IAAI;EACtB,UAAU,EAAE,mBAAmB;EAC/B,OAAO,EAAE,IAAI;EACb,OAAO,EAAE,IAAI;EAEb,yBAAS;IACP,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,uCAAuC;;AAKtD,eAAgB;EACd,SAAS,EAAE,6BAA6B;;AAQ1C,0BAWC;EAVC,EAAG;IACD,SAAS,EAAE,SAAS;EAEtB,GAAI;IACF,SAAS,EAAE,WAAW;EAExB,IAAK;IACH,SAAS,EAAE,SAAS;IACpB,OAAO,EAAE,CAAC;AAKd,oBAOC;EANC,QAAS;IACP,SAAS,EAAE,QAAQ;EAErB,GAAI;IACF,SAAS,EAAE,WAAW;AAK1B,gBAOC;EANC,QAAS;IACP,OAAO,EAAE,CAAC;EAEZ,GAAI;IACF,OAAO,EAAE,GAAG;AAKhB,sBAcC;EAbC,EAAG;IACD,SAAS,EAAE,iBAAiB;IAC5B,OAAO,EAAE,CAAC;IACV,gBAAgB,EAAE,OAAO;EAE3B,GAAI;IACF,SAAS,EAAE,aAAa;IACxB,OAAO,EAAE,CAAC;IACV,gBAAgB,EAAE,OAAO;EAE3B,IAAK;IACH,gBAAgB,EAAE,WAAW;AAM/B,sBAcC;EAbC,EAAG;IACD,SAAS,EAAE,iBAAiB;IAC5B,OAAO,EAAE,CAAC;IACV,gBAAgB,EAAE,wBAAgC;EAEpD,GAAI;IACF,SAAS,EAAE,aAAa;IACxB,OAAO,EAAE,CAAC;IACV,gBAAgB,EAAE,wBAAgC;EAEpD,IAAK;IACH,gBAAgB,EAAE,WAAW;AAMnC,oCAAqC;EACnC,SAAS,EAAE,uBAAuB;;AChOpC,IAAK;EACH,gBAAgB,EAAE,eAAe;EACjC,KAAK,EAAE,iBAAiB;EACxB,WAAW,EAAE,0FAA0F;EACvG,UAAU,EAAE,6CAA6C;;AAI3D,CAAE;EACA,KAAK,EAAE,gBAAgB;EACvB,eAAe,EAAE,IAAI;EACrB,UAAU,EAAE,gBAAgB;EAE5B,OAAQ;IACN,KAAK,EAAE,sBAAsB;IAC7B,eAAe,EAAE,SAAS;;AAK9B,CAAE;EACA,mBAAmB,EAAE,qCAAqC;EAC1D,mBAAmB,EAAE,KAAK;EAC1B,0BAA0B,EAAE,IAAI;;AAIlC,gBAAiB;EACf,UAAU,EAAE,eAAe",
|
|
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
|