railwatch 0.9.4 → 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 (452) hide show
  1. checksums.yaml +4 -4
  2. data/AGENTS.md +37 -33
  3. data/CHANGELOG.md +50 -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 +35 -66
  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/configuration.rb +21 -151
  21. data/lib/railwatch/engine.rb +9 -118
  22. data/lib/railwatch/patches.rb +0 -11
  23. data/lib/railwatch/reporter.rb +3 -19
  24. data/lib/railwatch/subscribers/process_info.rb +1 -2
  25. data/lib/railwatch/version.rb +1 -1
  26. data/lib/railwatch.rb +4 -62
  27. data/lib/tasks/railwatch_tasks.rake +3 -325
  28. data/llms.txt +23 -25
  29. metadata +3 -453
  30. data/app/channels/railwatch/environment_channel.rb +0 -62
  31. data/app/controllers/concerns/railwatch/telemetry_identity.rb +0 -25
  32. data/app/controllers/railwatch/alerts_controller.rb +0 -48
  33. data/app/controllers/railwatch/anomaly_rules_controller.rb +0 -31
  34. data/app/controllers/railwatch/attachments_controller.rb +0 -22
  35. data/app/controllers/railwatch/broadcasts_controller.rb +0 -15
  36. data/app/controllers/railwatch/cache_events_controller.rb +0 -30
  37. data/app/controllers/railwatch/commands_controller.rb +0 -16
  38. data/app/controllers/railwatch/comments_controller.rb +0 -11
  39. data/app/controllers/railwatch/dashboard_controller.rb +0 -70
  40. data/app/controllers/railwatch/deploys_controller.rb +0 -34
  41. data/app/controllers/railwatch/deprecations_controller.rb +0 -54
  42. data/app/controllers/railwatch/environment_scoped.rb +0 -81
  43. data/app/controllers/railwatch/exceptions_controller.rb +0 -52
  44. data/app/controllers/railwatch/executions_controller.rb +0 -13
  45. data/app/controllers/railwatch/issues_controller.rb +0 -258
  46. data/app/controllers/railwatch/jobs_controller.rb +0 -63
  47. data/app/controllers/railwatch/llm_calls_controller.rb +0 -124
  48. data/app/controllers/railwatch/logs_controller.rb +0 -40
  49. data/app/controllers/railwatch/mails_controller.rb +0 -19
  50. data/app/controllers/railwatch/notifications_controller.rb +0 -11
  51. data/app/controllers/railwatch/outgoing_requests_controller.rb +0 -19
  52. data/app/controllers/railwatch/overview_controller.rb +0 -38
  53. data/app/controllers/railwatch/people_controller.rb +0 -25
  54. data/app/controllers/railwatch/processes_controller.rb +0 -33
  55. data/app/controllers/railwatch/profiles_controller.rb +0 -65
  56. data/app/controllers/railwatch/queries_controller.rb +0 -59
  57. data/app/controllers/railwatch/releases_controller.rb +0 -75
  58. data/app/controllers/railwatch/requests_controller.rb +0 -37
  59. data/app/controllers/railwatch/saved_views_controller.rb +0 -53
  60. data/app/controllers/railwatch/scheduled_tasks_controller.rb +0 -45
  61. data/app/controllers/railwatch/spans_controller.rb +0 -47
  62. data/app/controllers/railwatch/storage_ops_controller.rb +0 -15
  63. data/app/controllers/railwatch/tenants_controller.rb +0 -44
  64. data/app/controllers/railwatch/thresholds_controller.rb +0 -47
  65. data/app/controllers/railwatch/traces_controller.rb +0 -72
  66. data/app/controllers/railwatch/transactions_controller.rb +0 -21
  67. data/app/controllers/railwatch/view_renders_controller.rb +0 -28
  68. data/app/controllers/railwatch/visits_controller.rb +0 -53
  69. data/app/frontend/components/app-content.tsx +0 -26
  70. data/app/frontend/components/app-logo-icon.tsx +0 -23
  71. data/app/frontend/components/app-logo.tsx +0 -14
  72. data/app/frontend/components/app-shell.tsx +0 -38
  73. data/app/frontend/components/app-sidebar-header.tsx +0 -54
  74. data/app/frontend/components/app-sidebar.tsx +0 -94
  75. data/app/frontend/components/app-wordmark.tsx +0 -29
  76. data/app/frontend/components/breadcrumbs.tsx +0 -46
  77. data/app/frontend/components/icon.tsx +0 -16
  78. data/app/frontend/components/input-error.tsx +0 -18
  79. data/app/frontend/components/nav-footer.tsx +0 -46
  80. data/app/frontend/components/nav-main.tsx +0 -41
  81. data/app/frontend/components/nav-user.tsx +0 -50
  82. data/app/frontend/components/railwatch/chart-hover.tsx +0 -34
  83. data/app/frontend/components/railwatch/chart-panel.tsx +0 -170
  84. data/app/frontend/components/railwatch/code.tsx +0 -28
  85. data/app/frontend/components/railwatch/command-palette.tsx +0 -132
  86. data/app/frontend/components/railwatch/copy-block.tsx +0 -52
  87. data/app/frontend/components/railwatch/copy-id.tsx +0 -49
  88. data/app/frontend/components/railwatch/cursor-load-more.tsx +0 -39
  89. data/app/frontend/components/railwatch/data-table.tsx +0 -195
  90. data/app/frontend/components/railwatch/digit-roll.tsx +0 -312
  91. data/app/frontend/components/railwatch/empty-state.tsx +0 -159
  92. data/app/frontend/components/railwatch/env-nav.tsx +0 -130
  93. data/app/frontend/components/railwatch/env-switcher.tsx +0 -145
  94. data/app/frontend/components/railwatch/filter-bar.tsx +0 -153
  95. data/app/frontend/components/railwatch/flamegraph.tsx +0 -324
  96. data/app/frontend/components/railwatch/frames.tsx +0 -295
  97. data/app/frontend/components/railwatch/json-viewer.tsx +0 -159
  98. data/app/frontend/components/railwatch/live-dot.tsx +0 -78
  99. data/app/frontend/components/railwatch/live-toggle.tsx +0 -76
  100. data/app/frontend/components/railwatch/metric-chart.tsx +0 -112
  101. data/app/frontend/components/railwatch/mobile-page-switcher.tsx +0 -89
  102. data/app/frontend/components/railwatch/onboarding.tsx +0 -91
  103. data/app/frontend/components/railwatch/origin-identity.tsx +0 -84
  104. data/app/frontend/components/railwatch/page-header.tsx +0 -42
  105. data/app/frontend/components/railwatch/percentile-picker.tsx +0 -18
  106. data/app/frontend/components/railwatch/relative-time.tsx +0 -18
  107. data/app/frontend/components/railwatch/saved-views.tsx +0 -232
  108. data/app/frontend/components/railwatch/segmented.tsx +0 -64
  109. data/app/frontend/components/railwatch/series-chart.tsx +0 -400
  110. data/app/frontend/components/railwatch/shortcuts-dialog.tsx +0 -89
  111. data/app/frontend/components/railwatch/signal-toast.tsx +0 -121
  112. data/app/frontend/components/railwatch/sort-header.tsx +0 -37
  113. data/app/frontend/components/railwatch/source-link.tsx +0 -57
  114. data/app/frontend/components/railwatch/sparkline-cell.tsx +0 -14
  115. data/app/frontend/components/railwatch/sql-block.tsx +0 -116
  116. data/app/frontend/components/railwatch/stat.tsx +0 -185
  117. data/app/frontend/components/railwatch/status-badge.tsx +0 -79
  118. data/app/frontend/components/railwatch/step-picker.tsx +0 -57
  119. data/app/frontend/components/railwatch/timeline.tsx +0 -405
  120. data/app/frontend/components/railwatch/utilisation-bar.tsx +0 -44
  121. data/app/frontend/components/railwatch/window-picker.tsx +0 -147
  122. data/app/frontend/components/ui/avatar.tsx +0 -51
  123. data/app/frontend/components/ui/badge.tsx +0 -46
  124. data/app/frontend/components/ui/breadcrumb.tsx +0 -109
  125. data/app/frontend/components/ui/button.tsx +0 -60
  126. data/app/frontend/components/ui/card.tsx +0 -92
  127. data/app/frontend/components/ui/chart.tsx +0 -374
  128. data/app/frontend/components/ui/checkbox.tsx +0 -32
  129. data/app/frontend/components/ui/collapsible.tsx +0 -31
  130. data/app/frontend/components/ui/command.tsx +0 -182
  131. data/app/frontend/components/ui/dialog.tsx +0 -158
  132. data/app/frontend/components/ui/dropdown-menu.tsx +0 -255
  133. data/app/frontend/components/ui/hover-card.tsx +0 -42
  134. data/app/frontend/components/ui/input.tsx +0 -21
  135. data/app/frontend/components/ui/label.tsx +0 -24
  136. data/app/frontend/components/ui/popover.tsx +0 -87
  137. data/app/frontend/components/ui/select.tsx +0 -185
  138. data/app/frontend/components/ui/separator.tsx +0 -28
  139. data/app/frontend/components/ui/sheet.tsx +0 -137
  140. data/app/frontend/components/ui/sidebar.tsx +0 -726
  141. data/app/frontend/components/ui/skeleton.tsx +0 -13
  142. data/app/frontend/components/ui/sonner.tsx +0 -41
  143. data/app/frontend/components/ui/table.tsx +0 -114
  144. data/app/frontend/components/ui/tabs.tsx +0 -91
  145. data/app/frontend/components/ui/textarea.tsx +0 -18
  146. data/app/frontend/components/ui/tooltip.tsx +0 -61
  147. data/app/frontend/components/user-info.tsx +0 -32
  148. data/app/frontend/components/user-menu-content.tsx +0 -94
  149. data/app/frontend/entrypoints/application.css +0 -244
  150. data/app/frontend/entrypoints/inertia.tsx +0 -92
  151. data/app/frontend/fonts/CommitMono-Bold.woff2 +0 -0
  152. data/app/frontend/fonts/CommitMono-Regular.woff2 +0 -0
  153. data/app/frontend/fonts/Roboto-Black.woff2 +0 -0
  154. data/app/frontend/fonts/Roboto-Bold.woff2 +0 -0
  155. data/app/frontend/fonts/Roboto-Medium.woff2 +0 -0
  156. data/app/frontend/fonts/Roboto-Regular.woff2 +0 -0
  157. data/app/frontend/hooks/use-appearance.tsx +0 -67
  158. data/app/frontend/hooks/use-clipboard.ts +0 -32
  159. data/app/frontend/hooks/use-flash.tsx +0 -23
  160. data/app/frontend/hooks/use-hotkeys.ts +0 -63
  161. data/app/frontend/hooks/use-initials.tsx +0 -15
  162. data/app/frontend/hooks/use-live.ts +0 -205
  163. data/app/frontend/hooks/use-mobile-navigation.ts +0 -8
  164. data/app/frontend/hooks/use-mobile.ts +0 -21
  165. data/app/frontend/hooks/use-percentile.ts +0 -24
  166. data/app/frontend/hooks/use-reduced-motion.ts +0 -25
  167. data/app/frontend/hooks/use-row-nav.ts +0 -106
  168. data/app/frontend/hooks/use-step.ts +0 -27
  169. data/app/frontend/hooks/use-ticker.ts +0 -12
  170. data/app/frontend/hooks/use-window.ts +0 -58
  171. data/app/frontend/layouts/app/app-sidebar-layout.tsx +0 -107
  172. data/app/frontend/layouts/app-layout.tsx +0 -21
  173. data/app/frontend/layouts/env-layout.tsx +0 -53
  174. data/app/frontend/layouts/persistent-layout.tsx +0 -18
  175. data/app/frontend/lib/cable.ts +0 -10
  176. data/app/frontend/lib/env-pages.ts +0 -236
  177. data/app/frontend/lib/execution-path.ts +0 -55
  178. data/app/frontend/lib/explain.ts +0 -50
  179. data/app/frontend/lib/filter.ts +0 -25
  180. data/app/frontend/lib/flamegraph.ts +0 -155
  181. data/app/frontend/lib/format.ts +0 -71
  182. data/app/frontend/lib/keyboard.ts +0 -18
  183. data/app/frontend/lib/mount.ts +0 -23
  184. data/app/frontend/lib/source-link.ts +0 -217
  185. data/app/frontend/lib/utils.ts +0 -6
  186. data/app/frontend/pages/alerts/index.tsx +0 -171
  187. data/app/frontend/pages/broadcasts/index.tsx +0 -171
  188. data/app/frontend/pages/cache_events/index.tsx +0 -127
  189. data/app/frontend/pages/commands/index.tsx +0 -143
  190. data/app/frontend/pages/deploys/index.tsx +0 -94
  191. data/app/frontend/pages/deploys/show.tsx +0 -309
  192. data/app/frontend/pages/deprecations/index.tsx +0 -176
  193. data/app/frontend/pages/exceptions/index.tsx +0 -271
  194. data/app/frontend/pages/executions/show.tsx +0 -821
  195. data/app/frontend/pages/issues/index.tsx +0 -399
  196. data/app/frontend/pages/issues/show.tsx +0 -1367
  197. data/app/frontend/pages/jobs/index.tsx +0 -381
  198. data/app/frontend/pages/jobs/klass.tsx +0 -215
  199. data/app/frontend/pages/llm_calls/index.tsx +0 -664
  200. data/app/frontend/pages/logs/index.tsx +0 -303
  201. data/app/frontend/pages/mails/index.tsx +0 -218
  202. data/app/frontend/pages/notifications/index.tsx +0 -161
  203. data/app/frontend/pages/outgoing_requests/index.tsx +0 -309
  204. data/app/frontend/pages/overview/show.tsx +0 -333
  205. data/app/frontend/pages/people/index.tsx +0 -102
  206. data/app/frontend/pages/people/show.tsx +0 -149
  207. data/app/frontend/pages/processes/index.tsx +0 -335
  208. data/app/frontend/pages/profiles/index.tsx +0 -110
  209. data/app/frontend/pages/profiles/show.tsx +0 -105
  210. data/app/frontend/pages/queries/index.tsx +0 -492
  211. data/app/frontend/pages/queries/show.tsx +0 -276
  212. data/app/frontend/pages/releases/index.tsx +0 -190
  213. data/app/frontend/pages/releases/release-health.tsx +0 -68
  214. data/app/frontend/pages/releases/release-path.ts +0 -25
  215. data/app/frontend/pages/releases/show.tsx +0 -262
  216. data/app/frontend/pages/requests/index.tsx +0 -235
  217. data/app/frontend/pages/requests/route.tsx +0 -159
  218. data/app/frontend/pages/scheduled_tasks/index.tsx +0 -220
  219. data/app/frontend/pages/spans/index.tsx +0 -229
  220. data/app/frontend/pages/spans/show.tsx +0 -220
  221. data/app/frontend/pages/storage_ops/index.tsx +0 -150
  222. data/app/frontend/pages/tenants/index.tsx +0 -236
  223. data/app/frontend/pages/tenants/show.tsx +0 -477
  224. data/app/frontend/pages/tenants/tenant-path.ts +0 -26
  225. data/app/frontend/pages/thresholds/index.tsx +0 -414
  226. data/app/frontend/pages/traces/show.tsx +0 -208
  227. data/app/frontend/pages/transactions/index.tsx +0 -220
  228. data/app/frontend/pages/view_renders/index.tsx +0 -241
  229. data/app/frontend/pages/visits/index.tsx +0 -321
  230. data/app/frontend/public/icon.png +0 -0
  231. data/app/frontend/public/icon.svg +0 -5
  232. data/app/frontend/routes/index.d.ts +0 -2136
  233. data/app/frontend/routes/index.js +0 -2112
  234. data/app/frontend/types/globals.d.ts +0 -9
  235. data/app/frontend/types/index.ts +0 -288
  236. data/app/frontend/types/vite-env.d.ts +0 -9
  237. data/app/helpers/railwatch/assets_helper.rb +0 -52
  238. data/app/jobs/railwatch/anomaly_scan_job.rb +0 -11
  239. data/app/jobs/railwatch/application_job.rb +0 -7
  240. data/app/jobs/railwatch/auto_resolve_issues_job.rb +0 -19
  241. data/app/jobs/railwatch/check_scheduled_tasks_job.rb +0 -113
  242. data/app/jobs/railwatch/detect_anomalies_job.rb +0 -171
  243. data/app/jobs/railwatch/detect_performance_issues_job.rb +0 -95
  244. data/app/jobs/railwatch/group_exceptions_job.rb +0 -91
  245. data/app/jobs/railwatch/optimize_telemetry_job.rb +0 -23
  246. data/app/jobs/railwatch/performance_scan_job.rb +0 -11
  247. data/app/jobs/railwatch/prune_telemetry_job.rb +0 -129
  248. data/app/jobs/railwatch/release_health_rollup_job.rb +0 -64
  249. data/app/jobs/railwatch/rollup_catchup_job.rb +0 -21
  250. data/app/jobs/railwatch/rollup_job.rb +0 -132
  251. data/app/jobs/railwatch/scheduled_task_scan_job.rb +0 -11
  252. data/app/models/concerns/railwatch/detection_snapshotting.rb +0 -20
  253. data/app/models/railwatch/alert.rb +0 -229
  254. data/app/models/railwatch/alert_rule.rb +0 -121
  255. data/app/models/railwatch/anomaly_rule.rb +0 -51
  256. data/app/models/railwatch/application.rb +0 -44
  257. data/app/models/railwatch/application_record.rb +0 -33
  258. data/app/models/railwatch/comment.rb +0 -36
  259. data/app/models/railwatch/deploy.rb +0 -67
  260. data/app/models/railwatch/environment.rb +0 -68
  261. data/app/models/railwatch/execution_presenter.rb +0 -185
  262. data/app/models/railwatch/filter_query.rb +0 -184
  263. data/app/models/railwatch/followup_receipt.rb +0 -27
  264. data/app/models/railwatch/ingest/batch.rb +0 -355
  265. data/app/models/railwatch/ingest/mapper.rb +0 -585
  266. data/app/models/railwatch/ingest/payload.rb +0 -96
  267. data/app/models/railwatch/ingest/rollup_absorber.rb +0 -170
  268. data/app/models/railwatch/ingest/writer.rb +0 -137
  269. data/app/models/railwatch/issue.rb +0 -277
  270. data/app/models/railwatch/issue_activity.rb +0 -23
  271. data/app/models/railwatch/issue_detection_presenter.rb +0 -309
  272. data/app/models/railwatch/issue_detection_snapshot.rb +0 -77
  273. data/app/models/railwatch/maintenance_task.rb +0 -53
  274. data/app/models/railwatch/saved_view.rb +0 -63
  275. data/app/models/railwatch/telemetry/aggregations.rb +0 -251
  276. data/app/models/railwatch/telemetry/attachment.rb +0 -31
  277. data/app/models/railwatch/telemetry/bounded_gzip.rb +0 -101
  278. data/app/models/railwatch/telemetry/broadcast.rb +0 -13
  279. data/app/models/railwatch/telemetry/cache_event.rb +0 -16
  280. data/app/models/railwatch/telemetry/child.rb +0 -53
  281. data/app/models/railwatch/telemetry/cursor_page.rb +0 -99
  282. data/app/models/railwatch/telemetry/deprecation.rb +0 -13
  283. data/app/models/railwatch/telemetry/enqueued_job.rb +0 -13
  284. data/app/models/railwatch/telemetry/exception.rb +0 -28
  285. data/app/models/railwatch/telemetry/execution.rb +0 -152
  286. data/app/models/railwatch/telemetry/export_delivery.rb +0 -32
  287. data/app/models/railwatch/telemetry/export_destination.rb +0 -66
  288. data/app/models/railwatch/telemetry/health_sample.rb +0 -72
  289. data/app/models/railwatch/telemetry/ingest_batch.rb +0 -31
  290. data/app/models/railwatch/telemetry/llm_call.rb +0 -37
  291. data/app/models/railwatch/telemetry/log.rb +0 -91
  292. data/app/models/railwatch/telemetry/mail.rb +0 -13
  293. data/app/models/railwatch/telemetry/n_plus_one.rb +0 -92
  294. data/app/models/railwatch/telemetry/notification.rb +0 -13
  295. data/app/models/railwatch/telemetry/outgoing_request.rb +0 -13
  296. data/app/models/railwatch/telemetry/person.rb +0 -50
  297. data/app/models/railwatch/telemetry/process.rb +0 -10
  298. data/app/models/railwatch/telemetry/profile.rb +0 -37
  299. data/app/models/railwatch/telemetry/query.rb +0 -57
  300. data/app/models/railwatch/telemetry/query_shape.rb +0 -45
  301. data/app/models/railwatch/telemetry/release_health.rb +0 -69
  302. data/app/models/railwatch/telemetry/rollup.rb +0 -157
  303. data/app/models/railwatch/telemetry/session.rb +0 -24
  304. data/app/models/railwatch/telemetry/span.rb +0 -19
  305. data/app/models/railwatch/telemetry/storage_op.rb +0 -13
  306. data/app/models/railwatch/telemetry/tenant.rb +0 -240
  307. data/app/models/railwatch/telemetry/transaction.rb +0 -13
  308. data/app/models/railwatch/telemetry/view_render.rb +0 -13
  309. data/app/models/railwatch/telemetry/visit.rb +0 -24
  310. data/app/models/railwatch/telemetry_record.rb +0 -107
  311. data/app/models/railwatch/threshold.rb +0 -66
  312. data/app/models/railwatch/user.rb +0 -47
  313. data/app/models/railwatch/viewer.rb +0 -13
  314. data/app/models/railwatch/window.rb +0 -66
  315. data/app/views/layouts/railwatch/dashboard.html.erb +0 -25
  316. data/db/railwatch_migrate/20260916000000_create_railwatch_tables.rb +0 -151
  317. data/db/railwatch_migrate/20260917000000_create_railwatch_maintenance_tasks.rb +0 -18
  318. data/db/railwatch_migrate/20260917120000_create_railwatch_followup_receipts.rb +0 -20
  319. data/db/railwatch_migrate/20260918120000_widen_host_user_ids.rb +0 -71
  320. data/db/railwatch_telemetry_migrate/20260903000000_enable_incremental_vacuum.rb +0 -62
  321. data/db/railwatch_telemetry_migrate/20260903000001_create_telemetry.rb +0 -481
  322. data/db/railwatch_telemetry_migrate/20260903000002_rename_tenant_to_app_tenant.rb +0 -14
  323. data/db/railwatch_telemetry_migrate/20260903000003_add_statement_count_to_transactions.rb +0 -9
  324. data/db/railwatch_telemetry_migrate/20260903000004_add_role_and_channel.rb +0 -10
  325. data/db/railwatch_telemetry_migrate/20260903000005_add_locals_to_exceptions.rb +0 -9
  326. data/db/railwatch_telemetry_migrate/20260903000006_add_spans_health_vitals_and_fts.rb +0 -82
  327. data/db/railwatch_telemetry_migrate/20260903000007_rename_span_attributes_to_payload.rb +0 -10
  328. data/db/railwatch_telemetry_migrate/20260903000008_add_profiles_and_attachments.rb +0 -60
  329. data/db/railwatch_telemetry_migrate/20260903000009_add_truncated_to_attachments.rb +0 -9
  330. data/db/railwatch_telemetry_migrate/20260903000010_create_sessions_and_release_health.rb +0 -51
  331. data/db/railwatch_telemetry_migrate/20260903000011_add_fingerprint_to_exceptions.rb +0 -11
  332. data/db/railwatch_telemetry_migrate/20260904000012_add_failed_to_broadcasts.rb +0 -10
  333. data/db/railwatch_telemetry_migrate/20260904010000_add_filter_cursor_indexes.rb +0 -37
  334. data/db/railwatch_telemetry_migrate/20260904020000_add_n_plus_ones_execution_id_index.rb +0 -11
  335. data/db/railwatch_telemetry_migrate/20260904120000_create_query_shapes.rb +0 -15
  336. data/db/railwatch_telemetry_migrate/20260906120000_add_backpressure_factor_to_ingest_batches.rb +0 -9
  337. data/db/railwatch_telemetry_migrate/20260907000000_rename_lantern_version_on_processes.rb +0 -10
  338. data/db/railwatch_telemetry_migrate/20260913000000_rename_nightrail_version_on_processes.rb +0 -9
  339. data/db/railwatch_telemetry_migrate/20260914000000_drop_orphan_durable_ingest_tables.rb +0 -18
  340. data/db/railwatch_telemetry_migrate/20260914010000_drop_orphan_durable_ingest_columns.rb +0 -25
  341. data/db/railwatch_telemetry_migrate/20260915000000_create_llm_calls.rb +0 -55
  342. data/db/railwatch_telemetry_migrate/20260915120000_add_detail_to_llm_calls.rb +0 -21
  343. data/db/railwatch_telemetry_migrate/20260915200000_add_explained_index_to_queries.rb +0 -16
  344. data/db/railwatch_telemetry_migrate/20260915210000_add_slowest_index_to_queries.rb +0 -18
  345. data/db/railwatch_telemetry_migrate/20260917010000_add_batch_ledger_to_ingest_batches.rb +0 -16
  346. data/db/railwatch_telemetry_migrate/20260919000100_create_export_queue.rb +0 -146
  347. data/db/railwatch_telemetry_migrate/20260922000000_add_covering_indexes_for_dashboard_aggregates.rb +0 -34
  348. data/db/railwatch_telemetry_migrate/20260923000000_add_people_index.rb +0 -15
  349. data/db/railwatch_telemetry_migrate/20260925000000_add_tenant_summary_index.rb +0 -17
  350. data/db/railwatch_telemetry_migrate/20261008000000_add_in_transaction_to_outgoing_requests.rb +0 -10
  351. data/docs/embedded.md +0 -503
  352. data/lib/puma/plugin/railwatch.rb +0 -215
  353. data/lib/railwatch/dashboard_assets.rb +0 -45
  354. data/lib/railwatch/embedded.rb +0 -50
  355. data/lib/railwatch/export/client.rb +0 -124
  356. data/lib/railwatch/export/lease.rb +0 -56
  357. data/lib/railwatch/export/outbox.rb +0 -361
  358. data/lib/railwatch/export/policy.rb +0 -79
  359. data/lib/railwatch/export/sender.rb +0 -130
  360. data/lib/railwatch/ingest_request_body_limit.rb +0 -10
  361. data/lib/railwatch/maintenance.rb +0 -194
  362. data/lib/railwatch/patches/migration_busy_timeout.rb +0 -73
  363. data/lib/railwatch/transport/local.rb +0 -78
  364. data/lib/railwatch/transport/socket.rb +0 -183
  365. data/lib/railwatch/writer.rb +0 -370
  366. data/public/railwatch/assets/CommitMono-Bold-D6h61ieg.woff2 +0 -0
  367. data/public/railwatch/assets/CommitMono-Regular-zr8w7Obm.woff2 +0 -0
  368. data/public/railwatch/assets/Roboto-Black-auA4GeOK.woff2 +0 -0
  369. data/public/railwatch/assets/Roboto-Bold-CJLnO8j1.woff2 +0 -0
  370. data/public/railwatch/assets/Roboto-Medium-Cm2bwKpj.woff2 +0 -0
  371. data/public/railwatch/assets/Roboto-Regular-Chaq1-PV.woff2 +0 -0
  372. data/public/railwatch/assets/app-layout-by7G3sa1.js +0 -41
  373. data/public/railwatch/assets/application-Cc5v_Vk9.css +0 -1
  374. data/public/railwatch/assets/arrow-up-DCZ7emux.js +0 -1
  375. data/public/railwatch/assets/braces-CykT5_5u.js +0 -1
  376. data/public/railwatch/assets/card-C-PPSA0g.js +0 -1
  377. data/public/railwatch/assets/chart-Cov79YC5.js +0 -39
  378. data/public/railwatch/assets/chart-hover-DdK4E-2h.js +0 -1
  379. data/public/railwatch/assets/chart-panel-BPaYRXJB.js +0 -1
  380. data/public/railwatch/assets/code-BYjC4YZ_.js +0 -1
  381. data/public/railwatch/assets/copy-id-LPfoj9cC.js +0 -1
  382. data/public/railwatch/assets/cursor-load-more-DSdhgpGl.js +0 -1
  383. data/public/railwatch/assets/data-table-CQ_YRWQs.js +0 -1
  384. data/public/railwatch/assets/env-layout-CdMWbUkm.js +0 -1
  385. data/public/railwatch/assets/execution-path-7MYt-Qbn.js +0 -1
  386. data/public/railwatch/assets/filter-bar-CrzpQ_vD.js +0 -1
  387. data/public/railwatch/assets/flamegraph-BIFEdTAg.js +0 -2
  388. data/public/railwatch/assets/format-B9SDkrWj.js +0 -1
  389. data/public/railwatch/assets/frames-C5t-x4f0.js +0 -1
  390. data/public/railwatch/assets/index--NQ7us-L.js +0 -1
  391. data/public/railwatch/assets/index-2kgYe_99.js +0 -1
  392. data/public/railwatch/assets/index-4YEPHxtO.js +0 -1
  393. data/public/railwatch/assets/index-AOCC1GDJ.js +0 -1
  394. data/public/railwatch/assets/index-BEo-u0eO.js +0 -1
  395. data/public/railwatch/assets/index-BJ1V3w2N.js +0 -1
  396. data/public/railwatch/assets/index-BPoHsBKb.js +0 -1
  397. data/public/railwatch/assets/index-BZzyGUM3.js +0 -1
  398. data/public/railwatch/assets/index-BgVq7yKL.js +0 -1
  399. data/public/railwatch/assets/index-BqFGEZvW.js +0 -1
  400. data/public/railwatch/assets/index-ByuHJ1CH.js +0 -1
  401. data/public/railwatch/assets/index-C2j50AL2.js +0 -1
  402. data/public/railwatch/assets/index-CLEdTkvW.js +0 -1
  403. data/public/railwatch/assets/index-CWgq8qBu.js +0 -1
  404. data/public/railwatch/assets/index-CXQ7_oVj.js +0 -2
  405. data/public/railwatch/assets/index-CmyYrjS2.js +0 -1
  406. data/public/railwatch/assets/index-Cn9_HjDo.js +0 -1
  407. data/public/railwatch/assets/index-CsMAm9UK.js +0 -1
  408. data/public/railwatch/assets/index-D0Kk_oGY.js +0 -1
  409. data/public/railwatch/assets/index-DC9ZptJh.js +0 -1
  410. data/public/railwatch/assets/index-DNzg7jmV.js +0 -1
  411. data/public/railwatch/assets/index-DQ8uJO5f.js +0 -1
  412. data/public/railwatch/assets/index-Deq14BxB.js +0 -1
  413. data/public/railwatch/assets/index-IaV3Blzp.js +0 -1
  414. data/public/railwatch/assets/index-TYNWcJQs.js +0 -1
  415. data/public/railwatch/assets/index-WonH2fcZ.js +0 -1
  416. data/public/railwatch/assets/index-WxWUaH_d.js +0 -1
  417. data/public/railwatch/assets/index-mUNrl4ky.js +0 -1
  418. data/public/railwatch/assets/inertia-DfNRARuA.js +0 -97
  419. data/public/railwatch/assets/json-viewer-DMsF5glp.js +0 -1
  420. data/public/railwatch/assets/klass-CmHYk5rz.js +0 -1
  421. data/public/railwatch/assets/origin-identity-1R3bqa3R.js +0 -1
  422. data/public/railwatch/assets/percentile-picker-73z5PAps.js +0 -1
  423. data/public/railwatch/assets/relative-time-Dsc_cCdX.js +0 -1
  424. data/public/railwatch/assets/release-health-BV5OaOWd.js +0 -1
  425. data/public/railwatch/assets/route-CWh58C7K.js +0 -1
  426. data/public/railwatch/assets/segmented-DB4zh-Am.js +0 -1
  427. data/public/railwatch/assets/select-DBKjFlOX.js +0 -1
  428. data/public/railwatch/assets/series-chart-BaiDG795.js +0 -1
  429. data/public/railwatch/assets/show-B4ICCFGh.js +0 -1
  430. data/public/railwatch/assets/show-B5lOU9Gv.js +0 -1
  431. data/public/railwatch/assets/show-BYPB74t4.js +0 -2
  432. data/public/railwatch/assets/show-C7A0m2M8.js +0 -1
  433. data/public/railwatch/assets/show-DT5X1zqE.js +0 -1
  434. data/public/railwatch/assets/show-D_NBdXsn.js +0 -2
  435. data/public/railwatch/assets/show-DgPCnRg8.js +0 -1
  436. data/public/railwatch/assets/show-Yl69HF0x.js +0 -1
  437. data/public/railwatch/assets/show-_QxuUQCm.js +0 -3
  438. data/public/railwatch/assets/show-g__jnN36.js +0 -1
  439. data/public/railwatch/assets/show-l4ztfjl9.js +0 -1
  440. data/public/railwatch/assets/sort-header-BcG8ulEH.js +0 -1
  441. data/public/railwatch/assets/source-link-B2183i2-.js +0 -1
  442. data/public/railwatch/assets/sparkline-cell-B47ipscB.js +0 -1
  443. data/public/railwatch/assets/stat-DT2hhsqS.js +0 -1
  444. data/public/railwatch/assets/status-badge-CmbRKlY7.js +0 -1
  445. data/public/railwatch/assets/tenant-path-C4rNGauE.js +0 -1
  446. data/public/railwatch/assets/use-clipboard-oTNeP4ax.js +0 -1
  447. data/public/railwatch/assets/use-live-CLZZj245.js +0 -1
  448. data/public/railwatch/icon.png +0 -0
  449. data/public/railwatch/icon.svg +0 -5
  450. data/public/railwatch/manifest.json +0 -1245
  451. data/public/railwatch/rails-vite.json +0 -1
  452. /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.4
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