railwatch 0.3.6 → 0.4.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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +60 -0
  3. data/{lib/generators/railwatch/install/templates → app/frontend/lib}/railwatch.ts +162 -42
  4. data/app/models/railwatch/ingest/batch.rb +1 -0
  5. data/app/models/railwatch/ingest/mapper.rb +12 -0
  6. data/docs/configuration.md +8 -3
  7. data/lib/generators/railwatch/install/install_generator.rb +5 -1
  8. data/lib/railwatch/patches/rake_task.rb +10 -1
  9. data/lib/railwatch/patches/runner_command.rb +3 -1
  10. data/lib/railwatch/transport/http.rb +15 -5
  11. data/lib/railwatch/version.rb +1 -1
  12. data/lib/railwatch/wire_fixtures.json +856 -0
  13. data/lib/railwatch.rb +22 -0
  14. data/lib/tasks/railwatch_tasks.rake +7 -0
  15. data/public/railwatch/assets/{app-layout-B5Fcdwfz.js → app-layout-DUk54qUM.js} +1 -1
  16. data/public/railwatch/assets/{app-wordmark-1SRllgHv.js → app-wordmark-DDNuuq5_.js} +1 -1
  17. data/public/railwatch/assets/{appearance-DbwahDrc.js → appearance-C3LMdsDy.js} +1 -1
  18. data/public/railwatch/assets/{arrow-up-DwKQcab4.js → arrow-up-DYTCBENO.js} +1 -1
  19. data/public/railwatch/assets/{auth-layout-DXfxXAN_.js → auth-layout-CzPRawuI.js} +1 -1
  20. data/public/railwatch/assets/{badge-CApjyWcg.js → badge-s7YDycYg.js} +1 -1
  21. data/public/railwatch/assets/{braces-kGSgxWnS.js → braces-BFrg-bvp.js} +1 -1
  22. data/public/railwatch/assets/{card-BaJ8kNkp.js → card-DiW-JhK3.js} +1 -1
  23. data/public/railwatch/assets/{chart-hover-XYPNE2CX.js → chart-hover-DMWx5-Rs.js} +1 -1
  24. data/public/railwatch/assets/{chart-Xnrz1Nqw.js → chart-nsdZV0Dv.js} +1 -1
  25. data/public/railwatch/assets/{chart-panel-BYk68mJJ.js → chart-panel-BlirnMrQ.js} +1 -1
  26. data/public/railwatch/assets/{checkbox-Bf41R8W6.js → checkbox-C2AqEZXX.js} +1 -1
  27. data/public/railwatch/assets/{code-a-9sh36A.js → code-DVJtYP7h.js} +1 -1
  28. data/public/railwatch/assets/{copy-block-zykZWQym.js → copy-block-D1myf7is.js} +1 -1
  29. data/public/railwatch/assets/{copy-id-b6CW5ESL.js → copy-id-CyRCMfdH.js} +1 -1
  30. data/public/railwatch/assets/{cursor-load-more-0cHzbTPT.js → cursor-load-more-JfSVBn9C.js} +1 -1
  31. data/public/railwatch/assets/{data-table-IvA7xvrK.js → data-table-CwtPkw_i.js} +1 -1
  32. data/public/railwatch/assets/{edit-7lmf3k80.js → edit-BvTugIpj.js} +1 -1
  33. data/public/railwatch/assets/{edit-ZKE15r-F.js → edit-DvpDUM-t.js} +1 -1
  34. data/public/railwatch/assets/{edit-DTtRV1fO.js → edit-fB83T9Yh.js} +1 -1
  35. data/public/railwatch/assets/{empty-state-BFTnQ2oT.js → empty-state-CshhuRUU.js} +1 -1
  36. data/public/railwatch/assets/{env-layout-erSDpIXg.js → env-layout-Dkp_4NvM.js} +1 -1
  37. data/public/railwatch/assets/{execution-path-Di5uUHi-.js → execution-path-CdEerUGH.js} +1 -1
  38. data/public/railwatch/assets/{filter-bar-Btm__gQi.js → filter-bar-BMHf8xBb.js} +1 -1
  39. data/public/railwatch/assets/{flamegraph-C-mZdqa7.js → flamegraph-uYWk1Yov.js} +1 -1
  40. data/public/railwatch/assets/{frames-KZBsjg6-.js → frames-B5ZECkvt.js} +1 -1
  41. data/public/railwatch/assets/{google-sign-in-button-DJRoD72g.js → google-sign-in-button-CAvsXYb4.js} +1 -1
  42. data/public/railwatch/assets/{index-CeqMDByC.js → index-1-78ZewP.js} +1 -1
  43. data/public/railwatch/assets/{index-P_e_cI0O.js → index-B-qRsj0W.js} +1 -1
  44. data/public/railwatch/assets/{index-kNhZPLVj.js → index-B4IRsZXK.js} +1 -1
  45. data/public/railwatch/assets/{index-QyHE9WsU.js → index-BIZsdfdM.js} +1 -1
  46. data/public/railwatch/assets/{index-EGU__DOB.js → index-BIom4V2g.js} +1 -1
  47. data/public/railwatch/assets/{index-Bot7kHMA.js → index-BMgA9NNc.js} +1 -1
  48. data/public/railwatch/assets/{index-CX8Br7m9.js → index-BpnfuXi-.js} +1 -1
  49. data/public/railwatch/assets/{index-D4968-TC.js → index-Bw_ByIps.js} +1 -1
  50. data/public/railwatch/assets/{index-CU6yhEyt.js → index-C7bU7oUF.js} +1 -1
  51. data/public/railwatch/assets/{index-Z1c4nFL0.js → index-CAkCcAty.js} +1 -1
  52. data/public/railwatch/assets/{index-B-bSm1jB.js → index-CRShH-fR.js} +1 -1
  53. data/public/railwatch/assets/{index-DBTxQw77.js → index-CZWzIE8F.js} +1 -1
  54. data/public/railwatch/assets/{index-Cj3_jD1E.js → index-CaJvo0Oc.js} +1 -1
  55. data/public/railwatch/assets/{index-HCJmFcZu.js → index-CdM3F3jz.js} +1 -1
  56. data/public/railwatch/assets/{index-DcItJxa5.js → index-ClG89uia.js} +1 -1
  57. data/public/railwatch/assets/{index-CAzQkw-h.js → index-ClJtZh5Q.js} +1 -1
  58. data/public/railwatch/assets/{index-Bjw4sTXU.js → index-Czq2bi1U.js} +1 -1
  59. data/public/railwatch/assets/{index-CP6jrrPT.js → index-D-O1LUPq.js} +1 -1
  60. data/public/railwatch/assets/{index-CYYmZpZu.js → index-DJIXGkfB.js} +1 -1
  61. data/public/railwatch/assets/{index-BAkZNNEh.js → index-DMcsT2ES.js} +1 -1
  62. data/public/railwatch/assets/{index-wOj5j0KC.js → index-DVUwgfqP.js} +1 -1
  63. data/public/railwatch/assets/{index-DAEzO_vq.js → index-DWMKU6mG.js} +1 -1
  64. data/public/railwatch/assets/{index-BWSyQRZI.js → index-DYrF-A96.js} +1 -1
  65. data/public/railwatch/assets/{index-BsrCnQqg.js → index-DcuyMiuG.js} +1 -1
  66. data/public/railwatch/assets/{index-BoTOVM0v.js → index-DpWQMikK.js} +1 -1
  67. data/public/railwatch/assets/{index-CIUl9POV.js → index-DuGGTdIJ.js} +1 -1
  68. data/public/railwatch/assets/{index-uHBVO8Lh.js → index-DzoUj38Q.js} +1 -1
  69. data/public/railwatch/assets/{index-CBJZQgHA.js → index-QxAKxnHK.js} +1 -1
  70. data/public/railwatch/assets/{index-9LL_C3eG.js → index-X13K9BbO.js} +1 -1
  71. data/public/railwatch/assets/{index-DEfu_YvU.js → index-Zf9xXwq7.js} +1 -1
  72. data/public/railwatch/assets/{index-Bo8hrjbs.js → index-dKn1tKSX.js} +1 -1
  73. data/public/railwatch/assets/{index-DCAho97K.js → index-fA7h22qS.js} +1 -1
  74. data/public/railwatch/assets/{index-BtSlLmkg.js → index-iVNm3uzI.js} +1 -1
  75. data/public/railwatch/assets/{index-B0VXzXYG.js → index-n16aviHx.js} +1 -1
  76. data/public/railwatch/assets/{index-DXUwhSCQ.js → index-vC9KU2bt.js} +1 -1
  77. data/public/railwatch/assets/{inertia-Degv_G9N.js → inertia-CUTKXjxg.js} +3 -3
  78. data/public/railwatch/assets/{input-error-C6SqO_iU.js → input-error-C8ycyeD0.js} +1 -1
  79. data/public/railwatch/assets/{json-viewer-DcQIxT86.js → json-viewer-CJECqZ0l.js} +1 -1
  80. data/public/railwatch/assets/{klass-WgQEfWpo.js → klass-Br9dng39.js} +1 -1
  81. data/public/railwatch/assets/{label-B_vK19tR.js → label-B32Ks8n7.js} +1 -1
  82. data/public/railwatch/assets/{layout-C8q7GUlZ.js → layout-5ZhRtywp.js} +1 -1
  83. data/public/railwatch/assets/{live-dot-DaXEbkXo.js → live-dot-Bb1UYT9F.js} +1 -1
  84. data/public/railwatch/assets/{nav-BnD5XArZ.js → nav-XUcwnBso.js} +1 -1
  85. data/public/railwatch/assets/{new-BL9OqXHe.js → new-0xyEF6NL.js} +1 -1
  86. data/public/railwatch/assets/{new-DIjwu2jF.js → new-CV011uLi.js} +1 -1
  87. data/public/railwatch/assets/{new-BqP0NhOF.js → new-CdvlEBjJ.js} +1 -1
  88. data/public/railwatch/assets/{new-BhRnQn4w.js → new-D9-ORiNW.js} +1 -1
  89. data/public/railwatch/assets/{new-uxMnBtoY.js → new-GIkDYLt8.js} +1 -1
  90. data/public/railwatch/assets/{new-CWP3wtwt.js → new-YBWOo9_V.js} +1 -1
  91. data/public/railwatch/assets/{onboarding-C_Y3xTsH.js → onboarding-BqEuP-Ml.js} +1 -1
  92. data/public/railwatch/assets/{origin-identity-CNhOnfBa.js → origin-identity-DrJ4D2TX.js} +1 -1
  93. data/public/railwatch/assets/{percentile-picker-BujVEhP6.js → percentile-picker-_wllqYoJ.js} +1 -1
  94. data/public/railwatch/assets/{relative-time-6CoKr1lN.js → relative-time-CV7V8aSP.js} +1 -1
  95. data/public/railwatch/assets/{release-health-1Qzc_XhT.js → release-health-DRNLZtT7.js} +1 -1
  96. data/public/railwatch/assets/{route-xqgYjOwJ.js → route-D9slUz_a.js} +1 -1
  97. data/public/railwatch/assets/{segmented-CVKq2Xpa.js → segmented-Bj70Htrs.js} +1 -1
  98. data/public/railwatch/assets/{select-CsmSXsJ4.js → select-DJBZX2ky.js} +1 -1
  99. data/public/railwatch/assets/{separator-CrM10Oot.js → separator-UUo0bkyc.js} +1 -1
  100. data/public/railwatch/assets/{series-chart-D33UhdG2.js → series-chart-C1YrNlID.js} +1 -1
  101. data/public/railwatch/assets/{show-zxVxhUel.js → show-BQtEcTeD.js} +1 -1
  102. data/public/railwatch/assets/{show-B0nHy31L.js → show-BT3tKCgP.js} +1 -1
  103. data/public/railwatch/assets/{show-DZwcZZrz.js → show-BoG7jcwk.js} +1 -1
  104. data/public/railwatch/assets/{show-ixK2r2f1.js → show-BpyCRL-I.js} +1 -1
  105. data/public/railwatch/assets/{show-rysBbvt-.js → show-C0uC3gnA.js} +1 -1
  106. data/public/railwatch/assets/{show-B3izvRdU.js → show-COfP8yWt.js} +1 -1
  107. data/public/railwatch/assets/{show-B7NhcWgp.js → show-CefJwag7.js} +1 -1
  108. data/public/railwatch/assets/{show-8H9WAGav.js → show-ChDJZjoj.js} +1 -1
  109. data/public/railwatch/assets/{show-CJMeX75E.js → show-D7IL22Hy.js} +1 -1
  110. data/public/railwatch/assets/{show-DUwQlohF.js → show-D7tP881O.js} +1 -1
  111. data/public/railwatch/assets/{show-BM-E2iYc.js → show-DR6u4CR7.js} +1 -1
  112. data/public/railwatch/assets/{show-CMisHNAI.js → show-DnBCvlnd.js} +1 -1
  113. data/public/railwatch/assets/{show-BlNR3ZOZ.js → show-DoCg0ifP.js} +1 -1
  114. data/public/railwatch/assets/{show-9jDeBNpc.js → show-GruxlCov.js} +1 -1
  115. data/public/railwatch/assets/{show-CvNV23gH.js → show-Pu3Iehw5.js} +1 -1
  116. data/public/railwatch/assets/{show-DMZlwzL_.js → show-TTCk2Met.js} +1 -1
  117. data/public/railwatch/assets/{show-CQ4Ze-Un.js → show-yQipmite.js} +1 -1
  118. data/public/railwatch/assets/{sort-header-CKj_7G3U.js → sort-header-CqQQhaxg.js} +1 -1
  119. data/public/railwatch/assets/{sparkline-cell-Ckg29yVq.js → sparkline-cell-BwdBz0yv.js} +1 -1
  120. data/public/railwatch/assets/{stat-TxvoBiC8.js → stat-IghK3WjD.js} +1 -1
  121. data/public/railwatch/assets/{status-badge-5NCVJHjo.js → status-badge-XYUN9gUA.js} +1 -1
  122. data/public/railwatch/assets/{tenant-path-B5ZRK4x3.js → tenant-path-SxnZbfU1.js} +1 -1
  123. data/public/railwatch/assets/{text-link-BPllRj0F.js → text-link-NCL9N5D5.js} +1 -1
  124. data/public/railwatch/assets/{textarea-DtD5yZp_.js → textarea-DhI1dmQa.js} +1 -1
  125. data/public/railwatch/assets/{timeline-DZz5ZnHN.js → timeline-CLAwsAlo.js} +1 -1
  126. data/public/railwatch/assets/{transition-Ds6Cakuc.js → transition-DpTb9Yiv.js} +1 -1
  127. data/public/railwatch/assets/{use-clipboard-BLjjYH8V.js → use-clipboard-D5i6e5kf.js} +1 -1
  128. data/public/railwatch/assets/{use-live-GKze1mNC.js → use-live-V-slSdFJ.js} +1 -1
  129. data/public/railwatch/manifest.json +1287 -1287
  130. metadata +117 -116
data/lib/railwatch.rb CHANGED
@@ -599,6 +599,28 @@ module Railwatch
599
599
  File.expand_path("../db/#{database}_migrate", __dir__)
600
600
  end
601
601
 
602
+ # The one browser client, relative to the gem root. The dashboard bundle
603
+ # is built from it, the install generator copies it, the gem ships it (the
604
+ # only app/frontend file it does), and a host with its own frontend build
605
+ # (Railwatch Cloud) imports it from browser_client_path.
606
+ BROWSER_CLIENT = "app/frontend/lib/railwatch.ts"
607
+
608
+ def self.browser_client_path
609
+ File.expand_path("../#{BROWSER_CLIENT}", __dir__)
610
+ end
611
+
612
+ # One realistic wire record per record type, exactly as the gem's own
613
+ # subscribers emit it, generated by spec/railwatch/wire_fixtures_spec.rb.
614
+ # A receiver tests its mapper against these instead of hand-writing what
615
+ # it thinks the gem sends.
616
+ def self.wire_fixtures_path
617
+ File.expand_path("../lib/railwatch/wire_fixtures.json", __dir__)
618
+ end
619
+
620
+ def self.wire_fixtures
621
+ @wire_fixtures ||= JSON.parse(File.read(wire_fixtures_path)).freeze
622
+ end
623
+
602
624
  # Raised when the engine's models are used in an app whose database.yml
603
625
  # has no entry for them. They must never fall back to the host's primary
604
626
  # connection: the telemetry tables are unprefixed (`sessions`, `visits`,
@@ -612,3 +612,10 @@ namespace :railwatch do
612
612
  res.is_a?(Net::HTTPSuccess) ? puts("Deploy #{deploy} recorded") : abort("Deploy failed: #{res.code} #{res.body}")
613
613
  end
614
614
  end
615
+
616
+ namespace :railwatch do
617
+ desc "Regenerate lib/railwatch/wire_fixtures.json from the gem's own subscribers"
618
+ task :wire_fixtures do
619
+ sh({ "RAILWATCH_WRITE_WIRE_FIXTURES" => "1" }, "bundle exec rspec spec/railwatch/wire_fixtures_spec.rb -e 'matches the shipped'")
620
+ end
621
+ end