railwatch 0.9.3 → 1.0.0

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 (454) hide show
  1. checksums.yaml +4 -4
  2. data/AGENTS.md +37 -33
  3. data/CHANGELOG.md +66 -0
  4. data/README.md +51 -60
  5. data/config/routes.rb +0 -59
  6. data/docs/ai-and-mcp.md +9 -8
  7. data/docs/configuration.md +57 -71
  8. data/docs/faq.md +17 -25
  9. data/docs/getting-started.md +105 -117
  10. data/docs/replacing-nightwatch.md +8 -7
  11. data/docs/replacing-sentry.md +12 -16
  12. data/docs/security.md +14 -20
  13. data/docs/self-hosting.md +24 -22
  14. data/docs/testing.md +6 -14
  15. data/docs/troubleshooting.md +12 -46
  16. data/lib/generators/railwatch/install/install_generator.rb +12 -240
  17. data/lib/generators/railwatch/install/templates/initializer.rb.tt +10 -40
  18. data/lib/generators/railwatch/install/templates/post-deploy +0 -7
  19. data/lib/railwatch/authentication.rb +6 -5
  20. data/lib/railwatch/buffer.rb +9 -0
  21. data/lib/railwatch/configuration.rb +21 -151
  22. data/lib/railwatch/engine.rb +9 -118
  23. data/lib/railwatch/patches.rb +0 -11
  24. data/lib/railwatch/reporter.rb +92 -21
  25. data/lib/railwatch/sampler.rb +10 -2
  26. data/lib/railwatch/subscribers/process_info.rb +1 -2
  27. data/lib/railwatch/version.rb +1 -1
  28. data/lib/railwatch.rb +8 -64
  29. data/lib/tasks/railwatch_tasks.rake +3 -325
  30. data/llms.txt +23 -25
  31. metadata +3 -453
  32. data/app/channels/railwatch/environment_channel.rb +0 -62
  33. data/app/controllers/concerns/railwatch/telemetry_identity.rb +0 -25
  34. data/app/controllers/railwatch/alerts_controller.rb +0 -48
  35. data/app/controllers/railwatch/anomaly_rules_controller.rb +0 -31
  36. data/app/controllers/railwatch/attachments_controller.rb +0 -22
  37. data/app/controllers/railwatch/broadcasts_controller.rb +0 -15
  38. data/app/controllers/railwatch/cache_events_controller.rb +0 -30
  39. data/app/controllers/railwatch/commands_controller.rb +0 -16
  40. data/app/controllers/railwatch/comments_controller.rb +0 -11
  41. data/app/controllers/railwatch/dashboard_controller.rb +0 -70
  42. data/app/controllers/railwatch/deploys_controller.rb +0 -34
  43. data/app/controllers/railwatch/deprecations_controller.rb +0 -54
  44. data/app/controllers/railwatch/environment_scoped.rb +0 -81
  45. data/app/controllers/railwatch/exceptions_controller.rb +0 -52
  46. data/app/controllers/railwatch/executions_controller.rb +0 -13
  47. data/app/controllers/railwatch/issues_controller.rb +0 -258
  48. data/app/controllers/railwatch/jobs_controller.rb +0 -63
  49. data/app/controllers/railwatch/llm_calls_controller.rb +0 -124
  50. data/app/controllers/railwatch/logs_controller.rb +0 -40
  51. data/app/controllers/railwatch/mails_controller.rb +0 -19
  52. data/app/controllers/railwatch/notifications_controller.rb +0 -11
  53. data/app/controllers/railwatch/outgoing_requests_controller.rb +0 -19
  54. data/app/controllers/railwatch/overview_controller.rb +0 -38
  55. data/app/controllers/railwatch/people_controller.rb +0 -25
  56. data/app/controllers/railwatch/processes_controller.rb +0 -33
  57. data/app/controllers/railwatch/profiles_controller.rb +0 -65
  58. data/app/controllers/railwatch/queries_controller.rb +0 -59
  59. data/app/controllers/railwatch/releases_controller.rb +0 -75
  60. data/app/controllers/railwatch/requests_controller.rb +0 -37
  61. data/app/controllers/railwatch/saved_views_controller.rb +0 -53
  62. data/app/controllers/railwatch/scheduled_tasks_controller.rb +0 -45
  63. data/app/controllers/railwatch/spans_controller.rb +0 -47
  64. data/app/controllers/railwatch/storage_ops_controller.rb +0 -15
  65. data/app/controllers/railwatch/tenants_controller.rb +0 -44
  66. data/app/controllers/railwatch/thresholds_controller.rb +0 -47
  67. data/app/controllers/railwatch/traces_controller.rb +0 -72
  68. data/app/controllers/railwatch/transactions_controller.rb +0 -21
  69. data/app/controllers/railwatch/view_renders_controller.rb +0 -28
  70. data/app/controllers/railwatch/visits_controller.rb +0 -53
  71. data/app/frontend/components/app-content.tsx +0 -26
  72. data/app/frontend/components/app-logo-icon.tsx +0 -23
  73. data/app/frontend/components/app-logo.tsx +0 -14
  74. data/app/frontend/components/app-shell.tsx +0 -38
  75. data/app/frontend/components/app-sidebar-header.tsx +0 -54
  76. data/app/frontend/components/app-sidebar.tsx +0 -94
  77. data/app/frontend/components/app-wordmark.tsx +0 -29
  78. data/app/frontend/components/breadcrumbs.tsx +0 -46
  79. data/app/frontend/components/icon.tsx +0 -16
  80. data/app/frontend/components/input-error.tsx +0 -18
  81. data/app/frontend/components/nav-footer.tsx +0 -46
  82. data/app/frontend/components/nav-main.tsx +0 -41
  83. data/app/frontend/components/nav-user.tsx +0 -50
  84. data/app/frontend/components/railwatch/chart-hover.tsx +0 -34
  85. data/app/frontend/components/railwatch/chart-panel.tsx +0 -170
  86. data/app/frontend/components/railwatch/code.tsx +0 -28
  87. data/app/frontend/components/railwatch/command-palette.tsx +0 -132
  88. data/app/frontend/components/railwatch/copy-block.tsx +0 -52
  89. data/app/frontend/components/railwatch/copy-id.tsx +0 -49
  90. data/app/frontend/components/railwatch/cursor-load-more.tsx +0 -39
  91. data/app/frontend/components/railwatch/data-table.tsx +0 -195
  92. data/app/frontend/components/railwatch/digit-roll.tsx +0 -312
  93. data/app/frontend/components/railwatch/empty-state.tsx +0 -159
  94. data/app/frontend/components/railwatch/env-nav.tsx +0 -130
  95. data/app/frontend/components/railwatch/env-switcher.tsx +0 -145
  96. data/app/frontend/components/railwatch/filter-bar.tsx +0 -153
  97. data/app/frontend/components/railwatch/flamegraph.tsx +0 -324
  98. data/app/frontend/components/railwatch/frames.tsx +0 -295
  99. data/app/frontend/components/railwatch/json-viewer.tsx +0 -159
  100. data/app/frontend/components/railwatch/live-dot.tsx +0 -78
  101. data/app/frontend/components/railwatch/live-toggle.tsx +0 -76
  102. data/app/frontend/components/railwatch/metric-chart.tsx +0 -112
  103. data/app/frontend/components/railwatch/mobile-page-switcher.tsx +0 -89
  104. data/app/frontend/components/railwatch/onboarding.tsx +0 -91
  105. data/app/frontend/components/railwatch/origin-identity.tsx +0 -84
  106. data/app/frontend/components/railwatch/page-header.tsx +0 -42
  107. data/app/frontend/components/railwatch/percentile-picker.tsx +0 -18
  108. data/app/frontend/components/railwatch/relative-time.tsx +0 -18
  109. data/app/frontend/components/railwatch/saved-views.tsx +0 -232
  110. data/app/frontend/components/railwatch/segmented.tsx +0 -64
  111. data/app/frontend/components/railwatch/series-chart.tsx +0 -400
  112. data/app/frontend/components/railwatch/shortcuts-dialog.tsx +0 -89
  113. data/app/frontend/components/railwatch/signal-toast.tsx +0 -121
  114. data/app/frontend/components/railwatch/sort-header.tsx +0 -37
  115. data/app/frontend/components/railwatch/source-link.tsx +0 -57
  116. data/app/frontend/components/railwatch/sparkline-cell.tsx +0 -14
  117. data/app/frontend/components/railwatch/sql-block.tsx +0 -116
  118. data/app/frontend/components/railwatch/stat.tsx +0 -185
  119. data/app/frontend/components/railwatch/status-badge.tsx +0 -79
  120. data/app/frontend/components/railwatch/step-picker.tsx +0 -57
  121. data/app/frontend/components/railwatch/timeline.tsx +0 -405
  122. data/app/frontend/components/railwatch/utilisation-bar.tsx +0 -44
  123. data/app/frontend/components/railwatch/window-picker.tsx +0 -147
  124. data/app/frontend/components/ui/avatar.tsx +0 -51
  125. data/app/frontend/components/ui/badge.tsx +0 -46
  126. data/app/frontend/components/ui/breadcrumb.tsx +0 -109
  127. data/app/frontend/components/ui/button.tsx +0 -60
  128. data/app/frontend/components/ui/card.tsx +0 -92
  129. data/app/frontend/components/ui/chart.tsx +0 -374
  130. data/app/frontend/components/ui/checkbox.tsx +0 -32
  131. data/app/frontend/components/ui/collapsible.tsx +0 -31
  132. data/app/frontend/components/ui/command.tsx +0 -182
  133. data/app/frontend/components/ui/dialog.tsx +0 -158
  134. data/app/frontend/components/ui/dropdown-menu.tsx +0 -255
  135. data/app/frontend/components/ui/hover-card.tsx +0 -42
  136. data/app/frontend/components/ui/input.tsx +0 -21
  137. data/app/frontend/components/ui/label.tsx +0 -24
  138. data/app/frontend/components/ui/popover.tsx +0 -87
  139. data/app/frontend/components/ui/select.tsx +0 -185
  140. data/app/frontend/components/ui/separator.tsx +0 -28
  141. data/app/frontend/components/ui/sheet.tsx +0 -137
  142. data/app/frontend/components/ui/sidebar.tsx +0 -726
  143. data/app/frontend/components/ui/skeleton.tsx +0 -13
  144. data/app/frontend/components/ui/sonner.tsx +0 -41
  145. data/app/frontend/components/ui/table.tsx +0 -114
  146. data/app/frontend/components/ui/tabs.tsx +0 -91
  147. data/app/frontend/components/ui/textarea.tsx +0 -18
  148. data/app/frontend/components/ui/tooltip.tsx +0 -61
  149. data/app/frontend/components/user-info.tsx +0 -32
  150. data/app/frontend/components/user-menu-content.tsx +0 -94
  151. data/app/frontend/entrypoints/application.css +0 -244
  152. data/app/frontend/entrypoints/inertia.tsx +0 -92
  153. data/app/frontend/fonts/CommitMono-Bold.woff2 +0 -0
  154. data/app/frontend/fonts/CommitMono-Regular.woff2 +0 -0
  155. data/app/frontend/fonts/Roboto-Black.woff2 +0 -0
  156. data/app/frontend/fonts/Roboto-Bold.woff2 +0 -0
  157. data/app/frontend/fonts/Roboto-Medium.woff2 +0 -0
  158. data/app/frontend/fonts/Roboto-Regular.woff2 +0 -0
  159. data/app/frontend/hooks/use-appearance.tsx +0 -67
  160. data/app/frontend/hooks/use-clipboard.ts +0 -32
  161. data/app/frontend/hooks/use-flash.tsx +0 -23
  162. data/app/frontend/hooks/use-hotkeys.ts +0 -63
  163. data/app/frontend/hooks/use-initials.tsx +0 -15
  164. data/app/frontend/hooks/use-live.ts +0 -205
  165. data/app/frontend/hooks/use-mobile-navigation.ts +0 -8
  166. data/app/frontend/hooks/use-mobile.ts +0 -21
  167. data/app/frontend/hooks/use-percentile.ts +0 -24
  168. data/app/frontend/hooks/use-reduced-motion.ts +0 -25
  169. data/app/frontend/hooks/use-row-nav.ts +0 -106
  170. data/app/frontend/hooks/use-step.ts +0 -27
  171. data/app/frontend/hooks/use-ticker.ts +0 -12
  172. data/app/frontend/hooks/use-window.ts +0 -58
  173. data/app/frontend/layouts/app/app-sidebar-layout.tsx +0 -107
  174. data/app/frontend/layouts/app-layout.tsx +0 -21
  175. data/app/frontend/layouts/env-layout.tsx +0 -53
  176. data/app/frontend/layouts/persistent-layout.tsx +0 -18
  177. data/app/frontend/lib/cable.ts +0 -10
  178. data/app/frontend/lib/env-pages.ts +0 -236
  179. data/app/frontend/lib/execution-path.ts +0 -55
  180. data/app/frontend/lib/explain.ts +0 -50
  181. data/app/frontend/lib/filter.ts +0 -25
  182. data/app/frontend/lib/flamegraph.ts +0 -155
  183. data/app/frontend/lib/format.ts +0 -71
  184. data/app/frontend/lib/keyboard.ts +0 -18
  185. data/app/frontend/lib/mount.ts +0 -23
  186. data/app/frontend/lib/source-link.ts +0 -217
  187. data/app/frontend/lib/utils.ts +0 -6
  188. data/app/frontend/pages/alerts/index.tsx +0 -171
  189. data/app/frontend/pages/broadcasts/index.tsx +0 -171
  190. data/app/frontend/pages/cache_events/index.tsx +0 -127
  191. data/app/frontend/pages/commands/index.tsx +0 -143
  192. data/app/frontend/pages/deploys/index.tsx +0 -94
  193. data/app/frontend/pages/deploys/show.tsx +0 -309
  194. data/app/frontend/pages/deprecations/index.tsx +0 -176
  195. data/app/frontend/pages/exceptions/index.tsx +0 -271
  196. data/app/frontend/pages/executions/show.tsx +0 -821
  197. data/app/frontend/pages/issues/index.tsx +0 -399
  198. data/app/frontend/pages/issues/show.tsx +0 -1367
  199. data/app/frontend/pages/jobs/index.tsx +0 -381
  200. data/app/frontend/pages/jobs/klass.tsx +0 -215
  201. data/app/frontend/pages/llm_calls/index.tsx +0 -664
  202. data/app/frontend/pages/logs/index.tsx +0 -303
  203. data/app/frontend/pages/mails/index.tsx +0 -218
  204. data/app/frontend/pages/notifications/index.tsx +0 -161
  205. data/app/frontend/pages/outgoing_requests/index.tsx +0 -309
  206. data/app/frontend/pages/overview/show.tsx +0 -333
  207. data/app/frontend/pages/people/index.tsx +0 -102
  208. data/app/frontend/pages/people/show.tsx +0 -149
  209. data/app/frontend/pages/processes/index.tsx +0 -335
  210. data/app/frontend/pages/profiles/index.tsx +0 -110
  211. data/app/frontend/pages/profiles/show.tsx +0 -105
  212. data/app/frontend/pages/queries/index.tsx +0 -492
  213. data/app/frontend/pages/queries/show.tsx +0 -276
  214. data/app/frontend/pages/releases/index.tsx +0 -190
  215. data/app/frontend/pages/releases/release-health.tsx +0 -68
  216. data/app/frontend/pages/releases/release-path.ts +0 -25
  217. data/app/frontend/pages/releases/show.tsx +0 -262
  218. data/app/frontend/pages/requests/index.tsx +0 -235
  219. data/app/frontend/pages/requests/route.tsx +0 -159
  220. data/app/frontend/pages/scheduled_tasks/index.tsx +0 -220
  221. data/app/frontend/pages/spans/index.tsx +0 -229
  222. data/app/frontend/pages/spans/show.tsx +0 -220
  223. data/app/frontend/pages/storage_ops/index.tsx +0 -150
  224. data/app/frontend/pages/tenants/index.tsx +0 -236
  225. data/app/frontend/pages/tenants/show.tsx +0 -477
  226. data/app/frontend/pages/tenants/tenant-path.ts +0 -26
  227. data/app/frontend/pages/thresholds/index.tsx +0 -414
  228. data/app/frontend/pages/traces/show.tsx +0 -208
  229. data/app/frontend/pages/transactions/index.tsx +0 -220
  230. data/app/frontend/pages/view_renders/index.tsx +0 -241
  231. data/app/frontend/pages/visits/index.tsx +0 -321
  232. data/app/frontend/public/icon.png +0 -0
  233. data/app/frontend/public/icon.svg +0 -5
  234. data/app/frontend/routes/index.d.ts +0 -2136
  235. data/app/frontend/routes/index.js +0 -2112
  236. data/app/frontend/types/globals.d.ts +0 -9
  237. data/app/frontend/types/index.ts +0 -288
  238. data/app/frontend/types/vite-env.d.ts +0 -9
  239. data/app/helpers/railwatch/assets_helper.rb +0 -52
  240. data/app/jobs/railwatch/anomaly_scan_job.rb +0 -11
  241. data/app/jobs/railwatch/application_job.rb +0 -7
  242. data/app/jobs/railwatch/auto_resolve_issues_job.rb +0 -19
  243. data/app/jobs/railwatch/check_scheduled_tasks_job.rb +0 -113
  244. data/app/jobs/railwatch/detect_anomalies_job.rb +0 -171
  245. data/app/jobs/railwatch/detect_performance_issues_job.rb +0 -95
  246. data/app/jobs/railwatch/group_exceptions_job.rb +0 -91
  247. data/app/jobs/railwatch/optimize_telemetry_job.rb +0 -23
  248. data/app/jobs/railwatch/performance_scan_job.rb +0 -11
  249. data/app/jobs/railwatch/prune_telemetry_job.rb +0 -129
  250. data/app/jobs/railwatch/release_health_rollup_job.rb +0 -64
  251. data/app/jobs/railwatch/rollup_catchup_job.rb +0 -21
  252. data/app/jobs/railwatch/rollup_job.rb +0 -132
  253. data/app/jobs/railwatch/scheduled_task_scan_job.rb +0 -11
  254. data/app/models/concerns/railwatch/detection_snapshotting.rb +0 -20
  255. data/app/models/railwatch/alert.rb +0 -229
  256. data/app/models/railwatch/alert_rule.rb +0 -121
  257. data/app/models/railwatch/anomaly_rule.rb +0 -51
  258. data/app/models/railwatch/application.rb +0 -44
  259. data/app/models/railwatch/application_record.rb +0 -33
  260. data/app/models/railwatch/comment.rb +0 -36
  261. data/app/models/railwatch/deploy.rb +0 -67
  262. data/app/models/railwatch/environment.rb +0 -68
  263. data/app/models/railwatch/execution_presenter.rb +0 -185
  264. data/app/models/railwatch/filter_query.rb +0 -184
  265. data/app/models/railwatch/followup_receipt.rb +0 -27
  266. data/app/models/railwatch/ingest/batch.rb +0 -355
  267. data/app/models/railwatch/ingest/mapper.rb +0 -585
  268. data/app/models/railwatch/ingest/payload.rb +0 -96
  269. data/app/models/railwatch/ingest/rollup_absorber.rb +0 -170
  270. data/app/models/railwatch/ingest/writer.rb +0 -137
  271. data/app/models/railwatch/issue.rb +0 -277
  272. data/app/models/railwatch/issue_activity.rb +0 -23
  273. data/app/models/railwatch/issue_detection_presenter.rb +0 -309
  274. data/app/models/railwatch/issue_detection_snapshot.rb +0 -77
  275. data/app/models/railwatch/maintenance_task.rb +0 -53
  276. data/app/models/railwatch/saved_view.rb +0 -63
  277. data/app/models/railwatch/telemetry/aggregations.rb +0 -251
  278. data/app/models/railwatch/telemetry/attachment.rb +0 -31
  279. data/app/models/railwatch/telemetry/bounded_gzip.rb +0 -101
  280. data/app/models/railwatch/telemetry/broadcast.rb +0 -13
  281. data/app/models/railwatch/telemetry/cache_event.rb +0 -16
  282. data/app/models/railwatch/telemetry/child.rb +0 -53
  283. data/app/models/railwatch/telemetry/cursor_page.rb +0 -99
  284. data/app/models/railwatch/telemetry/deprecation.rb +0 -13
  285. data/app/models/railwatch/telemetry/enqueued_job.rb +0 -13
  286. data/app/models/railwatch/telemetry/exception.rb +0 -28
  287. data/app/models/railwatch/telemetry/execution.rb +0 -152
  288. data/app/models/railwatch/telemetry/export_delivery.rb +0 -32
  289. data/app/models/railwatch/telemetry/export_destination.rb +0 -66
  290. data/app/models/railwatch/telemetry/health_sample.rb +0 -72
  291. data/app/models/railwatch/telemetry/ingest_batch.rb +0 -31
  292. data/app/models/railwatch/telemetry/llm_call.rb +0 -37
  293. data/app/models/railwatch/telemetry/log.rb +0 -91
  294. data/app/models/railwatch/telemetry/mail.rb +0 -13
  295. data/app/models/railwatch/telemetry/n_plus_one.rb +0 -92
  296. data/app/models/railwatch/telemetry/notification.rb +0 -13
  297. data/app/models/railwatch/telemetry/outgoing_request.rb +0 -13
  298. data/app/models/railwatch/telemetry/person.rb +0 -50
  299. data/app/models/railwatch/telemetry/process.rb +0 -10
  300. data/app/models/railwatch/telemetry/profile.rb +0 -37
  301. data/app/models/railwatch/telemetry/query.rb +0 -57
  302. data/app/models/railwatch/telemetry/query_shape.rb +0 -45
  303. data/app/models/railwatch/telemetry/release_health.rb +0 -69
  304. data/app/models/railwatch/telemetry/rollup.rb +0 -157
  305. data/app/models/railwatch/telemetry/session.rb +0 -24
  306. data/app/models/railwatch/telemetry/span.rb +0 -19
  307. data/app/models/railwatch/telemetry/storage_op.rb +0 -13
  308. data/app/models/railwatch/telemetry/tenant.rb +0 -240
  309. data/app/models/railwatch/telemetry/transaction.rb +0 -13
  310. data/app/models/railwatch/telemetry/view_render.rb +0 -13
  311. data/app/models/railwatch/telemetry/visit.rb +0 -24
  312. data/app/models/railwatch/telemetry_record.rb +0 -107
  313. data/app/models/railwatch/threshold.rb +0 -66
  314. data/app/models/railwatch/user.rb +0 -47
  315. data/app/models/railwatch/viewer.rb +0 -13
  316. data/app/models/railwatch/window.rb +0 -66
  317. data/app/views/layouts/railwatch/dashboard.html.erb +0 -25
  318. data/db/railwatch_migrate/20260916000000_create_railwatch_tables.rb +0 -151
  319. data/db/railwatch_migrate/20260917000000_create_railwatch_maintenance_tasks.rb +0 -18
  320. data/db/railwatch_migrate/20260917120000_create_railwatch_followup_receipts.rb +0 -20
  321. data/db/railwatch_migrate/20260918120000_widen_host_user_ids.rb +0 -71
  322. data/db/railwatch_telemetry_migrate/20260903000000_enable_incremental_vacuum.rb +0 -62
  323. data/db/railwatch_telemetry_migrate/20260903000001_create_telemetry.rb +0 -481
  324. data/db/railwatch_telemetry_migrate/20260903000002_rename_tenant_to_app_tenant.rb +0 -14
  325. data/db/railwatch_telemetry_migrate/20260903000003_add_statement_count_to_transactions.rb +0 -9
  326. data/db/railwatch_telemetry_migrate/20260903000004_add_role_and_channel.rb +0 -10
  327. data/db/railwatch_telemetry_migrate/20260903000005_add_locals_to_exceptions.rb +0 -9
  328. data/db/railwatch_telemetry_migrate/20260903000006_add_spans_health_vitals_and_fts.rb +0 -82
  329. data/db/railwatch_telemetry_migrate/20260903000007_rename_span_attributes_to_payload.rb +0 -10
  330. data/db/railwatch_telemetry_migrate/20260903000008_add_profiles_and_attachments.rb +0 -60
  331. data/db/railwatch_telemetry_migrate/20260903000009_add_truncated_to_attachments.rb +0 -9
  332. data/db/railwatch_telemetry_migrate/20260903000010_create_sessions_and_release_health.rb +0 -51
  333. data/db/railwatch_telemetry_migrate/20260903000011_add_fingerprint_to_exceptions.rb +0 -11
  334. data/db/railwatch_telemetry_migrate/20260904000012_add_failed_to_broadcasts.rb +0 -10
  335. data/db/railwatch_telemetry_migrate/20260904010000_add_filter_cursor_indexes.rb +0 -37
  336. data/db/railwatch_telemetry_migrate/20260904020000_add_n_plus_ones_execution_id_index.rb +0 -11
  337. data/db/railwatch_telemetry_migrate/20260904120000_create_query_shapes.rb +0 -15
  338. data/db/railwatch_telemetry_migrate/20260906120000_add_backpressure_factor_to_ingest_batches.rb +0 -9
  339. data/db/railwatch_telemetry_migrate/20260907000000_rename_lantern_version_on_processes.rb +0 -10
  340. data/db/railwatch_telemetry_migrate/20260913000000_rename_nightrail_version_on_processes.rb +0 -9
  341. data/db/railwatch_telemetry_migrate/20260914000000_drop_orphan_durable_ingest_tables.rb +0 -18
  342. data/db/railwatch_telemetry_migrate/20260914010000_drop_orphan_durable_ingest_columns.rb +0 -25
  343. data/db/railwatch_telemetry_migrate/20260915000000_create_llm_calls.rb +0 -55
  344. data/db/railwatch_telemetry_migrate/20260915120000_add_detail_to_llm_calls.rb +0 -21
  345. data/db/railwatch_telemetry_migrate/20260915200000_add_explained_index_to_queries.rb +0 -16
  346. data/db/railwatch_telemetry_migrate/20260915210000_add_slowest_index_to_queries.rb +0 -18
  347. data/db/railwatch_telemetry_migrate/20260917010000_add_batch_ledger_to_ingest_batches.rb +0 -16
  348. data/db/railwatch_telemetry_migrate/20260919000100_create_export_queue.rb +0 -146
  349. data/db/railwatch_telemetry_migrate/20260922000000_add_covering_indexes_for_dashboard_aggregates.rb +0 -34
  350. data/db/railwatch_telemetry_migrate/20260923000000_add_people_index.rb +0 -15
  351. data/db/railwatch_telemetry_migrate/20260925000000_add_tenant_summary_index.rb +0 -17
  352. data/db/railwatch_telemetry_migrate/20261008000000_add_in_transaction_to_outgoing_requests.rb +0 -10
  353. data/docs/embedded.md +0 -503
  354. data/lib/puma/plugin/railwatch.rb +0 -215
  355. data/lib/railwatch/dashboard_assets.rb +0 -45
  356. data/lib/railwatch/embedded.rb +0 -50
  357. data/lib/railwatch/export/client.rb +0 -124
  358. data/lib/railwatch/export/lease.rb +0 -56
  359. data/lib/railwatch/export/outbox.rb +0 -361
  360. data/lib/railwatch/export/policy.rb +0 -79
  361. data/lib/railwatch/export/sender.rb +0 -130
  362. data/lib/railwatch/ingest_request_body_limit.rb +0 -10
  363. data/lib/railwatch/maintenance.rb +0 -194
  364. data/lib/railwatch/patches/migration_busy_timeout.rb +0 -73
  365. data/lib/railwatch/transport/local.rb +0 -78
  366. data/lib/railwatch/transport/socket.rb +0 -183
  367. data/lib/railwatch/writer.rb +0 -370
  368. data/public/railwatch/assets/CommitMono-Bold-D6h61ieg.woff2 +0 -0
  369. data/public/railwatch/assets/CommitMono-Regular-zr8w7Obm.woff2 +0 -0
  370. data/public/railwatch/assets/Roboto-Black-auA4GeOK.woff2 +0 -0
  371. data/public/railwatch/assets/Roboto-Bold-CJLnO8j1.woff2 +0 -0
  372. data/public/railwatch/assets/Roboto-Medium-Cm2bwKpj.woff2 +0 -0
  373. data/public/railwatch/assets/Roboto-Regular-Chaq1-PV.woff2 +0 -0
  374. data/public/railwatch/assets/app-layout-by7G3sa1.js +0 -41
  375. data/public/railwatch/assets/application-Cc5v_Vk9.css +0 -1
  376. data/public/railwatch/assets/arrow-up-DCZ7emux.js +0 -1
  377. data/public/railwatch/assets/braces-CykT5_5u.js +0 -1
  378. data/public/railwatch/assets/card-C-PPSA0g.js +0 -1
  379. data/public/railwatch/assets/chart-Cov79YC5.js +0 -39
  380. data/public/railwatch/assets/chart-hover-DdK4E-2h.js +0 -1
  381. data/public/railwatch/assets/chart-panel-BPaYRXJB.js +0 -1
  382. data/public/railwatch/assets/code-BYjC4YZ_.js +0 -1
  383. data/public/railwatch/assets/copy-id-LPfoj9cC.js +0 -1
  384. data/public/railwatch/assets/cursor-load-more-DSdhgpGl.js +0 -1
  385. data/public/railwatch/assets/data-table-CQ_YRWQs.js +0 -1
  386. data/public/railwatch/assets/env-layout-CdMWbUkm.js +0 -1
  387. data/public/railwatch/assets/execution-path-7MYt-Qbn.js +0 -1
  388. data/public/railwatch/assets/filter-bar-CrzpQ_vD.js +0 -1
  389. data/public/railwatch/assets/flamegraph-BIFEdTAg.js +0 -2
  390. data/public/railwatch/assets/format-B9SDkrWj.js +0 -1
  391. data/public/railwatch/assets/frames-C5t-x4f0.js +0 -1
  392. data/public/railwatch/assets/index--NQ7us-L.js +0 -1
  393. data/public/railwatch/assets/index-2kgYe_99.js +0 -1
  394. data/public/railwatch/assets/index-4YEPHxtO.js +0 -1
  395. data/public/railwatch/assets/index-AOCC1GDJ.js +0 -1
  396. data/public/railwatch/assets/index-BEo-u0eO.js +0 -1
  397. data/public/railwatch/assets/index-BJ1V3w2N.js +0 -1
  398. data/public/railwatch/assets/index-BPoHsBKb.js +0 -1
  399. data/public/railwatch/assets/index-BZzyGUM3.js +0 -1
  400. data/public/railwatch/assets/index-BgVq7yKL.js +0 -1
  401. data/public/railwatch/assets/index-BqFGEZvW.js +0 -1
  402. data/public/railwatch/assets/index-ByuHJ1CH.js +0 -1
  403. data/public/railwatch/assets/index-C2j50AL2.js +0 -1
  404. data/public/railwatch/assets/index-CLEdTkvW.js +0 -1
  405. data/public/railwatch/assets/index-CWgq8qBu.js +0 -1
  406. data/public/railwatch/assets/index-CXQ7_oVj.js +0 -2
  407. data/public/railwatch/assets/index-CmyYrjS2.js +0 -1
  408. data/public/railwatch/assets/index-Cn9_HjDo.js +0 -1
  409. data/public/railwatch/assets/index-CsMAm9UK.js +0 -1
  410. data/public/railwatch/assets/index-D0Kk_oGY.js +0 -1
  411. data/public/railwatch/assets/index-DC9ZptJh.js +0 -1
  412. data/public/railwatch/assets/index-DNzg7jmV.js +0 -1
  413. data/public/railwatch/assets/index-DQ8uJO5f.js +0 -1
  414. data/public/railwatch/assets/index-Deq14BxB.js +0 -1
  415. data/public/railwatch/assets/index-IaV3Blzp.js +0 -1
  416. data/public/railwatch/assets/index-TYNWcJQs.js +0 -1
  417. data/public/railwatch/assets/index-WonH2fcZ.js +0 -1
  418. data/public/railwatch/assets/index-WxWUaH_d.js +0 -1
  419. data/public/railwatch/assets/index-mUNrl4ky.js +0 -1
  420. data/public/railwatch/assets/inertia-DfNRARuA.js +0 -97
  421. data/public/railwatch/assets/json-viewer-DMsF5glp.js +0 -1
  422. data/public/railwatch/assets/klass-CmHYk5rz.js +0 -1
  423. data/public/railwatch/assets/origin-identity-1R3bqa3R.js +0 -1
  424. data/public/railwatch/assets/percentile-picker-73z5PAps.js +0 -1
  425. data/public/railwatch/assets/relative-time-Dsc_cCdX.js +0 -1
  426. data/public/railwatch/assets/release-health-BV5OaOWd.js +0 -1
  427. data/public/railwatch/assets/route-CWh58C7K.js +0 -1
  428. data/public/railwatch/assets/segmented-DB4zh-Am.js +0 -1
  429. data/public/railwatch/assets/select-DBKjFlOX.js +0 -1
  430. data/public/railwatch/assets/series-chart-BaiDG795.js +0 -1
  431. data/public/railwatch/assets/show-B4ICCFGh.js +0 -1
  432. data/public/railwatch/assets/show-B5lOU9Gv.js +0 -1
  433. data/public/railwatch/assets/show-BYPB74t4.js +0 -2
  434. data/public/railwatch/assets/show-C7A0m2M8.js +0 -1
  435. data/public/railwatch/assets/show-DT5X1zqE.js +0 -1
  436. data/public/railwatch/assets/show-D_NBdXsn.js +0 -2
  437. data/public/railwatch/assets/show-DgPCnRg8.js +0 -1
  438. data/public/railwatch/assets/show-Yl69HF0x.js +0 -1
  439. data/public/railwatch/assets/show-_QxuUQCm.js +0 -3
  440. data/public/railwatch/assets/show-g__jnN36.js +0 -1
  441. data/public/railwatch/assets/show-l4ztfjl9.js +0 -1
  442. data/public/railwatch/assets/sort-header-BcG8ulEH.js +0 -1
  443. data/public/railwatch/assets/source-link-B2183i2-.js +0 -1
  444. data/public/railwatch/assets/sparkline-cell-B47ipscB.js +0 -1
  445. data/public/railwatch/assets/stat-DT2hhsqS.js +0 -1
  446. data/public/railwatch/assets/status-badge-CmbRKlY7.js +0 -1
  447. data/public/railwatch/assets/tenant-path-C4rNGauE.js +0 -1
  448. data/public/railwatch/assets/use-clipboard-oTNeP4ax.js +0 -1
  449. data/public/railwatch/assets/use-live-CLZZj245.js +0 -1
  450. data/public/railwatch/icon.png +0 -0
  451. data/public/railwatch/icon.svg +0 -5
  452. data/public/railwatch/manifest.json +0 -1245
  453. data/public/railwatch/rails-vite.json +0 -1
  454. /data/{app/frontend/lib → lib/generators/railwatch/install/templates}/railwatch.ts +0 -0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railwatch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cole Robertson
@@ -43,37 +43,9 @@ dependencies:
43
43
  - - "~>"
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0.2'
46
- - !ruby/object:Gem::Dependency
47
- name: inertia_rails
48
- requirement: !ruby/object:Gem::Requirement
49
- requirements:
50
- - - "~>"
51
- - !ruby/object:Gem::Version
52
- version: '3.21'
53
- type: :runtime
54
- prerelease: false
55
- version_requirements: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '3.21'
60
- - !ruby/object:Gem::Dependency
61
- name: tdigest
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '0.2'
67
- type: :runtime
68
- prerelease: false
69
- version_requirements: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '0.2'
74
46
  description: Railwatch instruments a Rails app end to end (requests, jobs, queries,
75
47
  exceptions, cache, mail, broadcasts, outgoing HTTP, logs) and ships linked events
76
- to Railwatch Cloud.
48
+ to Railwatch Cloud or a self-hosted Railwatch server.
77
49
  email:
78
50
  - cole@rebulk.com
79
51
  executables: []
@@ -84,333 +56,10 @@ files:
84
56
  - CHANGELOG.md
85
57
  - MIT-LICENSE
86
58
  - README.md
87
- - app/channels/railwatch/environment_channel.rb
88
- - app/controllers/concerns/railwatch/telemetry_identity.rb
89
- - app/controllers/railwatch/alerts_controller.rb
90
- - app/controllers/railwatch/anomaly_rules_controller.rb
91
- - app/controllers/railwatch/attachments_controller.rb
92
59
  - app/controllers/railwatch/beacon_controller.rb
93
- - app/controllers/railwatch/broadcasts_controller.rb
94
- - app/controllers/railwatch/cache_events_controller.rb
95
- - app/controllers/railwatch/commands_controller.rb
96
- - app/controllers/railwatch/comments_controller.rb
97
- - app/controllers/railwatch/dashboard_controller.rb
98
- - app/controllers/railwatch/deploys_controller.rb
99
- - app/controllers/railwatch/deprecations_controller.rb
100
- - app/controllers/railwatch/environment_scoped.rb
101
- - app/controllers/railwatch/exceptions_controller.rb
102
- - app/controllers/railwatch/executions_controller.rb
103
- - app/controllers/railwatch/issues_controller.rb
104
- - app/controllers/railwatch/jobs_controller.rb
105
- - app/controllers/railwatch/llm_calls_controller.rb
106
- - app/controllers/railwatch/logs_controller.rb
107
- - app/controllers/railwatch/mails_controller.rb
108
- - app/controllers/railwatch/notifications_controller.rb
109
- - app/controllers/railwatch/outgoing_requests_controller.rb
110
- - app/controllers/railwatch/overview_controller.rb
111
- - app/controllers/railwatch/people_controller.rb
112
- - app/controllers/railwatch/processes_controller.rb
113
- - app/controllers/railwatch/profiles_controller.rb
114
- - app/controllers/railwatch/queries_controller.rb
115
- - app/controllers/railwatch/releases_controller.rb
116
- - app/controllers/railwatch/requests_controller.rb
117
- - app/controllers/railwatch/saved_views_controller.rb
118
- - app/controllers/railwatch/scheduled_tasks_controller.rb
119
- - app/controllers/railwatch/spans_controller.rb
120
- - app/controllers/railwatch/storage_ops_controller.rb
121
- - app/controllers/railwatch/tenants_controller.rb
122
- - app/controllers/railwatch/thresholds_controller.rb
123
- - app/controllers/railwatch/traces_controller.rb
124
- - app/controllers/railwatch/transactions_controller.rb
125
- - app/controllers/railwatch/view_renders_controller.rb
126
- - app/controllers/railwatch/visits_controller.rb
127
- - app/frontend/components/app-content.tsx
128
- - app/frontend/components/app-logo-icon.tsx
129
- - app/frontend/components/app-logo.tsx
130
- - app/frontend/components/app-shell.tsx
131
- - app/frontend/components/app-sidebar-header.tsx
132
- - app/frontend/components/app-sidebar.tsx
133
- - app/frontend/components/app-wordmark.tsx
134
- - app/frontend/components/breadcrumbs.tsx
135
- - app/frontend/components/icon.tsx
136
- - app/frontend/components/input-error.tsx
137
- - app/frontend/components/nav-footer.tsx
138
- - app/frontend/components/nav-main.tsx
139
- - app/frontend/components/nav-user.tsx
140
- - app/frontend/components/railwatch/chart-hover.tsx
141
- - app/frontend/components/railwatch/chart-panel.tsx
142
- - app/frontend/components/railwatch/code.tsx
143
- - app/frontend/components/railwatch/command-palette.tsx
144
- - app/frontend/components/railwatch/copy-block.tsx
145
- - app/frontend/components/railwatch/copy-id.tsx
146
- - app/frontend/components/railwatch/cursor-load-more.tsx
147
- - app/frontend/components/railwatch/data-table.tsx
148
- - app/frontend/components/railwatch/digit-roll.tsx
149
- - app/frontend/components/railwatch/empty-state.tsx
150
- - app/frontend/components/railwatch/env-nav.tsx
151
- - app/frontend/components/railwatch/env-switcher.tsx
152
- - app/frontend/components/railwatch/filter-bar.tsx
153
- - app/frontend/components/railwatch/flamegraph.tsx
154
- - app/frontend/components/railwatch/frames.tsx
155
- - app/frontend/components/railwatch/json-viewer.tsx
156
- - app/frontend/components/railwatch/live-dot.tsx
157
- - app/frontend/components/railwatch/live-toggle.tsx
158
- - app/frontend/components/railwatch/metric-chart.tsx
159
- - app/frontend/components/railwatch/mobile-page-switcher.tsx
160
- - app/frontend/components/railwatch/onboarding.tsx
161
- - app/frontend/components/railwatch/origin-identity.tsx
162
- - app/frontend/components/railwatch/page-header.tsx
163
- - app/frontend/components/railwatch/percentile-picker.tsx
164
- - app/frontend/components/railwatch/relative-time.tsx
165
- - app/frontend/components/railwatch/saved-views.tsx
166
- - app/frontend/components/railwatch/segmented.tsx
167
- - app/frontend/components/railwatch/series-chart.tsx
168
- - app/frontend/components/railwatch/shortcuts-dialog.tsx
169
- - app/frontend/components/railwatch/signal-toast.tsx
170
- - app/frontend/components/railwatch/sort-header.tsx
171
- - app/frontend/components/railwatch/source-link.tsx
172
- - app/frontend/components/railwatch/sparkline-cell.tsx
173
- - app/frontend/components/railwatch/sql-block.tsx
174
- - app/frontend/components/railwatch/stat.tsx
175
- - app/frontend/components/railwatch/status-badge.tsx
176
- - app/frontend/components/railwatch/step-picker.tsx
177
- - app/frontend/components/railwatch/timeline.tsx
178
- - app/frontend/components/railwatch/utilisation-bar.tsx
179
- - app/frontend/components/railwatch/window-picker.tsx
180
- - app/frontend/components/ui/avatar.tsx
181
- - app/frontend/components/ui/badge.tsx
182
- - app/frontend/components/ui/breadcrumb.tsx
183
- - app/frontend/components/ui/button.tsx
184
- - app/frontend/components/ui/card.tsx
185
- - app/frontend/components/ui/chart.tsx
186
- - app/frontend/components/ui/checkbox.tsx
187
- - app/frontend/components/ui/collapsible.tsx
188
- - app/frontend/components/ui/command.tsx
189
- - app/frontend/components/ui/dialog.tsx
190
- - app/frontend/components/ui/dropdown-menu.tsx
191
- - app/frontend/components/ui/hover-card.tsx
192
- - app/frontend/components/ui/input.tsx
193
- - app/frontend/components/ui/label.tsx
194
- - app/frontend/components/ui/popover.tsx
195
- - app/frontend/components/ui/select.tsx
196
- - app/frontend/components/ui/separator.tsx
197
- - app/frontend/components/ui/sheet.tsx
198
- - app/frontend/components/ui/sidebar.tsx
199
- - app/frontend/components/ui/skeleton.tsx
200
- - app/frontend/components/ui/sonner.tsx
201
- - app/frontend/components/ui/table.tsx
202
- - app/frontend/components/ui/tabs.tsx
203
- - app/frontend/components/ui/textarea.tsx
204
- - app/frontend/components/ui/tooltip.tsx
205
- - app/frontend/components/user-info.tsx
206
- - app/frontend/components/user-menu-content.tsx
207
- - app/frontend/entrypoints/application.css
208
- - app/frontend/entrypoints/inertia.tsx
209
- - app/frontend/fonts/CommitMono-Bold.woff2
210
- - app/frontend/fonts/CommitMono-Regular.woff2
211
- - app/frontend/fonts/Roboto-Black.woff2
212
- - app/frontend/fonts/Roboto-Bold.woff2
213
- - app/frontend/fonts/Roboto-Medium.woff2
214
- - app/frontend/fonts/Roboto-Regular.woff2
215
- - app/frontend/hooks/use-appearance.tsx
216
- - app/frontend/hooks/use-clipboard.ts
217
- - app/frontend/hooks/use-flash.tsx
218
- - app/frontend/hooks/use-hotkeys.ts
219
- - app/frontend/hooks/use-initials.tsx
220
- - app/frontend/hooks/use-live.ts
221
- - app/frontend/hooks/use-mobile-navigation.ts
222
- - app/frontend/hooks/use-mobile.ts
223
- - app/frontend/hooks/use-percentile.ts
224
- - app/frontend/hooks/use-reduced-motion.ts
225
- - app/frontend/hooks/use-row-nav.ts
226
- - app/frontend/hooks/use-step.ts
227
- - app/frontend/hooks/use-ticker.ts
228
- - app/frontend/hooks/use-window.ts
229
- - app/frontend/layouts/app-layout.tsx
230
- - app/frontend/layouts/app/app-sidebar-layout.tsx
231
- - app/frontend/layouts/env-layout.tsx
232
- - app/frontend/layouts/persistent-layout.tsx
233
- - app/frontend/lib/cable.ts
234
- - app/frontend/lib/env-pages.ts
235
- - app/frontend/lib/execution-path.ts
236
- - app/frontend/lib/explain.ts
237
- - app/frontend/lib/filter.ts
238
- - app/frontend/lib/flamegraph.ts
239
- - app/frontend/lib/format.ts
240
- - app/frontend/lib/keyboard.ts
241
- - app/frontend/lib/mount.ts
242
- - app/frontend/lib/railwatch.ts
243
- - app/frontend/lib/source-link.ts
244
- - app/frontend/lib/utils.ts
245
- - app/frontend/pages/alerts/index.tsx
246
- - app/frontend/pages/broadcasts/index.tsx
247
- - app/frontend/pages/cache_events/index.tsx
248
- - app/frontend/pages/commands/index.tsx
249
- - app/frontend/pages/deploys/index.tsx
250
- - app/frontend/pages/deploys/show.tsx
251
- - app/frontend/pages/deprecations/index.tsx
252
- - app/frontend/pages/exceptions/index.tsx
253
- - app/frontend/pages/executions/show.tsx
254
- - app/frontend/pages/issues/index.tsx
255
- - app/frontend/pages/issues/show.tsx
256
- - app/frontend/pages/jobs/index.tsx
257
- - app/frontend/pages/jobs/klass.tsx
258
- - app/frontend/pages/llm_calls/index.tsx
259
- - app/frontend/pages/logs/index.tsx
260
- - app/frontend/pages/mails/index.tsx
261
- - app/frontend/pages/notifications/index.tsx
262
- - app/frontend/pages/outgoing_requests/index.tsx
263
- - app/frontend/pages/overview/show.tsx
264
- - app/frontend/pages/people/index.tsx
265
- - app/frontend/pages/people/show.tsx
266
- - app/frontend/pages/processes/index.tsx
267
- - app/frontend/pages/profiles/index.tsx
268
- - app/frontend/pages/profiles/show.tsx
269
- - app/frontend/pages/queries/index.tsx
270
- - app/frontend/pages/queries/show.tsx
271
- - app/frontend/pages/releases/index.tsx
272
- - app/frontend/pages/releases/release-health.tsx
273
- - app/frontend/pages/releases/release-path.ts
274
- - app/frontend/pages/releases/show.tsx
275
- - app/frontend/pages/requests/index.tsx
276
- - app/frontend/pages/requests/route.tsx
277
- - app/frontend/pages/scheduled_tasks/index.tsx
278
- - app/frontend/pages/spans/index.tsx
279
- - app/frontend/pages/spans/show.tsx
280
- - app/frontend/pages/storage_ops/index.tsx
281
- - app/frontend/pages/tenants/index.tsx
282
- - app/frontend/pages/tenants/show.tsx
283
- - app/frontend/pages/tenants/tenant-path.ts
284
- - app/frontend/pages/thresholds/index.tsx
285
- - app/frontend/pages/traces/show.tsx
286
- - app/frontend/pages/transactions/index.tsx
287
- - app/frontend/pages/view_renders/index.tsx
288
- - app/frontend/pages/visits/index.tsx
289
- - app/frontend/public/icon.png
290
- - app/frontend/public/icon.svg
291
- - app/frontend/routes/index.d.ts
292
- - app/frontend/routes/index.js
293
- - app/frontend/types/globals.d.ts
294
- - app/frontend/types/index.ts
295
- - app/frontend/types/vite-env.d.ts
296
- - app/helpers/railwatch/assets_helper.rb
297
- - app/jobs/railwatch/anomaly_scan_job.rb
298
- - app/jobs/railwatch/application_job.rb
299
- - app/jobs/railwatch/auto_resolve_issues_job.rb
300
- - app/jobs/railwatch/check_scheduled_tasks_job.rb
301
- - app/jobs/railwatch/detect_anomalies_job.rb
302
- - app/jobs/railwatch/detect_performance_issues_job.rb
303
- - app/jobs/railwatch/group_exceptions_job.rb
304
- - app/jobs/railwatch/optimize_telemetry_job.rb
305
- - app/jobs/railwatch/performance_scan_job.rb
306
- - app/jobs/railwatch/prune_telemetry_job.rb
307
- - app/jobs/railwatch/release_health_rollup_job.rb
308
- - app/jobs/railwatch/rollup_catchup_job.rb
309
- - app/jobs/railwatch/rollup_job.rb
310
- - app/jobs/railwatch/scheduled_task_scan_job.rb
311
- - app/models/concerns/railwatch/detection_snapshotting.rb
312
- - app/models/railwatch/alert.rb
313
- - app/models/railwatch/alert_rule.rb
314
- - app/models/railwatch/anomaly_rule.rb
315
- - app/models/railwatch/application.rb
316
- - app/models/railwatch/application_record.rb
317
- - app/models/railwatch/comment.rb
318
- - app/models/railwatch/deploy.rb
319
- - app/models/railwatch/environment.rb
320
- - app/models/railwatch/execution_presenter.rb
321
- - app/models/railwatch/filter_query.rb
322
- - app/models/railwatch/followup_receipt.rb
323
- - app/models/railwatch/ingest/batch.rb
324
- - app/models/railwatch/ingest/mapper.rb
325
- - app/models/railwatch/ingest/payload.rb
326
- - app/models/railwatch/ingest/rollup_absorber.rb
327
- - app/models/railwatch/ingest/writer.rb
328
- - app/models/railwatch/issue.rb
329
- - app/models/railwatch/issue_activity.rb
330
- - app/models/railwatch/issue_detection_presenter.rb
331
- - app/models/railwatch/issue_detection_snapshot.rb
332
- - app/models/railwatch/maintenance_task.rb
333
- - app/models/railwatch/saved_view.rb
334
- - app/models/railwatch/telemetry/aggregations.rb
335
- - app/models/railwatch/telemetry/attachment.rb
336
- - app/models/railwatch/telemetry/bounded_gzip.rb
337
- - app/models/railwatch/telemetry/broadcast.rb
338
- - app/models/railwatch/telemetry/cache_event.rb
339
- - app/models/railwatch/telemetry/child.rb
340
- - app/models/railwatch/telemetry/cursor_page.rb
341
- - app/models/railwatch/telemetry/deprecation.rb
342
- - app/models/railwatch/telemetry/enqueued_job.rb
343
- - app/models/railwatch/telemetry/exception.rb
344
- - app/models/railwatch/telemetry/execution.rb
345
- - app/models/railwatch/telemetry/export_delivery.rb
346
- - app/models/railwatch/telemetry/export_destination.rb
347
- - app/models/railwatch/telemetry/health_sample.rb
348
- - app/models/railwatch/telemetry/ingest_batch.rb
349
- - app/models/railwatch/telemetry/llm_call.rb
350
- - app/models/railwatch/telemetry/log.rb
351
- - app/models/railwatch/telemetry/mail.rb
352
- - app/models/railwatch/telemetry/n_plus_one.rb
353
- - app/models/railwatch/telemetry/notification.rb
354
- - app/models/railwatch/telemetry/outgoing_request.rb
355
- - app/models/railwatch/telemetry/person.rb
356
- - app/models/railwatch/telemetry/process.rb
357
- - app/models/railwatch/telemetry/profile.rb
358
- - app/models/railwatch/telemetry/query.rb
359
- - app/models/railwatch/telemetry/query_shape.rb
360
- - app/models/railwatch/telemetry/release_health.rb
361
- - app/models/railwatch/telemetry/rollup.rb
362
- - app/models/railwatch/telemetry/session.rb
363
- - app/models/railwatch/telemetry/span.rb
364
- - app/models/railwatch/telemetry/storage_op.rb
365
- - app/models/railwatch/telemetry/tenant.rb
366
- - app/models/railwatch/telemetry/transaction.rb
367
- - app/models/railwatch/telemetry/view_render.rb
368
- - app/models/railwatch/telemetry/visit.rb
369
- - app/models/railwatch/telemetry_record.rb
370
- - app/models/railwatch/threshold.rb
371
- - app/models/railwatch/user.rb
372
- - app/models/railwatch/viewer.rb
373
- - app/models/railwatch/window.rb
374
- - app/views/layouts/railwatch/dashboard.html.erb
375
60
  - config/routes.rb
376
- - db/railwatch_migrate/20260916000000_create_railwatch_tables.rb
377
- - db/railwatch_migrate/20260917000000_create_railwatch_maintenance_tasks.rb
378
- - db/railwatch_migrate/20260917120000_create_railwatch_followup_receipts.rb
379
- - db/railwatch_migrate/20260918120000_widen_host_user_ids.rb
380
- - db/railwatch_telemetry_migrate/20260903000000_enable_incremental_vacuum.rb
381
- - db/railwatch_telemetry_migrate/20260903000001_create_telemetry.rb
382
- - db/railwatch_telemetry_migrate/20260903000002_rename_tenant_to_app_tenant.rb
383
- - db/railwatch_telemetry_migrate/20260903000003_add_statement_count_to_transactions.rb
384
- - db/railwatch_telemetry_migrate/20260903000004_add_role_and_channel.rb
385
- - db/railwatch_telemetry_migrate/20260903000005_add_locals_to_exceptions.rb
386
- - db/railwatch_telemetry_migrate/20260903000006_add_spans_health_vitals_and_fts.rb
387
- - db/railwatch_telemetry_migrate/20260903000007_rename_span_attributes_to_payload.rb
388
- - db/railwatch_telemetry_migrate/20260903000008_add_profiles_and_attachments.rb
389
- - db/railwatch_telemetry_migrate/20260903000009_add_truncated_to_attachments.rb
390
- - db/railwatch_telemetry_migrate/20260903000010_create_sessions_and_release_health.rb
391
- - db/railwatch_telemetry_migrate/20260903000011_add_fingerprint_to_exceptions.rb
392
- - db/railwatch_telemetry_migrate/20260904000012_add_failed_to_broadcasts.rb
393
- - db/railwatch_telemetry_migrate/20260904010000_add_filter_cursor_indexes.rb
394
- - db/railwatch_telemetry_migrate/20260904020000_add_n_plus_ones_execution_id_index.rb
395
- - db/railwatch_telemetry_migrate/20260904120000_create_query_shapes.rb
396
- - db/railwatch_telemetry_migrate/20260906120000_add_backpressure_factor_to_ingest_batches.rb
397
- - db/railwatch_telemetry_migrate/20260907000000_rename_lantern_version_on_processes.rb
398
- - db/railwatch_telemetry_migrate/20260913000000_rename_nightrail_version_on_processes.rb
399
- - db/railwatch_telemetry_migrate/20260914000000_drop_orphan_durable_ingest_tables.rb
400
- - db/railwatch_telemetry_migrate/20260914010000_drop_orphan_durable_ingest_columns.rb
401
- - db/railwatch_telemetry_migrate/20260915000000_create_llm_calls.rb
402
- - db/railwatch_telemetry_migrate/20260915120000_add_detail_to_llm_calls.rb
403
- - db/railwatch_telemetry_migrate/20260915200000_add_explained_index_to_queries.rb
404
- - db/railwatch_telemetry_migrate/20260915210000_add_slowest_index_to_queries.rb
405
- - db/railwatch_telemetry_migrate/20260917010000_add_batch_ledger_to_ingest_batches.rb
406
- - db/railwatch_telemetry_migrate/20260919000100_create_export_queue.rb
407
- - db/railwatch_telemetry_migrate/20260922000000_add_covering_indexes_for_dashboard_aggregates.rb
408
- - db/railwatch_telemetry_migrate/20260923000000_add_people_index.rb
409
- - db/railwatch_telemetry_migrate/20260925000000_add_tenant_summary_index.rb
410
- - db/railwatch_telemetry_migrate/20261008000000_add_in_transaction_to_outgoing_requests.rb
411
61
  - docs/ai-and-mcp.md
412
62
  - docs/configuration.md
413
- - docs/embedded.md
414
63
  - docs/faq.md
415
64
  - docs/getting-started.md
416
65
  - docs/records.md
@@ -424,7 +73,7 @@ files:
424
73
  - lib/generators/railwatch/install/install_generator.rb
425
74
  - lib/generators/railwatch/install/templates/initializer.rb.tt
426
75
  - lib/generators/railwatch/install/templates/post-deploy
427
- - lib/puma/plugin/railwatch.rb
76
+ - lib/generators/railwatch/install/templates/railwatch.ts
428
77
  - lib/railwatch.rb
429
78
  - lib/railwatch/attachments.rb
430
79
  - lib/railwatch/authentication.rb
@@ -436,26 +85,16 @@ files:
436
85
  - lib/railwatch/context.rb
437
86
  - lib/railwatch/controller_helpers.rb
438
87
  - lib/railwatch/current.rb
439
- - lib/railwatch/dashboard_assets.rb
440
- - lib/railwatch/embedded.rb
441
88
  - lib/railwatch/engine.rb
442
89
  - lib/railwatch/execution.rb
443
- - lib/railwatch/export/client.rb
444
- - lib/railwatch/export/lease.rb
445
- - lib/railwatch/export/outbox.rb
446
- - lib/railwatch/export/policy.rb
447
- - lib/railwatch/export/sender.rb
448
90
  - lib/railwatch/faraday.rb
449
91
  - lib/railwatch/health.rb
450
- - lib/railwatch/ingest_request_body_limit.rb
451
92
  - lib/railwatch/job_tracing.rb
452
93
  - lib/railwatch/json_compat.rb
453
- - lib/railwatch/maintenance.rb
454
94
  - lib/railwatch/middleware/request.rb
455
95
  - lib/railwatch/minitest.rb
456
96
  - lib/railwatch/patches.rb
457
97
  - lib/railwatch/patches/inertia.rb
458
- - lib/railwatch/patches/migration_busy_timeout.rb
459
98
  - lib/railwatch/patches/net_http.rb
460
99
  - lib/railwatch/patches/rake_task.rb
461
100
  - lib/railwatch/patches/runner_command.rb
@@ -489,100 +128,11 @@ files:
489
128
  - lib/railwatch/subscribers/users.rb
490
129
  - lib/railwatch/subscribers/views.rb
491
130
  - lib/railwatch/transport/http.rb
492
- - lib/railwatch/transport/local.rb
493
- - lib/railwatch/transport/socket.rb
494
131
  - lib/railwatch/transport/wire_encoder.rb
495
132
  - lib/railwatch/version.rb
496
133
  - lib/railwatch/wire_fixtures.json
497
- - lib/railwatch/writer.rb
498
134
  - lib/tasks/railwatch_tasks.rake
499
135
  - llms.txt
500
- - public/railwatch/assets/CommitMono-Bold-D6h61ieg.woff2
501
- - public/railwatch/assets/CommitMono-Regular-zr8w7Obm.woff2
502
- - public/railwatch/assets/Roboto-Black-auA4GeOK.woff2
503
- - public/railwatch/assets/Roboto-Bold-CJLnO8j1.woff2
504
- - public/railwatch/assets/Roboto-Medium-Cm2bwKpj.woff2
505
- - public/railwatch/assets/Roboto-Regular-Chaq1-PV.woff2
506
- - public/railwatch/assets/app-layout-by7G3sa1.js
507
- - public/railwatch/assets/application-Cc5v_Vk9.css
508
- - public/railwatch/assets/arrow-up-DCZ7emux.js
509
- - public/railwatch/assets/braces-CykT5_5u.js
510
- - public/railwatch/assets/card-C-PPSA0g.js
511
- - public/railwatch/assets/chart-Cov79YC5.js
512
- - public/railwatch/assets/chart-hover-DdK4E-2h.js
513
- - public/railwatch/assets/chart-panel-BPaYRXJB.js
514
- - public/railwatch/assets/code-BYjC4YZ_.js
515
- - public/railwatch/assets/copy-id-LPfoj9cC.js
516
- - public/railwatch/assets/cursor-load-more-DSdhgpGl.js
517
- - public/railwatch/assets/data-table-CQ_YRWQs.js
518
- - public/railwatch/assets/env-layout-CdMWbUkm.js
519
- - public/railwatch/assets/execution-path-7MYt-Qbn.js
520
- - public/railwatch/assets/filter-bar-CrzpQ_vD.js
521
- - public/railwatch/assets/flamegraph-BIFEdTAg.js
522
- - public/railwatch/assets/format-B9SDkrWj.js
523
- - public/railwatch/assets/frames-C5t-x4f0.js
524
- - public/railwatch/assets/index--NQ7us-L.js
525
- - public/railwatch/assets/index-2kgYe_99.js
526
- - public/railwatch/assets/index-4YEPHxtO.js
527
- - public/railwatch/assets/index-AOCC1GDJ.js
528
- - public/railwatch/assets/index-BEo-u0eO.js
529
- - public/railwatch/assets/index-BJ1V3w2N.js
530
- - public/railwatch/assets/index-BPoHsBKb.js
531
- - public/railwatch/assets/index-BZzyGUM3.js
532
- - public/railwatch/assets/index-BgVq7yKL.js
533
- - public/railwatch/assets/index-BqFGEZvW.js
534
- - public/railwatch/assets/index-ByuHJ1CH.js
535
- - public/railwatch/assets/index-C2j50AL2.js
536
- - public/railwatch/assets/index-CLEdTkvW.js
537
- - public/railwatch/assets/index-CWgq8qBu.js
538
- - public/railwatch/assets/index-CXQ7_oVj.js
539
- - public/railwatch/assets/index-CmyYrjS2.js
540
- - public/railwatch/assets/index-Cn9_HjDo.js
541
- - public/railwatch/assets/index-CsMAm9UK.js
542
- - public/railwatch/assets/index-D0Kk_oGY.js
543
- - public/railwatch/assets/index-DC9ZptJh.js
544
- - public/railwatch/assets/index-DNzg7jmV.js
545
- - public/railwatch/assets/index-DQ8uJO5f.js
546
- - public/railwatch/assets/index-Deq14BxB.js
547
- - public/railwatch/assets/index-IaV3Blzp.js
548
- - public/railwatch/assets/index-TYNWcJQs.js
549
- - public/railwatch/assets/index-WonH2fcZ.js
550
- - public/railwatch/assets/index-WxWUaH_d.js
551
- - public/railwatch/assets/index-mUNrl4ky.js
552
- - public/railwatch/assets/inertia-DfNRARuA.js
553
- - public/railwatch/assets/json-viewer-DMsF5glp.js
554
- - public/railwatch/assets/klass-CmHYk5rz.js
555
- - public/railwatch/assets/origin-identity-1R3bqa3R.js
556
- - public/railwatch/assets/percentile-picker-73z5PAps.js
557
- - public/railwatch/assets/relative-time-Dsc_cCdX.js
558
- - public/railwatch/assets/release-health-BV5OaOWd.js
559
- - public/railwatch/assets/route-CWh58C7K.js
560
- - public/railwatch/assets/segmented-DB4zh-Am.js
561
- - public/railwatch/assets/select-DBKjFlOX.js
562
- - public/railwatch/assets/series-chart-BaiDG795.js
563
- - public/railwatch/assets/show-B4ICCFGh.js
564
- - public/railwatch/assets/show-B5lOU9Gv.js
565
- - public/railwatch/assets/show-BYPB74t4.js
566
- - public/railwatch/assets/show-C7A0m2M8.js
567
- - public/railwatch/assets/show-DT5X1zqE.js
568
- - public/railwatch/assets/show-D_NBdXsn.js
569
- - public/railwatch/assets/show-DgPCnRg8.js
570
- - public/railwatch/assets/show-Yl69HF0x.js
571
- - public/railwatch/assets/show-_QxuUQCm.js
572
- - public/railwatch/assets/show-g__jnN36.js
573
- - public/railwatch/assets/show-l4ztfjl9.js
574
- - public/railwatch/assets/sort-header-BcG8ulEH.js
575
- - public/railwatch/assets/source-link-B2183i2-.js
576
- - public/railwatch/assets/sparkline-cell-B47ipscB.js
577
- - public/railwatch/assets/stat-DT2hhsqS.js
578
- - public/railwatch/assets/status-badge-CmbRKlY7.js
579
- - public/railwatch/assets/tenant-path-C4rNGauE.js
580
- - public/railwatch/assets/use-clipboard-oTNeP4ax.js
581
- - public/railwatch/assets/use-live-CLZZj245.js
582
- - public/railwatch/icon.png
583
- - public/railwatch/icon.svg
584
- - public/railwatch/manifest.json
585
- - public/railwatch/rails-vite.json
586
136
  homepage: https://railwatch.rebulk.com
587
137
  licenses:
588
138
  - MIT
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Railwatch
4
- # Live dashboard updates: Ingest::Batch broadcasts "ingested" on
5
- # railwatch:environment:<id> after each write (throttled to one per 2 s), and the
6
- # page reloads its props. Under HTTP Basic the browser sends the same
7
- # Authorization header on the WebSocket handshake, so the channel checks
8
- # the same credentials as the pages.
9
- #
10
- # With Basic off, Configuration#dashboard_channel_allowed? asks whichever
11
- # gate the host declared: a dashboard_user resolver can refuse this
12
- # request, or dashboard_open explicitly allows public live updates.
13
- # A named base controller alone cannot authorize a channel. That last case matters
14
- # because Action Cable runs on the host's own /cable endpoint: a routes
15
- # constraint around the engine's mount does not cover it and a base
16
- # controller cannot reach it, so "something in front of /railwatch" is not
17
- # evidence about this. What a subscriber would see is the ingest ping (a
18
- # timestamp and per-type counts), never telemetry records.
19
- class EnvironmentChannel < ActionCable::Channel::Base
20
- def subscribed
21
- if params[:id].to_i == Environment::ID && Railwatch.config.dashboard_channel_allowed?(connection_request)
22
- stream_from "railwatch:environment:#{Environment::ID}", coder: ActiveSupport::JSON do |message|
23
- transmit_authorized(message)
24
- end
25
- else
26
- reject
27
- end
28
- end
29
-
30
- private
31
-
32
- # A host's resolver can revoke an operator while their socket is open.
33
- def transmit_authorized(message)
34
- if Railwatch.config.dashboard_channel_allowed?(connection_request)
35
- transmit message
36
- else
37
- stop_all_streams
38
- reject
39
- reject_subscription
40
- end
41
- end
42
-
43
- # Built from the connection's env rather than asking it for its request:
44
- # ActionCable::Connection::Base#request is private (Rails documents it for
45
- # use inside a Connection subclass, not from a channel), so the obvious
46
- # call raises NoMethodError, every subscribe fails, and the dashboard sits
47
- # on "Disconnected" retrying forever. `env` is public and carries
48
- # everything a gate reads -- the Authorization header for HTTP Basic, the
49
- # cookies a dashboard_user resolver looks at.
50
- #
51
- # Merging env_config first is what makes those cookies readable: it is
52
- # where the key generator, the secret and the cookie serializer live, so
53
- # without it `cookie_jar.signed` finds nothing and a resolver that
54
- # authenticates by signed cookie refuses a subscriber it should admit.
55
- # Same construction Connection#request itself uses.
56
- def connection_request
57
- env = connection.env
58
- env = Rails.application.env_config.merge(env) if defined?(Rails.application) && Rails.application
59
- ActionDispatch::Request.new(env)
60
- end
61
- end
62
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Builds identity props from the current environment's telemetry database.
4
- # Callers must already be inside `telemetry { }`; this keeps Person lookups
5
- # batched and prevents a reference from ever being resolved in another
6
- # environment's tenant database.
7
- module Railwatch
8
- module TelemetryIdentity
9
- private
10
-
11
- def origin_people(rows)
12
- refs = rows.filter_map(&:user_ref).uniq
13
- refs.empty? ? {} : Telemetry::Person.where(ref: refs).index_by(&:ref)
14
- end
15
-
16
- def origin_identity(record, people)
17
- person = people[record.user_ref]
18
- {
19
- user_ref: record.user_ref,
20
- tenant: record.app_tenant,
21
- person: person && { ref: person.ref, name: person.display_name }
22
- }
23
- end
24
- end
25
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Fired-alert history. Reachable two ways: account-wide at /alerts (every
4
- # environment) and, nested under an environment, scoped to that
5
- # environment's issues. AlertRule (and so Alert) belongs to an application
6
- # rather than an environment, so the env-scoped view filters through the
7
- # alert's issue instead -- app-level alerts with no issue (e.g. quota) only
8
- # show up in the account-wide view.
9
- module Railwatch
10
- class AlertsController < DashboardController
11
- # One environment in an embedded install, so the account-wide and the
12
- # environment-scoped listing are the same page; the base class already
13
- # set the environment and shares its props.
14
-
15
- def index
16
- scope = account_alerts
17
- scope = scope.joins(:issue).where(railwatch_issues: { environment_id: environment.id }) if params[:environment_id]
18
- fields = FilterQuery.parse(params[:q]).fetch(:fields)
19
- scope = scope.where(event: fields["event"]) if AlertRule::EVENTS.include?(fields["event"].to_s)
20
- scope = scope.where(status: fields["status"]) if Alert::STATUSES.include?(fields["status"].to_s)
21
- alerts = scope.order(created_at: :desc).limit(200)
22
- render inertia: { alerts: alerts.map { |a| row(a) }, q: params[:q].to_s, statuses: Alert::STATUSES }
23
- end
24
-
25
- def retry
26
- alert = account_alerts.find(params[:id])
27
- if alert.retry_delivery!
28
- redirect_back fallback_location: alerts_path, notice: "Retrying alert"
29
- else
30
- redirect_back fallback_location: alerts_path, alert: "Only failed alerts can be retried"
31
- end
32
- end
33
-
34
- private
35
-
36
- # Scoped through the integration rather than the rule's application: a
37
- # "Send test" alert has no rule, and its destination is what owns it.
38
- def account_alerts
39
- Alert.all
40
- end
41
-
42
- def row(a)
43
- { id: a.id, event: a.event, status: a.status, sent_at: a.sent_at, error: a.error, payload: a.payload, created_at: a.created_at,
44
- integration: { kind: a.integration.kind, name: a.integration.name },
45
- issue: a.issue && { id: a.issue.id, key: a.issue.key, title: a.issue.title } }
46
- end
47
- end
48
- end