rails_pulse 0.3.3 → 0.4.0.pre.2

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 (169) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +299 -0
  3. data/README.md +44 -3
  4. data/app/assets/stylesheets/rails_pulse/application.css +21 -32
  5. data/app/assets/stylesheets/rails_pulse/components/backtrace.css +238 -0
  6. data/app/assets/stylesheets/rails_pulse/components/badge.css +32 -0
  7. data/app/assets/stylesheets/rails_pulse/components/button.css +2 -36
  8. data/app/assets/stylesheets/rails_pulse/components/card.css +8 -11
  9. data/app/assets/stylesheets/rails_pulse/components/chart.css +16 -3
  10. data/app/assets/stylesheets/rails_pulse/components/csp_safe_positioning.css +5 -39
  11. data/app/assets/stylesheets/rails_pulse/components/dashboard.css +0 -52
  12. data/app/assets/stylesheets/rails_pulse/components/deployments.css +39 -0
  13. data/app/assets/stylesheets/rails_pulse/components/dialog.css +0 -5
  14. data/app/assets/stylesheets/rails_pulse/components/input.css +0 -14
  15. data/app/assets/stylesheets/rails_pulse/components/layouts.css +0 -20
  16. data/app/assets/stylesheets/rails_pulse/components/menu.css +0 -16
  17. data/app/assets/stylesheets/rails_pulse/components/sidebar_menu.css +0 -16
  18. data/app/assets/stylesheets/rails_pulse/components/storage.css +187 -0
  19. data/app/assets/stylesheets/rails_pulse/components/tags.css +0 -14
  20. data/app/assets/stylesheets/rails_pulse/components/time_range_selector.css +5 -5
  21. data/app/assets/stylesheets/rails_pulse/components/utilities.css +0 -17
  22. data/app/controllers/concerns/chart_table_concern.rb +15 -3
  23. data/app/controllers/concerns/ransack_params_concern.rb +18 -0
  24. data/app/controllers/concerns/response_range_concern.rb +1 -1
  25. data/app/controllers/concerns/time_range_concern.rb +28 -14
  26. data/app/controllers/rails_pulse/application_controller.rb +104 -31
  27. data/app/controllers/rails_pulse/dashboard_controller.rb +9 -0
  28. data/app/controllers/rails_pulse/deployments_controller.rb +26 -5
  29. data/app/controllers/rails_pulse/exception_occurrences_controller.rb +19 -0
  30. data/app/controllers/rails_pulse/exceptions_controller.rb +119 -0
  31. data/app/controllers/rails_pulse/job_runs_controller.rb +1 -1
  32. data/app/controllers/rails_pulse/requests_controller.rb +1 -1
  33. data/app/controllers/rails_pulse/routes_controller.rb +7 -1
  34. data/app/controllers/rails_pulse/storage_controller.rb +7 -0
  35. data/app/controllers/rails_pulse/tags_controller.rb +2 -2
  36. data/app/helpers/rails_pulse/application_helper.rb +1 -0
  37. data/app/helpers/rails_pulse/backtrace_helper.rb +85 -0
  38. data/app/helpers/rails_pulse/breadcrumbs_helper.rb +4 -1
  39. data/app/helpers/rails_pulse/chart_helper.rb +0 -3
  40. data/app/helpers/rails_pulse/route_helper.rb +8 -16
  41. data/app/javascript/rails_pulse/application.js +29 -8
  42. data/app/javascript/rails_pulse/controllers/clipboard_controller.js +58 -0
  43. data/app/javascript/rails_pulse/controllers/index_controller.js +16 -10
  44. data/app/javascript/rails_pulse/controllers/pagination_controller.js +6 -2
  45. data/app/javascript/rails_pulse/controllers/popover_controller.js +4 -0
  46. data/app/models/concerns/rails_pulse/taggable.rb +11 -6
  47. data/app/models/rails_pulse/cards/base.rb +53 -0
  48. data/app/models/rails_pulse/dashboard/health_summary.rb +52 -0
  49. data/app/models/rails_pulse/dashboard/needs_attention.rb +73 -1
  50. data/app/models/rails_pulse/dashboard/storage_status.rb +490 -0
  51. data/app/models/rails_pulse/deployment.rb +47 -1
  52. data/app/models/rails_pulse/exception_group.rb +37 -0
  53. data/app/models/rails_pulse/exception_occurrence.rb +27 -0
  54. data/app/models/rails_pulse/exceptions/cards/exception_rate.rb +116 -0
  55. data/app/models/rails_pulse/exceptions/cards/open_groups.rb +49 -0
  56. data/app/models/rails_pulse/exceptions/cards/total_occurrences.rb +62 -0
  57. data/app/models/rails_pulse/exceptions/charts/occurrence_volume.rb +56 -0
  58. data/app/models/rails_pulse/exceptions/raw_data.rb +216 -0
  59. data/app/models/rails_pulse/jobs/cards/p95_duration.rb +8 -2
  60. data/app/models/rails_pulse/operation.rb +13 -4
  61. data/app/models/rails_pulse/queries/cards/percentile_query_times.rb +8 -3
  62. data/app/models/rails_pulse/request.rb +5 -1
  63. data/app/models/rails_pulse/route.rb +71 -21
  64. data/app/models/rails_pulse/routes/cards/error_rates.rb +6 -3
  65. data/app/models/rails_pulse/routes/cards/percentile_response_times.rb +8 -3
  66. data/app/models/rails_pulse/routes/tables/index.rb +8 -6
  67. data/app/models/rails_pulse/summary.rb +21 -10
  68. data/app/models/rails_pulse/tables/base.rb +4 -2
  69. data/app/services/rails_pulse/analysis/explain_plan_analyzer.rb +47 -12
  70. data/app/services/rails_pulse/exception_capture_service.rb +228 -0
  71. data/app/services/rails_pulse/exception_message_sanitizer.rb +152 -0
  72. data/app/services/rails_pulse/operations/change_point.rb +144 -0
  73. data/app/services/rails_pulse/operations/compare.rb +92 -0
  74. data/app/services/rails_pulse/operations/comparison.rb +126 -0
  75. data/app/services/rails_pulse/operations/metric.rb +63 -0
  76. data/app/services/rails_pulse/operations/series.rb +84 -0
  77. data/app/services/rails_pulse/operations/subject.rb +77 -0
  78. data/app/services/rails_pulse/route_controller_action_backfiller.rb +110 -0
  79. data/app/services/rails_pulse/route_merger.rb +99 -0
  80. data/app/services/rails_pulse/route_migrator.rb +139 -0
  81. data/app/services/rails_pulse/route_path_normalizer.rb +79 -0
  82. data/app/services/rails_pulse/route_recognizer.rb +47 -0
  83. data/app/services/rails_pulse/summary_service.rb +45 -0
  84. data/app/services/rails_pulse/tag_filter_service.rb +5 -3
  85. data/app/views/layouts/rails_pulse/_menu_items.html.erb +7 -0
  86. data/app/views/layouts/rails_pulse/_onboarding_banner.html.erb +8 -0
  87. data/app/views/layouts/rails_pulse/_setup_screen.html.erb +5 -5
  88. data/app/views/layouts/rails_pulse/application.html.erb +4 -4
  89. data/app/views/rails_pulse/components/_empty_state.html.erb +1 -1
  90. data/app/views/rails_pulse/components/_panel.html.erb +16 -6
  91. data/app/views/rails_pulse/components/_raw_data.html.erb +34 -0
  92. data/app/views/rails_pulse/dashboard/_chart_panel.html.erb +6 -8
  93. data/app/views/rails_pulse/dashboard/_deployments_panel.html.erb +64 -0
  94. data/app/views/rails_pulse/dashboard/_health_badge.html.erb +21 -10
  95. data/app/views/rails_pulse/dashboard/_storage_panel.html.erb +67 -0
  96. data/app/views/rails_pulse/dashboard/index.html.erb +22 -1
  97. data/app/views/rails_pulse/deployments/_status_badge.html.erb +5 -0
  98. data/app/views/rails_pulse/deployments/_table.html.erb +29 -0
  99. data/app/views/rails_pulse/deployments/index.html.erb +15 -0
  100. data/app/views/rails_pulse/deployments/show.html.erb +62 -0
  101. data/app/views/rails_pulse/exception_occurrences/show.html.erb +45 -0
  102. data/app/views/rails_pulse/exceptions/_backtrace.html.erb +33 -0
  103. data/app/views/rails_pulse/exceptions/_metric_cards.html.erb +6 -0
  104. data/app/views/rails_pulse/exceptions/_occurrences_table.html.erb +23 -0
  105. data/app/views/rails_pulse/exceptions/_status_badge.html.erb +6 -0
  106. data/app/views/rails_pulse/exceptions/_table.html.erb +33 -0
  107. data/app/views/rails_pulse/exceptions/index.html.erb +66 -0
  108. data/app/views/rails_pulse/exceptions/show.html.erb +52 -0
  109. data/app/views/rails_pulse/queries/_raw_data.html.erb +1 -23
  110. data/app/views/rails_pulse/requests/_table.html.erb +1 -1
  111. data/app/views/rails_pulse/routes/_requests_table.html.erb +5 -0
  112. data/app/views/rails_pulse/routes/_table.html.erb +22 -8
  113. data/app/views/rails_pulse/routes/index.html.erb +5 -1
  114. data/app/views/rails_pulse/routes/show.html.erb +5 -0
  115. data/app/views/rails_pulse/storage/show.html.erb +123 -0
  116. data/config/routes.rb +13 -4
  117. data/db/rails_pulse_migrate/20260506000001_create_rails_pulse_exceptions.rb +50 -0
  118. data/db/rails_pulse_migrate/20260507000001_add_actual_query_to_operations.rb +10 -5
  119. data/db/rails_pulse_migrate/20260610000001_add_controller_action_to_rails_pulse_routes.rb +8 -0
  120. data/db/rails_pulse_migrate/20260610000002_change_rails_pulse_routes_to_multi_verb_model.rb +185 -0
  121. data/db/rails_pulse_migrate/20260610000003_add_null_action_unique_index_to_routes.rb +32 -0
  122. data/db/rails_pulse_migrate/20260823000001_add_location_to_exception_groups.rb +12 -0
  123. data/db/rails_pulse_schema.rb +54 -6
  124. data/lib/generators/rails_pulse/base_methods.rb +2 -0
  125. data/lib/generators/rails_pulse/install_generator.rb +5 -0
  126. data/lib/generators/rails_pulse/schema_parser.rb +22 -2
  127. data/lib/generators/rails_pulse/templates/db/rails_pulse_schema.rb +54 -6
  128. data/lib/generators/rails_pulse/templates/migrations/upgrade_rails_pulse_tables.rb +1 -1
  129. data/lib/generators/rails_pulse/templates/rails_pulse.rb +157 -16
  130. data/lib/generators/rails_pulse/upgrade_generator.rb +166 -38
  131. data/lib/rails_pulse/cleanup_service.rb +110 -15
  132. data/lib/rails_pulse/configuration.rb +125 -6
  133. data/lib/rails_pulse/engine.rb +32 -17
  134. data/lib/rails_pulse/installers/config_updater.rb +202 -0
  135. data/lib/rails_pulse/job_run_collector.rb +43 -16
  136. data/lib/rails_pulse/middleware/asset_server.rb +11 -0
  137. data/lib/rails_pulse/middleware/request_collector.rb +9 -4
  138. data/lib/rails_pulse/packaged_assets.rb +147 -0
  139. data/lib/rails_pulse/route_indexes.rb +66 -0
  140. data/lib/rails_pulse/subscribers/exception_subscriber.rb +36 -0
  141. data/lib/rails_pulse/tracker.rb +29 -10
  142. data/lib/rails_pulse/version.rb +1 -1
  143. data/lib/rails_pulse.rb +1 -0
  144. data/lib/rails_pulse_server.ru +16 -47
  145. data/lib/tasks/rails_pulse.rake +83 -4
  146. data/lib/tasks/rails_pulse_assets.rake +15 -0
  147. data/lib/tasks/rails_pulse_tasks.rake +29 -0
  148. data/public/rails-pulse-assets/rails-pulse-icons.js +6 -2
  149. data/public/rails-pulse-assets/rails-pulse.css +1 -1
  150. data/public/rails-pulse-assets/rails-pulse.js +18 -117
  151. metadata +78 -37
  152. data/Rakefile +0 -554
  153. data/app/javascript/rails_pulse/controllers/form_controller.js +0 -39
  154. data/app/javascript/rails_pulse/controllers/period_selector_controller.js +0 -19
  155. data/app/javascript/rails_pulse/controllers/timezone_controller.js +0 -89
  156. data/app/javascript/rails_pulse/theme.js +0 -416
  157. data/config/brakeman.ignore +0 -190
  158. data/config/brakeman.yml +0 -68
  159. data/config/initializers/rails_pulse.rb +0 -287
  160. data/public/rails-pulse-assets/csp-test.js +0 -120
  161. data/public/rails-pulse-assets/rails-pulse-icons.js.map +0 -13
  162. data/public/rails-pulse-assets/rails-pulse.css.map +0 -1
  163. data/public/rails-pulse-assets/rails-pulse.js.map +0 -7
  164. data/vendor/assets/javascripts/rails-pulse-icons.js +0 -93
  165. data/vendor/assets/javascripts/rails-pulse-icons.js.map +0 -13
  166. data/vendor/assets/javascripts/rails-pulse.js +0 -157
  167. data/vendor/assets/javascripts/rails-pulse.js.map +0 -7
  168. data/vendor/assets/stylesheets/rails-pulse.css +0 -1
  169. data/vendor/assets/stylesheets/rails-pulse.css.map +0 -1
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_pulse
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0.pre.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Harvey
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-06-23 00:00:00.000000000 Z
11
+ date: 2026-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -58,20 +58,6 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '4.0'
61
- - !ruby/object:Gem::Dependency
62
- name: async
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '2.0'
68
- type: :runtime
69
- prerelease: false
70
- version_requirements: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '2.0'
75
61
  - !ruby/object:Gem::Dependency
76
62
  name: sqlite3
77
63
  requirement: !ruby/object:Gem::Requirement
@@ -200,9 +186,9 @@ executables:
200
186
  extensions: []
201
187
  extra_rdoc_files: []
202
188
  files:
189
+ - CHANGELOG.md
203
190
  - MIT-LICENSE
204
191
  - README.md
205
- - Rakefile
206
192
  - app/assets/images/rails_pulse/dashboard.png
207
193
  - app/assets/images/rails_pulse/query-show.png
208
194
  - app/assets/images/rails_pulse/rails-pulse-logo.png
@@ -211,6 +197,7 @@ files:
211
197
  - app/assets/images/rails_pulse/route-show.png
212
198
  - app/assets/stylesheets/rails_pulse/application.css
213
199
  - app/assets/stylesheets/rails_pulse/components/alert.css
200
+ - app/assets/stylesheets/rails_pulse/components/backtrace.css
214
201
  - app/assets/stylesheets/rails_pulse/components/badge.css
215
202
  - app/assets/stylesheets/rails_pulse/components/base.css
216
203
  - app/assets/stylesheets/rails_pulse/components/breadcrumb.css
@@ -221,6 +208,7 @@ files:
221
208
  - app/assets/stylesheets/rails_pulse/components/csp_safe_positioning.css
222
209
  - app/assets/stylesheets/rails_pulse/components/dashboard.css
223
210
  - app/assets/stylesheets/rails_pulse/components/datepicker.css
211
+ - app/assets/stylesheets/rails_pulse/components/deployments.css
224
212
  - app/assets/stylesheets/rails_pulse/components/descriptive_list.css
225
213
  - app/assets/stylesheets/rails_pulse/components/dialog.css
226
214
  - app/assets/stylesheets/rails_pulse/components/flash.css
@@ -233,6 +221,7 @@ files:
233
221
  - app/assets/stylesheets/rails_pulse/components/setup_banner.css
234
222
  - app/assets/stylesheets/rails_pulse/components/sidebar_menu.css
235
223
  - app/assets/stylesheets/rails_pulse/components/skeleton.css
224
+ - app/assets/stylesheets/rails_pulse/components/storage.css
236
225
  - app/assets/stylesheets/rails_pulse/components/switch.css
237
226
  - app/assets/stylesheets/rails_pulse/components/table.css
238
227
  - app/assets/stylesheets/rails_pulse/components/tags.css
@@ -243,6 +232,7 @@ files:
243
232
  - app/controllers/concerns/metric_card_concern.rb
244
233
  - app/controllers/concerns/page_timings.rb
245
234
  - app/controllers/concerns/pagination_concern.rb
235
+ - app/controllers/concerns/ransack_params_concern.rb
246
236
  - app/controllers/concerns/response_range_concern.rb
247
237
  - app/controllers/concerns/session_filters_concern.rb
248
238
  - app/controllers/concerns/tag_filter_concern.rb
@@ -253,14 +243,18 @@ files:
253
243
  - app/controllers/rails_pulse/csp_test_controller.rb
254
244
  - app/controllers/rails_pulse/dashboard_controller.rb
255
245
  - app/controllers/rails_pulse/deployments_controller.rb
246
+ - app/controllers/rails_pulse/exception_occurrences_controller.rb
247
+ - app/controllers/rails_pulse/exceptions_controller.rb
256
248
  - app/controllers/rails_pulse/job_runs_controller.rb
257
249
  - app/controllers/rails_pulse/jobs_controller.rb
258
250
  - app/controllers/rails_pulse/operations_controller.rb
259
251
  - app/controllers/rails_pulse/queries_controller.rb
260
252
  - app/controllers/rails_pulse/requests_controller.rb
261
253
  - app/controllers/rails_pulse/routes_controller.rb
254
+ - app/controllers/rails_pulse/storage_controller.rb
262
255
  - app/controllers/rails_pulse/tags_controller.rb
263
256
  - app/helpers/rails_pulse/application_helper.rb
257
+ - app/helpers/rails_pulse/backtrace_helper.rb
264
258
  - app/helpers/rails_pulse/breadcrumbs_helper.rb
265
259
  - app/helpers/rails_pulse/chart_helper.rb
266
260
  - app/helpers/rails_pulse/csp_helper.rb
@@ -274,6 +268,7 @@ files:
274
268
  - app/javascript/rails_pulse/application.js
275
269
  - app/javascript/rails_pulse/controllers/chart_controller.js
276
270
  - app/javascript/rails_pulse/controllers/chart_switcher_controller.js
271
+ - app/javascript/rails_pulse/controllers/clipboard_controller.js
277
272
  - app/javascript/rails_pulse/controllers/collapsible_controller.js
278
273
  - app/javascript/rails_pulse/controllers/color_scheme_controller.js
279
274
  - app/javascript/rails_pulse/controllers/context_menu_controller.js
@@ -283,19 +278,15 @@ files:
283
278
  - app/javascript/rails_pulse/controllers/dialog_controller.js
284
279
  - app/javascript/rails_pulse/controllers/expandable_rows_controller.js
285
280
  - app/javascript/rails_pulse/controllers/flame_graph_controller.js
286
- - app/javascript/rails_pulse/controllers/form_controller.js
287
281
  - app/javascript/rails_pulse/controllers/global_filters_controller.js
288
282
  - app/javascript/rails_pulse/controllers/icon_controller.js
289
283
  - app/javascript/rails_pulse/controllers/index_controller.js
290
284
  - app/javascript/rails_pulse/controllers/menu_controller.js
291
285
  - app/javascript/rails_pulse/controllers/pagination_controller.js
292
- - app/javascript/rails_pulse/controllers/period_selector_controller.js
293
286
  - app/javascript/rails_pulse/controllers/popover_controller.js
294
287
  - app/javascript/rails_pulse/controllers/series_toggle_controller.js
295
288
  - app/javascript/rails_pulse/controllers/table_sort_controller.js
296
289
  - app/javascript/rails_pulse/controllers/time_range_controller.js
297
- - app/javascript/rails_pulse/controllers/timezone_controller.js
298
- - app/javascript/rails_pulse/theme.js
299
290
  - app/javascript/rails_pulse/utils/fetch_helpers.js
300
291
  - app/jobs/rails_pulse/application_job.rb
301
292
  - app/jobs/rails_pulse/backfill_summaries_job.rb
@@ -316,7 +307,15 @@ files:
316
307
  - app/models/rails_pulse/dashboard/health_summary.rb
317
308
  - app/models/rails_pulse/dashboard/needs_attention.rb
318
309
  - app/models/rails_pulse/dashboard/storage_pressure.rb
310
+ - app/models/rails_pulse/dashboard/storage_status.rb
319
311
  - app/models/rails_pulse/deployment.rb
312
+ - app/models/rails_pulse/exception_group.rb
313
+ - app/models/rails_pulse/exception_occurrence.rb
314
+ - app/models/rails_pulse/exceptions/cards/exception_rate.rb
315
+ - app/models/rails_pulse/exceptions/cards/open_groups.rb
316
+ - app/models/rails_pulse/exceptions/cards/total_occurrences.rb
317
+ - app/models/rails_pulse/exceptions/charts/occurrence_volume.rb
318
+ - app/models/rails_pulse/exceptions/raw_data.rb
320
319
  - app/models/rails_pulse/job.rb
321
320
  - app/models/rails_pulse/job_run.rb
322
321
  - app/models/rails_pulse/jobs/cards/failure_rate.rb
@@ -354,8 +353,21 @@ files:
354
353
  - app/services/rails_pulse/analysis/n_plus_one_detector.rb
355
354
  - app/services/rails_pulse/analysis/query_characteristics_analyzer.rb
356
355
  - app/services/rails_pulse/analysis/suggestion_generator.rb
356
+ - app/services/rails_pulse/exception_capture_service.rb
357
+ - app/services/rails_pulse/exception_message_sanitizer.rb
357
358
  - app/services/rails_pulse/operation_suggestions.rb
359
+ - app/services/rails_pulse/operations/change_point.rb
360
+ - app/services/rails_pulse/operations/compare.rb
361
+ - app/services/rails_pulse/operations/comparison.rb
362
+ - app/services/rails_pulse/operations/metric.rb
363
+ - app/services/rails_pulse/operations/series.rb
364
+ - app/services/rails_pulse/operations/subject.rb
358
365
  - app/services/rails_pulse/query_analysis_service.rb
366
+ - app/services/rails_pulse/route_controller_action_backfiller.rb
367
+ - app/services/rails_pulse/route_merger.rb
368
+ - app/services/rails_pulse/route_migrator.rb
369
+ - app/services/rails_pulse/route_path_normalizer.rb
370
+ - app/services/rails_pulse/route_recognizer.rb
359
371
  - app/services/rails_pulse/sql_query_normalizer.rb
360
372
  - app/services/rails_pulse/summary_service.rb
361
373
  - app/services/rails_pulse/tag_filter_service.rb
@@ -374,6 +386,7 @@ files:
374
386
  - app/views/rails_pulse/components/_operation_details_popover.html.erb
375
387
  - app/views/rails_pulse/components/_page_header.html.erb
376
388
  - app/views/rails_pulse/components/_panel.html.erb
389
+ - app/views/rails_pulse/components/_raw_data.html.erb
377
390
  - app/views/rails_pulse/components/_sparkline_stats.html.erb
378
391
  - app/views/rails_pulse/components/_table.html.erb
379
392
  - app/views/rails_pulse/components/_table_head.html.erb
@@ -383,12 +396,26 @@ files:
383
396
  - app/views/rails_pulse/dashboard/_attention_item.html.erb
384
397
  - app/views/rails_pulse/dashboard/_attention_section.html.erb
385
398
  - app/views/rails_pulse/dashboard/_chart_panel.html.erb
399
+ - app/views/rails_pulse/dashboard/_deployments_panel.html.erb
386
400
  - app/views/rails_pulse/dashboard/_health_badge.html.erb
387
401
  - app/views/rails_pulse/dashboard/_series_toggle.html.erb
402
+ - app/views/rails_pulse/dashboard/_storage_panel.html.erb
388
403
  - app/views/rails_pulse/dashboard/charts/_bar_chart.html.erb
389
404
  - app/views/rails_pulse/dashboard/index.html.erb
390
405
  - app/views/rails_pulse/dashboard/tables/_routes_table.html.erb
391
406
  - app/views/rails_pulse/dashboard/tables/_standard_table.html.erb
407
+ - app/views/rails_pulse/deployments/_status_badge.html.erb
408
+ - app/views/rails_pulse/deployments/_table.html.erb
409
+ - app/views/rails_pulse/deployments/index.html.erb
410
+ - app/views/rails_pulse/deployments/show.html.erb
411
+ - app/views/rails_pulse/exception_occurrences/show.html.erb
412
+ - app/views/rails_pulse/exceptions/_backtrace.html.erb
413
+ - app/views/rails_pulse/exceptions/_metric_cards.html.erb
414
+ - app/views/rails_pulse/exceptions/_occurrences_table.html.erb
415
+ - app/views/rails_pulse/exceptions/_status_badge.html.erb
416
+ - app/views/rails_pulse/exceptions/_table.html.erb
417
+ - app/views/rails_pulse/exceptions/index.html.erb
418
+ - app/views/rails_pulse/exceptions/show.html.erb
392
419
  - app/views/rails_pulse/job_runs/_operations.html.erb
393
420
  - app/views/rails_pulse/job_runs/index.html.erb
394
421
  - app/views/rails_pulse/job_runs/show.html.erb
@@ -428,19 +455,22 @@ files:
428
455
  - app/views/rails_pulse/skeletons/_metric_card.html.erb
429
456
  - app/views/rails_pulse/skeletons/_panel.html.erb
430
457
  - app/views/rails_pulse/skeletons/_table.html.erb
458
+ - app/views/rails_pulse/storage/show.html.erb
431
459
  - app/views/rails_pulse/tags/_tag_manager.html.erb
432
- - config/brakeman.ignore
433
- - config/brakeman.yml
434
460
  - config/importmap.rb
435
- - config/initializers/rails_pulse.rb
436
461
  - config/routes.rb
437
462
  - db/rails_pulse_migrate/20260417000001_add_diagnostic_fields.rb
438
463
  - db/rails_pulse_migrate/20260419000001_add_p95_p99_duration_to_rails_pulse_jobs.rb
439
464
  - db/rails_pulse_migrate/20260420000001_expand_normalized_query_column.rb
440
465
  - db/rails_pulse_migrate/20260426000001_create_rails_pulse_deployments.rb
466
+ - db/rails_pulse_migrate/20260506000001_create_rails_pulse_exceptions.rb
441
467
  - db/rails_pulse_migrate/20260507000001_add_actual_query_to_operations.rb
442
468
  - db/rails_pulse_migrate/20260517000001_create_rails_pulse_job_runs.rb
443
469
  - db/rails_pulse_migrate/20260525000001_make_cache_hit_on_operations_nullable.rb
470
+ - db/rails_pulse_migrate/20260610000001_add_controller_action_to_rails_pulse_routes.rb
471
+ - db/rails_pulse_migrate/20260610000002_change_rails_pulse_routes_to_multi_verb_model.rb
472
+ - db/rails_pulse_migrate/20260610000003_add_null_action_unique_index_to_routes.rb
473
+ - db/rails_pulse_migrate/20260823000001_add_location_to_exception_groups.rb
444
474
  - db/rails_pulse_schema.rb
445
475
  - exe/rails_pulse_server
446
476
  - lib/generators/rails_pulse/base_methods.rb
@@ -462,37 +492,32 @@ files:
462
492
  - lib/rails_pulse/engine.rb
463
493
  - lib/rails_pulse/extensions/active_record.rb
464
494
  - lib/rails_pulse/installers/config_installer.rb
495
+ - lib/rails_pulse/installers/config_updater.rb
465
496
  - lib/rails_pulse/installers/migration_installer.rb
466
497
  - lib/rails_pulse/job_run_collector.rb
467
498
  - lib/rails_pulse/middleware/asset_server.rb
468
499
  - lib/rails_pulse/middleware/request_collector.rb
500
+ - lib/rails_pulse/packaged_assets.rb
469
501
  - lib/rails_pulse/paginator.rb
470
502
  - lib/rails_pulse/rack_compat.rb
503
+ - lib/rails_pulse/route_indexes.rb
471
504
  - lib/rails_pulse/statistics.rb
472
505
  - lib/rails_pulse/stats/cleanup_stats_reporter.rb
506
+ - lib/rails_pulse/subscribers/exception_subscriber.rb
473
507
  - lib/rails_pulse/subscribers/operation_subscriber.rb
474
508
  - lib/rails_pulse/tasks/cleanup_task_runner.rb
475
509
  - lib/rails_pulse/tracker.rb
476
510
  - lib/rails_pulse/version.rb
477
511
  - lib/rails_pulse_server.ru
478
512
  - lib/tasks/rails_pulse.rake
513
+ - lib/tasks/rails_pulse_assets.rake
479
514
  - lib/tasks/rails_pulse_tasks.rake
480
- - public/rails-pulse-assets/csp-test.js
481
515
  - public/rails-pulse-assets/rails-pulse-icons.js
482
- - public/rails-pulse-assets/rails-pulse-icons.js.map
483
516
  - public/rails-pulse-assets/rails-pulse-logo.png
484
517
  - public/rails-pulse-assets/rails-pulse.css
485
- - public/rails-pulse-assets/rails-pulse.css.map
486
518
  - public/rails-pulse-assets/rails-pulse.js
487
- - public/rails-pulse-assets/rails-pulse.js.map
488
519
  - public/rails-pulse-assets/search.svg
489
520
  - vendor/VENDORING.md
490
- - vendor/assets/javascripts/rails-pulse-icons.js
491
- - vendor/assets/javascripts/rails-pulse-icons.js.map
492
- - vendor/assets/javascripts/rails-pulse.js
493
- - vendor/assets/javascripts/rails-pulse.js.map
494
- - vendor/assets/stylesheets/rails-pulse.css
495
- - vendor/assets/stylesheets/rails-pulse.css.map
496
521
  - vendor/css-zero/animations.css
497
522
  - vendor/css-zero/borders.css
498
523
  - vendor/css-zero/colors.css
@@ -515,9 +540,25 @@ metadata:
515
540
  source_code_uri: https://github.com/railspulse/rails_pulse
516
541
  changelog_uri: https://github.com/railspulse/rails_pulse/blob/main/CHANGELOG.md
517
542
  documentation_uri: https://railspulse.com/documentation/installation
543
+ bug_tracker_uri: https://github.com/railspulse/rails_pulse/issues
544
+ rubygems_mfa_required: 'true'
518
545
  post_install_message: |
519
- Rails Pulse 0.3.3 installed. If upgrading, run:
520
- rails generate rails_pulse:upgrade && rails db:migrate
546
+ Rails Pulse 0.4.0.pre.2 installed.
547
+
548
+ UPGRADING from any 0.3.x? This release changes route identity and DROPS
549
+ rails_pulse_routes.method. Back up your database first, then run:
550
+
551
+ rails generate rails_pulse:upgrade
552
+ rails db:migrate # separate Pulse DB: rails db:migrate:rails_pulse
553
+ rails rails_pulse:migrate_routes # REQUIRED - migrate alone leaves Action empty
554
+
555
+ Then restart ALL processes together. A rolling restart that leaves old
556
+ processes against the new schema breaks tracking and the routes dashboard.
557
+ Separate database: set schema_dump: false and delete db/rails_pulse_structure.sql.
558
+ Exception tracking is inserted as disabled; set track_exceptions = true to opt in.
559
+
560
+ New install? Run: rails generate rails_pulse:install
561
+ Changelog: https://github.com/railspulse/rails_pulse/blob/main/CHANGELOG.md
521
562
  rdoc_options: []
522
563
  require_paths:
523
564
  - lib
@@ -525,7 +566,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
525
566
  requirements:
526
567
  - - ">="
527
568
  - !ruby/object:Gem::Version
528
- version: 3.0.0
569
+ version: 3.1.0
529
570
  required_rubygems_version: !ruby/object:Gem::Requirement
530
571
  requirements:
531
572
  - - ">="