@openc3/vue-common 7.0.1 → 7.1.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 (508) hide show
  1. package/dist/{ArrayWidget-BHjh3qLF.cjs → ArrayWidget-CQCphADm.cjs} +3 -3
  2. package/dist/{ArrayWidget-BHjh3qLF.cjs.map → ArrayWidget-CQCphADm.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-Dh6zDiC7.js → ArrayWidget-CcQFJGCA.js} +7 -6
  4. package/dist/{ArrayWidget-Dh6zDiC7.js.map → ArrayWidget-CcQFJGCA.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-CSc_TqNm.js → ArrayplotWidget-DGJEXAY0.js} +6 -5
  6. package/dist/{ArrayplotWidget-CSc_TqNm.js.map → ArrayplotWidget-DGJEXAY0.js.map} +1 -1
  7. package/dist/ArrayplotWidget-J0xWFYsb.cjs +2 -0
  8. package/dist/{ArrayplotWidget-BHD-TGQO.cjs.map → ArrayplotWidget-J0xWFYsb.cjs.map} +1 -1
  9. package/dist/BarColumn-DrvHLEts.cjs +2 -0
  10. package/dist/BarColumn-DrvHLEts.cjs.map +1 -0
  11. package/dist/{BarColumn-DmjMnw5l.js → BarColumn-DwZmAe8g.js} +11 -9
  12. package/dist/BarColumn-DwZmAe8g.js.map +1 -0
  13. package/dist/{BlockWidget-BdR_HCVc.js → BlockWidget-BHtugveV.js} +14 -13
  14. package/dist/{BlockWidget-BdR_HCVc.js.map → BlockWidget-BHtugveV.js.map} +1 -1
  15. package/dist/{BlockWidget-Bi1PfS1k.cjs → BlockWidget-_HTXwzGu.cjs} +2 -2
  16. package/dist/{BlockWidget-Bi1PfS1k.cjs.map → BlockWidget-_HTXwzGu.cjs.map} +1 -1
  17. package/dist/ButtonWidget-C_4jUjbD.cjs +3 -0
  18. package/dist/ButtonWidget-C_4jUjbD.cjs.map +1 -0
  19. package/dist/{ButtonWidget-DZ4VCNWU.js → ButtonWidget-Cc9cYsg8.js} +7 -6
  20. package/dist/ButtonWidget-Cc9cYsg8.js.map +1 -0
  21. package/dist/{CanvasWidget-DTEx-DpZ.cjs → CanvasWidget-98hvMkWl.cjs} +2 -2
  22. package/dist/{CanvasWidget-DTEx-DpZ.cjs.map → CanvasWidget-98hvMkWl.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-DuXOo3jG.js → CanvasWidget-Bn70gBcc.js} +2 -2
  24. package/dist/{CanvasWidget-DuXOo3jG.js.map → CanvasWidget-Bn70gBcc.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-bbOquK8B.cjs → CanvasdotWidget-6s1Kzzoj.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-bbOquK8B.cjs.map → CanvasdotWidget-6s1Kzzoj.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-WoLpxI1u.js → CanvasdotWidget-CMROfW3O.js} +2 -2
  28. package/dist/{CanvasdotWidget-WoLpxI1u.js.map → CanvasdotWidget-CMROfW3O.js.map} +1 -1
  29. package/dist/{CanvasimageWidget-tWpK5rsv.js → CanvasimageWidget-BpM05v_m.js} +3 -3
  30. package/dist/{CanvasimageWidget-tWpK5rsv.js.map → CanvasimageWidget-BpM05v_m.js.map} +1 -1
  31. package/dist/{CanvasimageWidget-D2EqsK7w.cjs → CanvasimageWidget-Du_TULyr.cjs} +2 -2
  32. package/dist/{CanvasimageWidget-D2EqsK7w.cjs.map → CanvasimageWidget-Du_TULyr.cjs.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-By_DiQ75.cjs → CanvasimagevalueWidget-DUiZEzwq.cjs} +2 -2
  34. package/dist/{CanvasimagevalueWidget-By_DiQ75.cjs.map → CanvasimagevalueWidget-DUiZEzwq.cjs.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-BVzJYz3l.js → CanvasimagevalueWidget-E6G93iGc.js} +3 -3
  36. package/dist/{CanvasimagevalueWidget-BVzJYz3l.js.map → CanvasimagevalueWidget-E6G93iGc.js.map} +1 -1
  37. package/dist/{CanvaslabelWidget-CDFf8Vll.js → CanvaslabelWidget-C074R2Fy.js} +2 -2
  38. package/dist/{CanvaslabelWidget-CDFf8Vll.js.map → CanvaslabelWidget-C074R2Fy.js.map} +1 -1
  39. package/dist/{CanvaslabelWidget-DiPxyXoX.cjs → CanvaslabelWidget-C7K2dtNN.cjs} +2 -2
  40. package/dist/{CanvaslabelWidget-DiPxyXoX.cjs.map → CanvaslabelWidget-C7K2dtNN.cjs.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-DzJKD6qs.js → CanvaslabelvalueWidget-B0nJeS4X.js} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-DzJKD6qs.js.map → CanvaslabelvalueWidget-B0nJeS4X.js.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-Cw5CCQTi.cjs → CanvaslabelvalueWidget-BuayHPZu.cjs} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-Cw5CCQTi.cjs.map → CanvaslabelvalueWidget-BuayHPZu.cjs.map} +1 -1
  45. package/dist/{CanvaslineWidget-BttTXCZq.js → CanvaslineWidget-CxnNAqOX.js} +2 -2
  46. package/dist/{CanvaslineWidget-BttTXCZq.js.map → CanvaslineWidget-CxnNAqOX.js.map} +1 -1
  47. package/dist/{CanvaslineWidget-BECtKTPL.cjs → CanvaslineWidget-DaBwCmSV.cjs} +2 -2
  48. package/dist/{CanvaslineWidget-BECtKTPL.cjs.map → CanvaslineWidget-DaBwCmSV.cjs.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-i6G0JfnZ.js → CanvaslinevalueWidget-BwfFyCwH.js} +2 -2
  50. package/dist/{CanvaslinevalueWidget-i6G0JfnZ.js.map → CanvaslinevalueWidget-BwfFyCwH.js.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-5duJ98qu.cjs → CanvaslinevalueWidget-xSHdgNCO.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-5duJ98qu.cjs.map → CanvaslinevalueWidget-xSHdgNCO.cjs.map} +1 -1
  53. package/dist/{CheckbuttonWidget-CTMObPhX.cjs → CheckbuttonWidget-Bey7tHx-.cjs} +2 -2
  54. package/dist/{CheckbuttonWidget-CTMObPhX.cjs.map → CheckbuttonWidget-Bey7tHx-.cjs.map} +1 -1
  55. package/dist/{CheckbuttonWidget-18jtf7sh.js → CheckbuttonWidget-yAm10oX0.js} +2 -2
  56. package/dist/{CheckbuttonWidget-18jtf7sh.js.map → CheckbuttonWidget-yAm10oX0.js.map} +1 -1
  57. package/dist/{ClassificationBanners-BmnQODLn.js → ClassificationBanners-DxpE_iPX.js} +2 -2
  58. package/dist/{ClassificationBanners-BmnQODLn.js.map → ClassificationBanners-DxpE_iPX.js.map} +1 -1
  59. package/dist/ClassificationBanners-xG4DOlqJ.cjs +2 -0
  60. package/dist/{ClassificationBanners-DjGCuH-4.cjs.map → ClassificationBanners-xG4DOlqJ.cjs.map} +1 -1
  61. package/dist/{ComboboxWidget-BjaVFbD4.js → ComboboxWidget-BnWksnnp.js} +2 -2
  62. package/dist/{ComboboxWidget-BjaVFbD4.js.map → ComboboxWidget-BnWksnnp.js.map} +1 -1
  63. package/dist/{ComboboxWidget-Cc0Acq9q.cjs → ComboboxWidget-Mh6axKMv.cjs} +2 -2
  64. package/dist/{ComboboxWidget-Cc0Acq9q.cjs.map → ComboboxWidget-Mh6axKMv.cjs.map} +1 -1
  65. package/dist/{CriticalCmdDialog-CO-nvphS.js → CriticalCmdDialog-D0fIp8Tq.js} +24 -23
  66. package/dist/{CriticalCmdDialog-CO-nvphS.js.map → CriticalCmdDialog-D0fIp8Tq.js.map} +1 -1
  67. package/dist/CriticalCmdDialog-DJ3FWL0_.cjs +2 -0
  68. package/dist/{CriticalCmdDialog-eytxCQto.cjs.map → CriticalCmdDialog-DJ3FWL0_.cjs.map} +1 -1
  69. package/dist/{DateWidget-DkFAFlc8.js → DateWidget-CAiG2FIl.js} +9 -8
  70. package/dist/{DateWidget-DkFAFlc8.js.map → DateWidget-CAiG2FIl.js.map} +1 -1
  71. package/dist/DateWidget-DUYYp-Yx.cjs +2 -0
  72. package/dist/{DateWidget-Cle8FY8Q.cjs.map → DateWidget-DUYYp-Yx.cjs.map} +1 -1
  73. package/dist/DetailsDialog-D3iPUi8b.cjs +2 -0
  74. package/dist/{DetailsDialog-BcMaTfuQ.cjs.map → DetailsDialog-D3iPUi8b.cjs.map} +1 -1
  75. package/dist/{DetailsDialog-sqja4Lzq.js → DetailsDialog-q5SDzw3R.js} +72 -71
  76. package/dist/{DetailsDialog-sqja4Lzq.js.map → DetailsDialog-q5SDzw3R.js.map} +1 -1
  77. package/dist/EventListDialog-1RsuuLHZ.cjs +2 -0
  78. package/dist/EventListDialog-1RsuuLHZ.cjs.map +1 -0
  79. package/dist/{EventListDialog-DjCQAwGl.js → EventListDialog-HuEtOu3k.js} +61 -58
  80. package/dist/EventListDialog-HuEtOu3k.js.map +1 -0
  81. package/dist/FilechecksumWidget-ByVrYgzI.cjs +2 -0
  82. package/dist/{FilechecksumWidget-2ta-UvLp.cjs.map → FilechecksumWidget-ByVrYgzI.cjs.map} +1 -1
  83. package/dist/{FilechecksumWidget-DqJ_hvN4.js → FilechecksumWidget-DeW9wy5d.js} +9 -9
  84. package/dist/{FilechecksumWidget-DqJ_hvN4.js.map → FilechecksumWidget-DeW9wy5d.js.map} +1 -1
  85. package/dist/{FiledisplayWidget-CYznG_tf.js → FiledisplayWidget-C_zPFu2E.js} +7 -6
  86. package/dist/{FiledisplayWidget-CYznG_tf.js.map → FiledisplayWidget-C_zPFu2E.js.map} +1 -1
  87. package/dist/FiledisplayWidget-hYmg981k.cjs +2 -0
  88. package/dist/{FiledisplayWidget-BUKXIQir.cjs.map → FiledisplayWidget-hYmg981k.cjs.map} +1 -1
  89. package/dist/{FormatvalueWidget-BpFXnA_U.cjs → FormatvalueWidget-7VD_kwxB.cjs} +2 -2
  90. package/dist/{FormatvalueWidget-BpFXnA_U.cjs.map → FormatvalueWidget-7VD_kwxB.cjs.map} +1 -1
  91. package/dist/{FormatvalueWidget-BnVu4YGx.js → FormatvalueWidget-BrvPWwfN.js} +3 -3
  92. package/dist/{FormatvalueWidget-BnVu4YGx.js.map → FormatvalueWidget-BrvPWwfN.js.map} +1 -1
  93. package/dist/{Graph-CUFzx8Ti.js → Graph-BCvaO4yI.js} +45 -38
  94. package/dist/Graph-BCvaO4yI.js.map +1 -0
  95. package/dist/Graph-BUqdz6gu.cjs +2 -0
  96. package/dist/Graph-BUqdz6gu.cjs.map +1 -0
  97. package/dist/GraphWidget-BdP0xM_P.cjs +2 -0
  98. package/dist/{GraphWidget-BvCQHVxQ.cjs.map → GraphWidget-BdP0xM_P.cjs.map} +1 -1
  99. package/dist/{GraphWidget-DO5XbOGy.js → GraphWidget-QS-VJoes.js} +26 -31
  100. package/dist/{GraphWidget-DO5XbOGy.js.map → GraphWidget-QS-VJoes.js.map} +1 -1
  101. package/dist/{HorizontalWidget-BBQE-dP-.cjs → HorizontalWidget-B9j7DG2Q.cjs} +2 -2
  102. package/dist/{HorizontalWidget-BBQE-dP-.cjs.map → HorizontalWidget-B9j7DG2Q.cjs.map} +1 -1
  103. package/dist/{HorizontalWidget-BA9PiP3d.js → HorizontalWidget-cFSsdChw.js} +2 -2
  104. package/dist/{HorizontalWidget-BA9PiP3d.js.map → HorizontalWidget-cFSsdChw.js.map} +1 -1
  105. package/dist/{HorizontalboxWidget-CX7J8RdA.cjs → HorizontalboxWidget-C3zHRO9h.cjs} +2 -2
  106. package/dist/{HorizontalboxWidget-CX7J8RdA.cjs.map → HorizontalboxWidget-C3zHRO9h.cjs.map} +1 -1
  107. package/dist/{HorizontalboxWidget-B-7HOqgl.js → HorizontalboxWidget-CKA7rLGd.js} +5 -5
  108. package/dist/{HorizontalboxWidget-B-7HOqgl.js.map → HorizontalboxWidget-CKA7rLGd.js.map} +1 -1
  109. package/dist/{HorizontallineWidget-D-o9MGo0.js → HorizontallineWidget-BqbLK0zc.js} +2 -2
  110. package/dist/{HorizontallineWidget-D-o9MGo0.js.map → HorizontallineWidget-BqbLK0zc.js.map} +1 -1
  111. package/dist/{HorizontallineWidget-odTFoB8u.cjs → HorizontallineWidget-GGNFIo1N.cjs} +2 -2
  112. package/dist/{HorizontallineWidget-odTFoB8u.cjs.map → HorizontallineWidget-GGNFIo1N.cjs.map} +1 -1
  113. package/dist/{IframeWidget-BzOka-fX.js → IframeWidget-CITX8Es1.js} +2 -2
  114. package/dist/{IframeWidget-BzOka-fX.js.map → IframeWidget-CITX8Es1.js.map} +1 -1
  115. package/dist/{IframeWidget-cTHu_Rmp.cjs → IframeWidget-lK6Cw1Pp.cjs} +2 -2
  116. package/dist/{IframeWidget-cTHu_Rmp.cjs.map → IframeWidget-lK6Cw1Pp.cjs.map} +1 -1
  117. package/dist/ImageLoader-CkTaGfCC.cjs +2 -0
  118. package/dist/{ImageLoader-BTEOukIw.cjs.map → ImageLoader-CkTaGfCC.cjs.map} +1 -1
  119. package/dist/{ImageLoader-CstmWFM4.js → ImageLoader-DQV_11Vd.js} +2 -2
  120. package/dist/{ImageLoader-CstmWFM4.js.map → ImageLoader-DQV_11Vd.js.map} +1 -1
  121. package/dist/{ImageviewerWidget-BA9uOM1q.js → ImageviewerWidget-BIsSA7KD.js} +2 -2
  122. package/dist/{ImageviewerWidget-BA9uOM1q.js.map → ImageviewerWidget-BIsSA7KD.js.map} +1 -1
  123. package/dist/{ImageviewerWidget-CLAFwmaB.cjs → ImageviewerWidget-CvbsaXCd.cjs} +2 -2
  124. package/dist/{ImageviewerWidget-CLAFwmaB.cjs.map → ImageviewerWidget-CvbsaXCd.cjs.map} +1 -1
  125. package/dist/InterfacesTab-Cfvks-ms.cjs +2 -0
  126. package/dist/{InterfacesTab-CM0CGFVS.cjs.map → InterfacesTab-Cfvks-ms.cjs.map} +1 -1
  127. package/dist/{InterfacesTab-C3mDLkGC.js → InterfacesTab-twne_Qp4.js} +11 -10
  128. package/dist/{InterfacesTab-C3mDLkGC.js.map → InterfacesTab-twne_Qp4.js.map} +1 -1
  129. package/dist/{LabelWidget-CMmVq1mx.cjs → LabelWidget-BFWd6Vgh.cjs} +2 -2
  130. package/dist/{LabelWidget-CMmVq1mx.cjs.map → LabelWidget-BFWd6Vgh.cjs.map} +1 -1
  131. package/dist/{LabelWidget-Da2howZF.js → LabelWidget-FQI-cH_A.js} +2 -2
  132. package/dist/{LabelWidget-Da2howZF.js.map → LabelWidget-FQI-cH_A.js.map} +1 -1
  133. package/dist/{LabelledWidget-CAqH0oWs.cjs → LabelledWidget-AZifUp-f.cjs} +2 -2
  134. package/dist/{LabelledWidget-CAqH0oWs.cjs.map → LabelledWidget-AZifUp-f.cjs.map} +1 -1
  135. package/dist/{LabelledWidget-BH8y3OXT.js → LabelledWidget-KGXtQ4Zb.js} +4 -4
  136. package/dist/{LabelledWidget-BH8y3OXT.js.map → LabelledWidget-KGXtQ4Zb.js.map} +1 -1
  137. package/dist/{LabelprogressbarWidget-Brl24F4c.js → LabelprogressbarWidget-72WyzD_Q.js} +4 -4
  138. package/dist/{LabelprogressbarWidget-Brl24F4c.js.map → LabelprogressbarWidget-72WyzD_Q.js.map} +1 -1
  139. package/dist/{LabelprogressbarWidget-BxLGmW9T.cjs → LabelprogressbarWidget-Bd2E9G7V.cjs} +2 -2
  140. package/dist/{LabelprogressbarWidget-BxLGmW9T.cjs.map → LabelprogressbarWidget-Bd2E9G7V.cjs.map} +1 -1
  141. package/dist/{LabelsparklineWidget-D22MB7-4.js → LabelsparklineWidget-DtWNf4mK.js} +4 -4
  142. package/dist/{LabelsparklineWidget-D22MB7-4.js.map → LabelsparklineWidget-DtWNf4mK.js.map} +1 -1
  143. package/dist/{LabelsparklineWidget-BUXOpBeB.cjs → LabelsparklineWidget-__3CB0T-.cjs} +2 -2
  144. package/dist/{LabelsparklineWidget-BUXOpBeB.cjs.map → LabelsparklineWidget-__3CB0T-.cjs.map} +1 -1
  145. package/dist/LabelvalueWidget-B681T0uR.cjs +2 -0
  146. package/dist/LabelvalueWidget-B681T0uR.cjs.map +1 -0
  147. package/dist/{LabelvalueWidget-_1JPbK-K.js → LabelvalueWidget-D_JLdY7r.js} +11 -12
  148. package/dist/LabelvalueWidget-D_JLdY7r.js.map +1 -0
  149. package/dist/LabelvaluedescWidget-BppM5vGp.js +64 -0
  150. package/dist/LabelvaluedescWidget-BppM5vGp.js.map +1 -0
  151. package/dist/LabelvaluedescWidget-CiGIPdMG.cjs +2 -0
  152. package/dist/LabelvaluedescWidget-CiGIPdMG.cjs.map +1 -0
  153. package/dist/{LabelvaluelimitsbarWidget-C9PlEhWo.js → LabelvaluelimitsbarWidget-B69ogLif.js} +4 -4
  154. package/dist/{LabelvaluelimitsbarWidget-C9PlEhWo.js.map → LabelvaluelimitsbarWidget-B69ogLif.js.map} +1 -1
  155. package/dist/{LabelvaluelimitsbarWidget-BGag8V6k.cjs → LabelvaluelimitsbarWidget-Cmb4kGcv.cjs} +2 -2
  156. package/dist/{LabelvaluelimitsbarWidget-BGag8V6k.cjs.map → LabelvaluelimitsbarWidget-Cmb4kGcv.cjs.map} +1 -1
  157. package/dist/{LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs → LabelvaluelimitscolumnWidget-BXdmh9So.cjs} +2 -2
  158. package/dist/{LabelvaluelimitscolumnWidget-SHVJIgGJ.cjs.map → LabelvaluelimitscolumnWidget-BXdmh9So.cjs.map} +1 -1
  159. package/dist/{LabelvaluelimitscolumnWidget-Cay6AhoZ.js → LabelvaluelimitscolumnWidget-DPYwFdgq.js} +5 -5
  160. package/dist/{LabelvaluelimitscolumnWidget-Cay6AhoZ.js.map → LabelvaluelimitscolumnWidget-DPYwFdgq.js.map} +1 -1
  161. package/dist/{LabelvaluerangebarWidget-s_8IgY-C.js → LabelvaluerangebarWidget-BT0BcOoK.js} +4 -4
  162. package/dist/{LabelvaluerangebarWidget-s_8IgY-C.js.map → LabelvaluerangebarWidget-BT0BcOoK.js.map} +1 -1
  163. package/dist/{LabelvaluerangebarWidget-Dbibpimv.cjs → LabelvaluerangebarWidget-cavgscEk.cjs} +2 -2
  164. package/dist/{LabelvaluerangebarWidget-Dbibpimv.cjs.map → LabelvaluerangebarWidget-cavgscEk.cjs.map} +1 -1
  165. package/dist/{Layout-DwWEea79.cjs → Layout-D1ukrMwN.cjs} +2 -2
  166. package/dist/{Layout-DwWEea79.cjs.map → Layout-D1ukrMwN.cjs.map} +1 -1
  167. package/dist/{Layout-D7RGn0Fe.js → Layout-d-vb0okO.js} +2 -2
  168. package/dist/{Layout-D7RGn0Fe.js.map → Layout-d-vb0okO.js.map} +1 -1
  169. package/dist/{LedWidget-DgMtvsiv.js → LedWidget-Cmr6eVG2.js} +7 -6
  170. package/dist/{LedWidget-DgMtvsiv.js.map → LedWidget-Cmr6eVG2.js.map} +1 -1
  171. package/dist/LedWidget-Dwrm6hTX.cjs +2 -0
  172. package/dist/{LedWidget-BaiKDozd.cjs.map → LedWidget-Dwrm6hTX.cjs.map} +1 -1
  173. package/dist/{LimitsBar-BFM38vQL.cjs → LimitsBar-Dz1lZ_81.cjs} +2 -2
  174. package/dist/{LimitsBar-BFM38vQL.cjs.map → LimitsBar-Dz1lZ_81.cjs.map} +1 -1
  175. package/dist/{LimitsBar-CcOaAw0C.js → LimitsBar-qMynDHYT.js} +2 -2
  176. package/dist/{LimitsBar-CcOaAw0C.js.map → LimitsBar-qMynDHYT.js.map} +1 -1
  177. package/dist/{LimitsbarWidget-DpmJn1Lo.js → LimitsbarWidget-CMvcwa-m.js} +3 -3
  178. package/dist/{LimitsbarWidget-DpmJn1Lo.js.map → LimitsbarWidget-CMvcwa-m.js.map} +1 -1
  179. package/dist/{LimitsbarWidget-ConP3qI5.cjs → LimitsbarWidget-vIP9AUk4.cjs} +2 -2
  180. package/dist/{LimitsbarWidget-ConP3qI5.cjs.map → LimitsbarWidget-vIP9AUk4.cjs.map} +1 -1
  181. package/dist/LimitscolorWidget-CPuknJPk.cjs +2 -0
  182. package/dist/{LimitscolorWidget-veWQ4NXl.cjs.map → LimitscolorWidget-CPuknJPk.cjs.map} +1 -1
  183. package/dist/{LimitscolorWidget-BMXiEaDm.js → LimitscolorWidget-CZ9wMtcI.js} +7 -6
  184. package/dist/{LimitscolorWidget-BMXiEaDm.js.map → LimitscolorWidget-CZ9wMtcI.js.map} +1 -1
  185. package/dist/{LimitscolumnWidget-CJABAor8.cjs → LimitscolumnWidget-r-nOETY5.cjs} +2 -2
  186. package/dist/{LimitscolumnWidget-CJABAor8.cjs.map → LimitscolumnWidget-r-nOETY5.cjs.map} +1 -1
  187. package/dist/{LimitscolumnWidget-ufFMz6R-.js → LimitscolumnWidget-r84KJGU-.js} +2 -2
  188. package/dist/{LimitscolumnWidget-ufFMz6R-.js.map → LimitscolumnWidget-r84KJGU-.js.map} +1 -1
  189. package/dist/LinegraphWidget-BMUI8q6Q.cjs +2 -0
  190. package/dist/{LinegraphWidget-3E8L5CvM.cjs.map → LinegraphWidget-BMUI8q6Q.cjs.map} +1 -1
  191. package/dist/{LinegraphWidget-BC2wVOny.js → LinegraphWidget-COGBGOjF.js} +10 -9
  192. package/dist/{LinegraphWidget-BC2wVOny.js.map → LinegraphWidget-COGBGOjF.js.map} +1 -1
  193. package/dist/{MatrixbycolumnsWidget-DICgiNQo.cjs → MatrixbycolumnsWidget-BoNbbrEi.cjs} +2 -2
  194. package/dist/{MatrixbycolumnsWidget-DICgiNQo.cjs.map → MatrixbycolumnsWidget-BoNbbrEi.cjs.map} +1 -1
  195. package/dist/{MatrixbycolumnsWidget-DfUAeBnO.js → MatrixbycolumnsWidget-Dx2iz0YF.js} +3 -3
  196. package/dist/{MatrixbycolumnsWidget-DfUAeBnO.js.map → MatrixbycolumnsWidget-Dx2iz0YF.js.map} +1 -1
  197. package/dist/{MicroservicesTab-B0SZVty3.js → MicroservicesTab-Bhsf1soi.js} +12 -11
  198. package/dist/{MicroservicesTab-B0SZVty3.js.map → MicroservicesTab-Bhsf1soi.js.map} +1 -1
  199. package/dist/{MicroservicesTab-snXJDoYq.cjs → MicroservicesTab-Cuj56g8-.cjs} +3 -3
  200. package/dist/{MicroservicesTab-snXJDoYq.cjs.map → MicroservicesTab-Cuj56g8-.cjs.map} +1 -1
  201. package/dist/{OpenC3TimePicker-DpkbfbgC.js → OpenC3TimePicker-C3vCnk72.js} +20 -24
  202. package/dist/OpenC3TimePicker-C3vCnk72.js.map +1 -0
  203. package/dist/OpenC3TimePicker-CVUV2cK4.cjs +2 -0
  204. package/dist/OpenC3TimePicker-CVUV2cK4.cjs.map +1 -0
  205. package/dist/Openc3Screen-Bi6NOEQM.cjs +6 -0
  206. package/dist/{Openc3Screen-D1RLlBgQ.cjs.map → Openc3Screen-Bi6NOEQM.cjs.map} +1 -1
  207. package/dist/{Openc3Screen-DbUvz-3B.js → Openc3Screen-DkhDra2o.js} +67 -66
  208. package/dist/{Openc3Screen-DbUvz-3B.js.map → Openc3Screen-DkhDra2o.js.map} +1 -1
  209. package/dist/{OutputDialog-Ds-GdGyI.js → OutputDialog-D0ifesTw.js} +11 -10
  210. package/dist/{OutputDialog-Ds-GdGyI.js.map → OutputDialog-D0ifesTw.js.map} +1 -1
  211. package/dist/OutputDialog-DR9cJem2.cjs +2 -0
  212. package/dist/{OutputDialog-ChPCaQAE.cjs.map → OutputDialog-DR9cJem2.cjs.map} +1 -1
  213. package/dist/PackagesTab-B4sG5tHo.cjs +2 -0
  214. package/dist/{PackagesTab-BgQsbXRo.cjs.map → PackagesTab-B4sG5tHo.cjs.map} +1 -1
  215. package/dist/{PackagesTab-CWplBp_I.js → PackagesTab-Bb221-aM.js} +19 -18
  216. package/dist/{PackagesTab-CWplBp_I.js.map → PackagesTab-Bb221-aM.js.map} +1 -1
  217. package/dist/PluginsTab-Cbi_R9jL.cjs +6 -0
  218. package/dist/PluginsTab-Cbi_R9jL.cjs.map +1 -0
  219. package/dist/{PluginsTab-BiiL622n.js → PluginsTab-nWngR5kY.js} +275 -234
  220. package/dist/PluginsTab-nWngR5kY.js.map +1 -0
  221. package/dist/{ProgressbarWidget-D3ndYnq_.js → ProgressbarWidget-DPbAVjdC.js} +2 -2
  222. package/dist/{ProgressbarWidget-D3ndYnq_.js.map → ProgressbarWidget-DPbAVjdC.js.map} +1 -1
  223. package/dist/{ProgressbarWidget-DludJVUf.cjs → ProgressbarWidget-cPr3o6Nv.cjs} +2 -2
  224. package/dist/{ProgressbarWidget-DludJVUf.cjs.map → ProgressbarWidget-cPr3o6Nv.cjs.map} +1 -1
  225. package/dist/{RadiobuttonWidget-DX4h94p1.cjs → RadiobuttonWidget-BQZkRFa-.cjs} +2 -2
  226. package/dist/{RadiobuttonWidget-DX4h94p1.cjs.map → RadiobuttonWidget-BQZkRFa-.cjs.map} +1 -1
  227. package/dist/{RadiobuttonWidget-CP0S9nWW.js → RadiobuttonWidget-iXI9yCDk.js} +2 -2
  228. package/dist/{RadiobuttonWidget-CP0S9nWW.js.map → RadiobuttonWidget-iXI9yCDk.js.map} +1 -1
  229. package/dist/{RadiogroupWidget-BXHfA21T.js → RadiogroupWidget-CMM_p1eA.js} +2 -2
  230. package/dist/{RadiogroupWidget-BXHfA21T.js.map → RadiogroupWidget-CMM_p1eA.js.map} +1 -1
  231. package/dist/{RadiogroupWidget-NqjBNUH6.cjs → RadiogroupWidget-D2iIQ5RU.cjs} +2 -2
  232. package/dist/{RadiogroupWidget-NqjBNUH6.cjs.map → RadiogroupWidget-D2iIQ5RU.cjs.map} +1 -1
  233. package/dist/{RangebarWidget-Bv2DqkPo.js → RangebarWidget-DJXGUHAc.js} +2 -2
  234. package/dist/{RangebarWidget-Bv2DqkPo.js.map → RangebarWidget-DJXGUHAc.js.map} +1 -1
  235. package/dist/{RangebarWidget-CRq2zpvw.cjs → RangebarWidget-DsphX-jB.cjs} +2 -2
  236. package/dist/{RangebarWidget-CRq2zpvw.cjs.map → RangebarWidget-DsphX-jB.cjs.map} +1 -1
  237. package/dist/RedisTab-BZtfqEcP.js +186 -0
  238. package/dist/RedisTab-BZtfqEcP.js.map +1 -0
  239. package/dist/RedisTab-KhsG2CCO.cjs +2 -0
  240. package/dist/RedisTab-KhsG2CCO.cjs.map +1 -0
  241. package/dist/{RollupWidget-o_huYU0x.js → RollupWidget-BbWLSsTT.js} +2 -2
  242. package/dist/{RollupWidget-o_huYU0x.js.map → RollupWidget-BbWLSsTT.js.map} +1 -1
  243. package/dist/{RollupWidget-B7_Q_boi.cjs → RollupWidget-w-SF3f-X.cjs} +2 -2
  244. package/dist/{RollupWidget-B7_Q_boi.cjs.map → RollupWidget-w-SF3f-X.cjs.map} +1 -1
  245. package/dist/{RoutersTab-DN17iBBi.js → RoutersTab-CLKIJ5cm.js} +13 -12
  246. package/dist/{RoutersTab-DN17iBBi.js.map → RoutersTab-CLKIJ5cm.js.map} +1 -1
  247. package/dist/RoutersTab-DUvOfNhU.cjs +2 -0
  248. package/dist/{RoutersTab-CAbnSGHy.cjs.map → RoutersTab-DUvOfNhU.cjs.map} +1 -1
  249. package/dist/{ScriptChooser-CzzUJ1Zj.js → ScriptChooser-BxTJKTVu.js} +20 -19
  250. package/dist/{ScriptChooser-CzzUJ1Zj.js.map → ScriptChooser-BxTJKTVu.js.map} +1 -1
  251. package/dist/ScriptChooser-YC_FfCLd.cjs +2 -0
  252. package/dist/{ScriptChooser-CggwstfT.cjs.map → ScriptChooser-YC_FfCLd.cjs.map} +1 -1
  253. package/dist/{ScrollwindowWidget-kS5QjP-v.cjs → ScrollwindowWidget-D1mtHFMa.cjs} +2 -2
  254. package/dist/{ScrollwindowWidget-kS5QjP-v.cjs.map → ScrollwindowWidget-D1mtHFMa.cjs.map} +1 -1
  255. package/dist/{ScrollwindowWidget-DdjaML6D.js → ScrollwindowWidget-Dxhp7yKn.js} +2 -2
  256. package/dist/{ScrollwindowWidget-DdjaML6D.js.map → ScrollwindowWidget-Dxhp7yKn.js.map} +1 -1
  257. package/dist/SecretsTab-B7oZb354.cjs +2 -0
  258. package/dist/{SecretsTab-Cn6-o85L.cjs.map → SecretsTab-B7oZb354.cjs.map} +1 -1
  259. package/dist/{SecretsTab-Cu3sx2OA.js → SecretsTab-BoBmTh63.js} +5 -5
  260. package/dist/{SecretsTab-Cu3sx2OA.js.map → SecretsTab-BoBmTh63.js.map} +1 -1
  261. package/dist/SettingsTab-2EMyS-3_.cjs +3 -0
  262. package/dist/{SettingsTab-C6zIL2D6.cjs.map → SettingsTab-2EMyS-3_.cjs.map} +1 -1
  263. package/dist/{SettingsTab-B_vvSLvt.js → SettingsTab-BL7gkaO9.js} +7 -6
  264. package/dist/{SettingsTab-B_vvSLvt.js.map → SettingsTab-BL7gkaO9.js.map} +1 -1
  265. package/dist/{SignalWidget-Dd54y28I.js → SignalWidget-65q0tiuo.js} +2 -2
  266. package/dist/{SignalWidget-Dd54y28I.js.map → SignalWidget-65q0tiuo.js.map} +1 -1
  267. package/dist/{SignalWidget-BagcB92r.cjs → SignalWidget-Cld2lVyc.cjs} +2 -2
  268. package/dist/{SignalWidget-BagcB92r.cjs.map → SignalWidget-Cld2lVyc.cjs.map} +1 -1
  269. package/dist/{SimpleTextDialog-DZv9n_kJ.js → SimpleTextDialog-ChmFtdVw.js} +2 -2
  270. package/dist/{SimpleTextDialog-DZv9n_kJ.js.map → SimpleTextDialog-ChmFtdVw.js.map} +1 -1
  271. package/dist/{SimpleTextDialog-BJ50TbWh.cjs → SimpleTextDialog-DVlqwD8O.cjs} +2 -2
  272. package/dist/{SimpleTextDialog-BJ50TbWh.cjs.map → SimpleTextDialog-DVlqwD8O.cjs.map} +1 -1
  273. package/dist/{SpacerWidget-GPFYtIG1.js → SpacerWidget-DFzbojmX.js} +2 -2
  274. package/dist/{SpacerWidget-GPFYtIG1.js.map → SpacerWidget-DFzbojmX.js.map} +1 -1
  275. package/dist/{SpacerWidget-DWjBns9r.cjs → SpacerWidget-DV0-ZfEm.cjs} +2 -2
  276. package/dist/{SpacerWidget-DWjBns9r.cjs.map → SpacerWidget-DV0-ZfEm.cjs.map} +1 -1
  277. package/dist/SparklineWidget-B1RfTxEp.cjs +2 -0
  278. package/dist/{SparklineWidget-xdPgolp3.cjs.map → SparklineWidget-B1RfTxEp.cjs.map} +1 -1
  279. package/dist/{SparklineWidget-f11nrlLS.js → SparklineWidget-Bu4I8zY0.js} +10 -9
  280. package/dist/{SparklineWidget-f11nrlLS.js.map → SparklineWidget-Bu4I8zY0.js.map} +1 -1
  281. package/dist/{TabbookWidget-DeaC27yC.js → TabbookWidget-CELMWyx7.js} +2 -2
  282. package/dist/{TabbookWidget-DeaC27yC.js.map → TabbookWidget-CELMWyx7.js.map} +1 -1
  283. package/dist/{TabbookWidget-CUIYWHRH.cjs → TabbookWidget-CLpx5e5Q.cjs} +2 -2
  284. package/dist/{TabbookWidget-CUIYWHRH.cjs.map → TabbookWidget-CLpx5e5Q.cjs.map} +1 -1
  285. package/dist/{TargetPacketItemChooser-BoBqvs3T.js → TargetPacketItemChooser-BOdVLVbe.js} +177 -153
  286. package/dist/TargetPacketItemChooser-BOdVLVbe.js.map +1 -0
  287. package/dist/TargetPacketItemChooser-xoRA3b9K.cjs +2 -0
  288. package/dist/TargetPacketItemChooser-xoRA3b9K.cjs.map +1 -0
  289. package/dist/{TargetsTab-CjVaBN9O.js → TargetsTab-BJZEtKY4.js} +11 -10
  290. package/dist/{TargetsTab-CjVaBN9O.js.map → TargetsTab-BJZEtKY4.js.map} +1 -1
  291. package/dist/TargetsTab-Dkp4VoK6.cjs +2 -0
  292. package/dist/{TargetsTab-BMcWjrZ_.cjs.map → TargetsTab-Dkp4VoK6.cjs.map} +1 -1
  293. package/dist/{TextboxWidget-tL41zWUX.js → TextboxWidget-DYsqXntS.js} +7 -6
  294. package/dist/{TextboxWidget-tL41zWUX.js.map → TextboxWidget-DYsqXntS.js.map} +1 -1
  295. package/dist/TextboxWidget-DuNmhz89.cjs +2 -0
  296. package/dist/{TextboxWidget-CXA9rR02.cjs.map → TextboxWidget-DuNmhz89.cjs.map} +1 -1
  297. package/dist/{TextfieldWidget-D1qj14Qi.js → TextfieldWidget-BIUgV9Q4.js} +2 -2
  298. package/dist/{TextfieldWidget-D1qj14Qi.js.map → TextfieldWidget-BIUgV9Q4.js.map} +1 -1
  299. package/dist/{TextfieldWidget-D-H2fOZG.cjs → TextfieldWidget-BlW-rSVv.cjs} +2 -2
  300. package/dist/{TextfieldWidget-D-H2fOZG.cjs.map → TextfieldWidget-BlW-rSVv.cjs.map} +1 -1
  301. package/dist/{TimeWidget-CSVGNong.js → TimeWidget-BPXcY1Wy.js} +7 -6
  302. package/dist/{TimeWidget-CSVGNong.js.map → TimeWidget-BPXcY1Wy.js.map} +1 -1
  303. package/dist/TimeWidget-BddmbQgt.cjs +2 -0
  304. package/dist/{TimeWidget-CGk8Ze_I.cjs.map → TimeWidget-BddmbQgt.cjs.map} +1 -1
  305. package/dist/{TitleWidget-ClhWhUf3.cjs → TitleWidget-CPqwZKUx.cjs} +2 -2
  306. package/dist/{TitleWidget-ClhWhUf3.cjs.map → TitleWidget-CPqwZKUx.cjs.map} +1 -1
  307. package/dist/{TitleWidget-CLx-tuYT.js → TitleWidget-DJ9mHRLE.js} +2 -2
  308. package/dist/{TitleWidget-CLx-tuYT.js.map → TitleWidget-DJ9mHRLE.js.map} +1 -1
  309. package/dist/ToolsTab-B4CURni4.cjs +2 -0
  310. package/dist/{ToolsTab-DTHap-Nq.cjs.map → ToolsTab-B4CURni4.cjs.map} +1 -1
  311. package/dist/{ToolsTab-lBB_KhmA.js → ToolsTab-VSCWDywf.js} +62 -61
  312. package/dist/{ToolsTab-lBB_KhmA.js.map → ToolsTab-VSCWDywf.js.map} +1 -1
  313. package/dist/{TopBar-C810rP_B.js → TopBar-B4oz2FsN.js} +2 -2
  314. package/dist/{TopBar-C810rP_B.js.map → TopBar-B4oz2FsN.js.map} +1 -1
  315. package/dist/{TopBar-Ctzx7o2k.cjs → TopBar-lcB6jpd_.cjs} +2 -2
  316. package/dist/{TopBar-Ctzx7o2k.cjs.map → TopBar-lcB6jpd_.cjs.map} +1 -1
  317. package/dist/TsdbTab-Cv8GjpoJ.js +1164 -0
  318. package/dist/TsdbTab-Cv8GjpoJ.js.map +1 -0
  319. package/dist/TsdbTab-OOO451j0.cjs +5 -0
  320. package/dist/TsdbTab-OOO451j0.cjs.map +1 -0
  321. package/dist/{UpgradeToEnterpriseDialog-D_S574Zb.js → UpgradeToEnterpriseDialog-BUuXsGPY.js} +2 -2
  322. package/dist/{UpgradeToEnterpriseDialog-D_S574Zb.js.map → UpgradeToEnterpriseDialog-BUuXsGPY.js.map} +1 -1
  323. package/dist/{UpgradeToEnterpriseDialog-XJb6gVCY.cjs → UpgradeToEnterpriseDialog-DHLK6v6f.cjs} +2 -2
  324. package/dist/{UpgradeToEnterpriseDialog-XJb6gVCY.cjs.map → UpgradeToEnterpriseDialog-DHLK6v6f.cjs.map} +1 -1
  325. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs +1477 -0
  326. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs.map +1 -0
  327. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js +26306 -0
  328. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js.map +1 -0
  329. package/dist/VWidget-B6WHN0_z.cjs +2 -0
  330. package/dist/VWidget-B6WHN0_z.cjs.map +1 -0
  331. package/dist/{VWidget-CxnaMF0w.js → VWidget-BDy0211S.js} +17 -20
  332. package/dist/VWidget-BDy0211S.js.map +1 -0
  333. package/dist/{ValueWidget-BYgpXfDo.js → ValueWidget-DzOSy7lp.js} +7 -6
  334. package/dist/{ValueWidget-BYgpXfDo.js.map → ValueWidget-DzOSy7lp.js.map} +1 -1
  335. package/dist/ValueWidget-QWzoEFXc.cjs +2 -0
  336. package/dist/{ValueWidget-Bws1qOEI.cjs.map → ValueWidget-QWzoEFXc.cjs.map} +1 -1
  337. package/dist/{ValuelimitsbarWidget-BoZSJvuq.cjs → ValuelimitsbarWidget-5AkAljK-.cjs} +2 -2
  338. package/dist/{ValuelimitsbarWidget-BoZSJvuq.cjs.map → ValuelimitsbarWidget-5AkAljK-.cjs.map} +1 -1
  339. package/dist/{ValuelimitsbarWidget-Dc9-VNZ3.js → ValuelimitsbarWidget-D5dSlW6D.js} +4 -4
  340. package/dist/{ValuelimitsbarWidget-Dc9-VNZ3.js.map → ValuelimitsbarWidget-D5dSlW6D.js.map} +1 -1
  341. package/dist/{ValuelimitscolumnWidget-b7W8K3mR.js → ValuelimitscolumnWidget-7DXCsVW_.js} +4 -4
  342. package/dist/{ValuelimitscolumnWidget-b7W8K3mR.js.map → ValuelimitscolumnWidget-7DXCsVW_.js.map} +1 -1
  343. package/dist/{ValuelimitscolumnWidget-ta9i_tiy.cjs → ValuelimitscolumnWidget-zNx9i1v7.cjs} +2 -2
  344. package/dist/{ValuelimitscolumnWidget-ta9i_tiy.cjs.map → ValuelimitscolumnWidget-zNx9i1v7.cjs.map} +1 -1
  345. package/dist/{ValuerangebarWidget-DmhczZQb.js → ValuerangebarWidget-BWjnpmyy.js} +4 -4
  346. package/dist/{ValuerangebarWidget-DmhczZQb.js.map → ValuerangebarWidget-BWjnpmyy.js.map} +1 -1
  347. package/dist/{ValuerangebarWidget-Ips-beG6.cjs → ValuerangebarWidget-EsdIz4oP.cjs} +2 -2
  348. package/dist/{ValuerangebarWidget-Ips-beG6.cjs.map → ValuerangebarWidget-EsdIz4oP.cjs.map} +1 -1
  349. package/dist/{VerticalWidget-BvsVh0Ob.js → VerticalWidget-BOtXAhxt.js} +2 -2
  350. package/dist/{VerticalWidget-BvsVh0Ob.js.map → VerticalWidget-BOtXAhxt.js.map} +1 -1
  351. package/dist/{VerticalWidget-BVt7QPjO.cjs → VerticalWidget-DVskS6fx.cjs} +2 -2
  352. package/dist/{VerticalWidget-BVt7QPjO.cjs.map → VerticalWidget-DVskS6fx.cjs.map} +1 -1
  353. package/dist/{VerticalboxWidget-CNoXT3YW.cjs → VerticalboxWidget-Bu4oHN2K.cjs} +2 -2
  354. package/dist/{VerticalboxWidget-CNoXT3YW.cjs.map → VerticalboxWidget-Bu4oHN2K.cjs.map} +1 -1
  355. package/dist/{VerticalboxWidget-ClTCDCQN.js → VerticalboxWidget-RAsXfGdI.js} +5 -5
  356. package/dist/{VerticalboxWidget-ClTCDCQN.js.map → VerticalboxWidget-RAsXfGdI.js.map} +1 -1
  357. package/dist/{Widget-DRhVdCLP.js → Widget-BDsgRxuV.js} +37 -14
  358. package/dist/{Widget-DRhVdCLP.js.map → Widget-BDsgRxuV.js.map} +1 -1
  359. package/dist/Widget-Ddu_kuTL.cjs +2 -0
  360. package/dist/{Widget-CB_BtOFw.cjs.map → Widget-Ddu_kuTL.cjs.map} +1 -1
  361. package/dist/{addMonths-Zggd7y6j.js → addMonths-BiRF9eDT.js} +2 -2
  362. package/dist/{addMonths-Zggd7y6j.js.map → addMonths-BiRF9eDT.js.map} +1 -1
  363. package/dist/{addMonths-BhOW2mOW.cjs → addMonths-Ds2ObZwt.cjs} +2 -2
  364. package/dist/{addMonths-BhOW2mOW.cjs.map → addMonths-Ds2ObZwt.cjs.map} +1 -1
  365. package/dist/components.cjs +2 -2
  366. package/dist/components.js +28 -28
  367. package/dist/format-D2pYLAIF.js +5896 -0
  368. package/dist/format-D2pYLAIF.js.map +1 -0
  369. package/dist/format-qjtPogBb.cjs +13 -0
  370. package/dist/format-qjtPogBb.cjs.map +1 -0
  371. package/dist/getDefaultOptions-DSMQojSA.cjs +2 -0
  372. package/dist/{getDefaultOptions-Cek5kGzE.cjs.map → getDefaultOptions-DSMQojSA.cjs.map} +1 -1
  373. package/dist/getDefaultOptions-v3X-F5jM.js +8 -0
  374. package/dist/{getDefaultOptions-xjgn1r-_.js.map → getDefaultOptions-v3X-F5jM.js.map} +1 -1
  375. package/dist/{index-GYAZJDxn.js → index-BJCQaZ7q.js} +63 -62
  376. package/dist/{index-GYAZJDxn.js.map → index-BJCQaZ7q.js.map} +1 -1
  377. package/dist/{index-CJcL4_a4.js → index-BjcgyMLV.js} +691 -633
  378. package/dist/index-BjcgyMLV.js.map +1 -0
  379. package/dist/{index-3sXOEKCU.cjs → index-CctPeecq.cjs} +5 -5
  380. package/dist/{index-3sXOEKCU.cjs.map → index-CctPeecq.cjs.map} +1 -1
  381. package/dist/index-_a-NnvKv.cjs +10 -0
  382. package/dist/index-_a-NnvKv.cjs.map +1 -0
  383. package/dist/{parse-BKTTGw2p.js → parse-Br4M7sX4.js} +3 -3
  384. package/dist/{parse-BKTTGw2p.js.map → parse-Br4M7sX4.js.map} +1 -1
  385. package/dist/{parse-DgZTYocC.cjs → parse-D8syXcjd.cjs} +2 -2
  386. package/dist/{parse-DgZTYocC.cjs.map → parse-D8syXcjd.cjs.map} +1 -1
  387. package/dist/plugins.cjs +1 -1
  388. package/dist/plugins.cjs.map +1 -1
  389. package/dist/plugins.js +1 -1
  390. package/dist/plugins.js.map +1 -1
  391. package/dist/purify.es-CehoGjrR.cjs +3 -0
  392. package/dist/purify.es-CehoGjrR.cjs.map +1 -0
  393. package/dist/purify.es-exIQuqhb.js +596 -0
  394. package/dist/purify.es-exIQuqhb.js.map +1 -0
  395. package/dist/settings-CWvCIKI4.cjs +2 -0
  396. package/dist/{settings-B0AhztTk.cjs.map → settings-CWvCIKI4.cjs.map} +1 -1
  397. package/dist/{settings-C2auUQwX.js → settings-Dvmurty6.js} +2 -2
  398. package/dist/{settings-C2auUQwX.js.map → settings-Dvmurty6.js.map} +1 -1
  399. package/dist/settingsCache-CGgEjlw3.js +28 -0
  400. package/dist/settingsCache-CGgEjlw3.js.map +1 -0
  401. package/dist/settingsCache-Dg7OMDJK.cjs +2 -0
  402. package/dist/settingsCache-Dg7OMDJK.cjs.map +1 -0
  403. package/dist/{timeFilters-CRNRsUsb.cjs → timeFilters-BtN2a5-O.cjs} +2 -2
  404. package/dist/{timeFilters-CRNRsUsb.cjs.map → timeFilters-BtN2a5-O.cjs.map} +1 -1
  405. package/dist/{timeFilters-DTOZtBlG.js → timeFilters-C1beMtAQ.js} +3 -3
  406. package/dist/{timeFilters-DTOZtBlG.js.map → timeFilters-C1beMtAQ.js.map} +1 -1
  407. package/dist/tools/admin.cjs +1 -1
  408. package/dist/tools/admin.js +1 -1
  409. package/dist/tools/base.cjs +1 -1
  410. package/dist/tools/base.cjs.map +1 -1
  411. package/dist/tools/base.js +51 -51
  412. package/dist/tools/calendar.cjs +1 -1
  413. package/dist/tools/calendar.js +1 -1
  414. package/dist/tools/scriptrunner.cjs +8 -8
  415. package/dist/tools/scriptrunner.cjs.map +1 -1
  416. package/dist/tools/scriptrunner.js +17 -17
  417. package/dist/tools/scriptrunner.js.map +1 -1
  418. package/dist/util.cjs +1 -1
  419. package/dist/util.js +11 -7
  420. package/dist/util.js.map +1 -1
  421. package/dist/vue-common.css +1 -1
  422. package/dist/widgets.cjs +1 -1
  423. package/dist/widgets.js +64 -64
  424. package/package.json +7 -7
  425. package/dist/ArrayplotWidget-BHD-TGQO.cjs +0 -2
  426. package/dist/BarColumn-DmjMnw5l.js.map +0 -1
  427. package/dist/BarColumn-Ym4P8YHC.cjs +0 -2
  428. package/dist/BarColumn-Ym4P8YHC.cjs.map +0 -1
  429. package/dist/ButtonWidget-70hNWuEy.cjs +0 -3
  430. package/dist/ButtonWidget-70hNWuEy.cjs.map +0 -1
  431. package/dist/ButtonWidget-DZ4VCNWU.js.map +0 -1
  432. package/dist/ClassificationBanners-DjGCuH-4.cjs +0 -2
  433. package/dist/CriticalCmdDialog-eytxCQto.cjs +0 -2
  434. package/dist/DateWidget-Cle8FY8Q.cjs +0 -2
  435. package/dist/DetailsDialog-BcMaTfuQ.cjs +0 -2
  436. package/dist/EventListDialog-DjCQAwGl.js.map +0 -1
  437. package/dist/EventListDialog-EmC7YW60.cjs +0 -2
  438. package/dist/EventListDialog-EmC7YW60.cjs.map +0 -1
  439. package/dist/FilechecksumWidget-2ta-UvLp.cjs +0 -2
  440. package/dist/FiledisplayWidget-BUKXIQir.cjs +0 -2
  441. package/dist/Graph-CUFzx8Ti.js.map +0 -1
  442. package/dist/Graph-qxF4224c.cjs +0 -2
  443. package/dist/Graph-qxF4224c.cjs.map +0 -1
  444. package/dist/GraphWidget-BvCQHVxQ.cjs +0 -2
  445. package/dist/ImageLoader-BTEOukIw.cjs +0 -2
  446. package/dist/InterfacesTab-CM0CGFVS.cjs +0 -2
  447. package/dist/LabelvalueWidget-_1JPbK-K.js.map +0 -1
  448. package/dist/LabelvalueWidget-bYqqgIGE.cjs +0 -2
  449. package/dist/LabelvalueWidget-bYqqgIGE.cjs.map +0 -1
  450. package/dist/LabelvaluedescWidget-B2dFZoDE.cjs +0 -2
  451. package/dist/LabelvaluedescWidget-B2dFZoDE.cjs.map +0 -1
  452. package/dist/LabelvaluedescWidget-BgduSJJb.js +0 -59
  453. package/dist/LabelvaluedescWidget-BgduSJJb.js.map +0 -1
  454. package/dist/LedWidget-BaiKDozd.cjs +0 -2
  455. package/dist/LimitscolorWidget-veWQ4NXl.cjs +0 -2
  456. package/dist/LinegraphWidget-3E8L5CvM.cjs +0 -2
  457. package/dist/OpenC3TimePicker-DpkbfbgC.js.map +0 -1
  458. package/dist/OpenC3TimePicker-Yl1jVi7p.cjs +0 -2
  459. package/dist/OpenC3TimePicker-Yl1jVi7p.cjs.map +0 -1
  460. package/dist/Openc3Screen-D1RLlBgQ.cjs +0 -6
  461. package/dist/OutputDialog-ChPCaQAE.cjs +0 -2
  462. package/dist/PackagesTab-BgQsbXRo.cjs +0 -2
  463. package/dist/PluginsTab-BiiL622n.js.map +0 -1
  464. package/dist/PluginsTab-RgIMk-F7.cjs +0 -6
  465. package/dist/PluginsTab-RgIMk-F7.cjs.map +0 -1
  466. package/dist/RedisTab-7TbOXFA_.js +0 -171
  467. package/dist/RedisTab-7TbOXFA_.js.map +0 -1
  468. package/dist/RedisTab-DpWPY1P0.cjs +0 -2
  469. package/dist/RedisTab-DpWPY1P0.cjs.map +0 -1
  470. package/dist/RoutersTab-CAbnSGHy.cjs +0 -2
  471. package/dist/ScriptChooser-CggwstfT.cjs +0 -2
  472. package/dist/SecretsTab-Cn6-o85L.cjs +0 -2
  473. package/dist/SettingsTab-C6zIL2D6.cjs +0 -3
  474. package/dist/SparklineWidget-xdPgolp3.cjs +0 -2
  475. package/dist/TargetPacketItemChooser-BoBqvs3T.js.map +0 -1
  476. package/dist/TargetPacketItemChooser-C0Z90rss.cjs +0 -2
  477. package/dist/TargetPacketItemChooser-C0Z90rss.cjs.map +0 -1
  478. package/dist/TargetsTab-BMcWjrZ_.cjs +0 -2
  479. package/dist/TextboxWidget-CXA9rR02.cjs +0 -2
  480. package/dist/TimeWidget-CGk8Ze_I.cjs +0 -2
  481. package/dist/ToolsTab-DTHap-Nq.cjs +0 -2
  482. package/dist/TsdbTab-7F4mRKDo.js +0 -125
  483. package/dist/TsdbTab-7F4mRKDo.js.map +0 -1
  484. package/dist/TsdbTab-DVF6n9mq.cjs +0 -2
  485. package/dist/TsdbTab-DVF6n9mq.cjs.map +0 -1
  486. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js +0 -30891
  487. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js.map +0 -1
  488. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs +0 -1485
  489. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs.map +0 -1
  490. package/dist/VWidget-CxnaMF0w.js.map +0 -1
  491. package/dist/VWidget-dEHSEvZx.cjs +0 -2
  492. package/dist/VWidget-dEHSEvZx.cjs.map +0 -1
  493. package/dist/ValueWidget-Bws1qOEI.cjs +0 -2
  494. package/dist/Widget-CB_BtOFw.cjs +0 -2
  495. package/dist/format-CJYjW-xx.js +0 -1252
  496. package/dist/format-CJYjW-xx.js.map +0 -1
  497. package/dist/format-DOZQNf-X.cjs +0 -2
  498. package/dist/format-DOZQNf-X.cjs.map +0 -1
  499. package/dist/getDefaultOptions-Cek5kGzE.cjs +0 -2
  500. package/dist/getDefaultOptions-xjgn1r-_.js +0 -8
  501. package/dist/index-B34azWgs.cjs +0 -7
  502. package/dist/index-B34azWgs.cjs.map +0 -1
  503. package/dist/index-CJcL4_a4.js.map +0 -1
  504. package/dist/purify.es-4pyphLiB.cjs +0 -3
  505. package/dist/purify.es-4pyphLiB.cjs.map +0 -1
  506. package/dist/purify.es-BPDBzHtc.js +0 -553
  507. package/dist/purify.es-BPDBzHtc.js.map +0 -1
  508. package/dist/settings-B0AhztTk.cjs +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TsdbTab-Cv8GjpoJ.js","sources":["../src/tools/admin/tabs/tsdb/RepairGapDialog.vue","../src/tools/admin/tabs/tsdb/tsdbApi.js","../src/tools/admin/tabs/tsdb/TsdbMetrics.vue","../src/tools/admin/tabs/tsdb/TsdbQueries.vue","../src/tools/admin/tabs/TsdbTab.vue"],"sourcesContent":["<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog :model-value=\"modelValue\" max-width=\"900\" persistent>\n <v-card>\n <v-card-title class=\"d-flex align-center\">\n Repair Gap: {{ context.target }} {{ context.packet }}\n </v-card-title>\n <v-card-subtitle v-if=\"context.gap\">\n {{ context.gap.start }} &mdash; {{ context.gap.end }} ({{\n context.gap.duration\n }})\n </v-card-subtitle>\n\n <v-card-text style=\"max-height: 75vh; overflow-y: auto\">\n <div v-if=\"errorMessage\" class=\"text-red monospace mb-4\">\n Error: {{ errorMessage }}\n </div>\n\n <!-- Candidate listing phase -->\n <template v-if=\"!jobId\">\n <div v-if=\"loadingCandidates\" class=\"d-flex align-center mb-4\">\n <v-progress-circular indeterminate size=\"24\" class=\"mr-3\" />\n Searching bucket for raw log files that cover this gap…\n </div>\n\n <template v-else>\n <div v-if=\"candidates.length === 0\" class=\"text-medium-emphasis\">\n No raw log files cover this gap window. Reingest is not available\n &mdash; the data may have been written from a source that skipped\n raw logging, or the logs have been deleted.\n </div>\n\n <template v-else>\n <div class=\"mb-2\">\n {{ candidates.length }} raw log file(s) overlap this window.\n Select which to reingest:\n </div>\n <v-data-table\n v-model=\"selectedKeys\"\n :headers=\"candidateHeaders\"\n :items=\"candidates\"\n item-value=\"key\"\n show-select\n class=\"monospace\"\n :items-per-page=\"20\"\n density=\"compact\"\n data-test=\"repair-candidates\"\n />\n\n <div class=\"mt-4\">\n <div class=\"text-subtitle-2 font-weight-bold mb-1\">\n Target Definition Version\n </div>\n <v-radio-group\n v-model=\"targetVersion\"\n hide-details\n density=\"compact\"\n data-test=\"repair-version\"\n >\n <v-radio\n value=\"as_logged\"\n data-test=\"repair-version-as-logged\"\n >\n <template #label>\n <div style=\"padding-left: 10px\">\n <div>As logged (default)</div>\n <div class=\"text-caption text-medium-emphasis\">\n Decode each file with the cmd/tlm definition that was\n in effect when the data was originally logged. Safest\n for historical fidelity — preserves packet layouts as\n they existed at that time.\n </div>\n <div class=\"text-caption text-medium-emphasis mt-1\">\n If an item's type has changed since the log was\n written (e.g. STRING &rarr; FLOAT), QuestDB column\n types are kept as-is; historical values are cast to\n fit the current column, and any values that can't cast\n are stored as NULL.\n </div>\n </div>\n </template>\n </v-radio>\n <v-radio value=\"current\" data-test=\"repair-version-current\">\n <template #label>\n <div style=\"padding-left: 10px\">\n <div>Current</div>\n <div class=\"text-caption text-medium-emphasis\">\n Decode all files with the latest cmd/tlm definition.\n Choose this when the historical definition had a bug\n that you've since fixed, and you want the reingested\n data decoded with the corrected layout.\n </div>\n </div>\n </template>\n </v-radio>\n </v-radio-group>\n </div>\n </template>\n </template>\n </template>\n\n <!-- Job polling phase -->\n <template v-else-if=\"jobStatus\">\n <v-table density=\"compact\" class=\"monospace mb-4\">\n <tbody>\n <tr>\n <td class=\"font-weight-bold\">Job</td>\n <td>{{ jobId }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">State</td>\n <td>{{ jobStatus.state }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">Phase</td>\n <td>{{ phaseLabel }}</td>\n </tr>\n <tr v-if=\"jobStatus.target_version\">\n <td class=\"font-weight-bold\">Target Version</td>\n <td>{{ jobStatus.target_version }}</td>\n </tr>\n <tr v-if=\"jobStatus.packets_written !== undefined\">\n <td class=\"font-weight-bold\">Packets Written</td>\n <td>{{ jobStatus.packets_written.toLocaleString() }}</td>\n </tr>\n <tr v-if=\"jobStatus.error\">\n <td class=\"font-weight-bold text-red\">Error</td>\n <td class=\"text-red\">{{ jobStatus.error }}</td>\n </tr>\n <tr v-if=\"jobStatus.warnings && jobStatus.warnings.length\">\n <td class=\"font-weight-bold text-orange\">Warnings</td>\n <td class=\"text-orange\">\n <div v-for=\"(w, idx) in jobStatus.warnings\" :key=\"idx\">\n {{ w }}\n </div>\n </td>\n </tr>\n </tbody>\n </v-table>\n <v-progress-linear\n :model-value=\"progressPercent\"\n :indeterminate=\"progressPercent === 0 && isRunning\"\n class=\"mb-2\"\n />\n </template>\n </v-card-text>\n\n <v-card-actions class=\"px-4 pb-4\">\n <v-spacer />\n <v-btn\n v-if=\"!jobId\"\n color=\"warning\"\n variant=\"elevated\"\n :disabled=\"\n loadingCandidates ||\n candidates.length === 0 ||\n selectedKeys.length === 0\n \"\n data-test=\"repair-reingest\"\n @click=\"startReingest\"\n >\n Reingest {{ selectedKeys.length }}\n </v-btn>\n <v-btn variant=\"text\" data-test=\"repair-close\" @click=\"attemptClose\">\n Close\n </v-btn>\n </v-card-actions>\n </v-card>\n\n <v-dialog v-model=\"confirmCloseOpen\" max-width=\"500\" persistent>\n <v-card>\n <v-card-title>Reingest Still Running</v-card-title>\n <v-card-text>\n The reingest job is still in progress. Closing this dialog will not\n stop the job, but you will lose visibility into its status. Are you\n sure you want to close?\n </v-card-text>\n <v-card-actions class=\"px-4 pb-4\">\n <v-spacer />\n <v-btn\n variant=\"text\"\n data-test=\"repair-close-cancel\"\n @click=\"confirmCloseOpen = false\"\n >\n Keep Watching\n </v-btn>\n <v-btn\n color=\"warning\"\n variant=\"elevated\"\n data-test=\"repair-close-confirm\"\n @click=\"confirmClose\"\n >\n Close Anyway\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nconst PHASE_LABELS = {\n downloading: 'Downloading files…',\n enabling_dedup: 'Enabling DEDUP…',\n ingesting: 'Ingesting packets…',\n dedup_cooldown: 'Waiting for DEDUP cooldown…',\n disabling_dedup: 'Disabling DEDUP…',\n}\n\nexport default {\n props: {\n modelValue: {\n type: Boolean,\n default: false,\n },\n context: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:modelValue', 'complete'],\n data() {\n return {\n loadingCandidates: false,\n candidates: [],\n selectedKeys: [],\n targetVersion: 'as_logged',\n bucketEnv: null,\n path: null,\n candidateHeaders: [\n { title: 'File', key: 'filename' },\n { title: 'Key', key: 'key' },\n ],\n jobId: null,\n jobStatus: null,\n pollHandle: null,\n errorMessage: null,\n confirmCloseOpen: false,\n }\n },\n computed: {\n isRunning() {\n if (!this.jobStatus) return false\n return ['Queued', 'Running'].includes(this.jobStatus.state)\n },\n phaseLabel() {\n const phase = this.jobStatus?.progress_phase\n if (!phase) return this.jobStatus?.state || ''\n if (phase === 'dedup_cooldown') {\n const remaining = this.cooldownRemaining\n if (remaining != null) {\n return `Waiting for DEDUP cooldown (${remaining}s)…`\n }\n }\n return PHASE_LABELS[phase] || phase\n },\n cooldownRemaining() {\n const enabledAt = this.jobStatus?.dedup_enabled_at\n const cooldown = this.jobStatus?.dedup_cooldown_seconds\n if (!enabledAt || !cooldown) return null\n const nowSec = Date.now() / 1000\n const enabledSec = new Date(enabledAt).getTime() / 1000\n const remaining = Math.round(enabledSec + cooldown - nowSec)\n return Math.max(remaining, 0)\n },\n progressPercent() {\n const s = this.jobStatus\n if (!s) return 0\n if (s.state === 'Complete') return 100\n if (!s.progress_total || s.progress_total === 0) return 0\n return Math.round((s.progress_current / s.progress_total) * 100)\n },\n },\n watch: {\n modelValue(open) {\n if (open) this.fetchCandidates()\n },\n },\n mounted() {\n if (this.modelValue) this.fetchCandidates()\n },\n beforeUnmount() {\n this.stopPolling()\n },\n methods: {\n close() {\n this.stopPolling()\n const completed = this.jobStatus?.state === 'Complete'\n this.resetState()\n this.$emit('update:modelValue', false)\n if (completed) this.$emit('complete')\n },\n attemptClose() {\n if (this.isRunning) {\n this.confirmCloseOpen = true\n } else {\n this.close()\n }\n },\n confirmClose() {\n this.confirmCloseOpen = false\n this.close()\n },\n resetState() {\n this.candidates = []\n this.selectedKeys = []\n this.targetVersion = 'as_logged'\n this.bucketEnv = null\n this.path = null\n this.jobId = null\n this.jobStatus = null\n this.errorMessage = null\n this.loadingCandidates = false\n this.confirmCloseOpen = false\n },\n async fetchCandidates() {\n this.resetState()\n this.loadingCandidates = true\n try {\n const response = await Api.get(\n '/openc3-api/storage/repair_candidates',\n {\n params: {\n scope: this.context.scope,\n target: this.context.target,\n packet: this.context.packet,\n cmd_or_tlm: this.context.cmdOrTlm,\n start_time: this.context.gap.startIso,\n end_time: this.context.gap.endIso,\n },\n },\n )\n this.candidates = response.data.files || []\n this.bucketEnv = response.data.bucket\n this.path = response.data.path\n this.selectedKeys = this.candidates.map((c) => c.key)\n } catch (error) {\n this.errorMessage = error.response?.data?.message || error.message\n } finally {\n this.loadingCandidates = false\n }\n },\n async startReingest() {\n this.errorMessage = null\n // The controller expects filenames relative to `path`, not full keys.\n const filenames = this.selectedKeys.map((key) => {\n if (this.path && key.startsWith(this.path)) {\n return key.slice(this.path.length)\n }\n return key.split('/').pop()\n })\n try {\n const response = await Api.post('/openc3-api/storage/reingest', {\n data: {\n scope: this.context.scope,\n bucket: this.bucketEnv,\n path: this.path,\n files: filenames,\n target_version: this.targetVersion,\n },\n })\n this.jobId = response.data.job_id\n this.jobStatus = { state: response.data.state }\n this.startPolling()\n } catch (error) {\n this.errorMessage = error.response?.data?.message || error.message\n }\n },\n startPolling() {\n this.stopPolling()\n this.pollHandle = setInterval(this.pollStatus, 2000)\n this.pollStatus()\n },\n stopPolling() {\n if (this.pollHandle) {\n clearInterval(this.pollHandle)\n this.pollHandle = null\n }\n },\n async pollStatus() {\n if (!this.jobId) return\n try {\n const response = await Api.get(\n `/openc3-api/storage/reingest/${this.jobId}`,\n { params: { scope: this.context.scope } },\n )\n this.jobStatus = response.data\n if (!this.isRunning) this.stopPolling()\n } catch (error) {\n this.errorMessage = error.response?.data?.message || error.message\n this.stopPolling()\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.monospace {\n font-family: monospace;\n font-size: 14px;\n}\n.text-red {\n color: rgb(var(--v-theme-error));\n}\n.text-orange {\n color: rgb(var(--v-theme-warning));\n}\n</style>\n","/*\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api } from '@openc3/js-common/services'\n\n// QuestDB's PG wire occasionally drops idle connections; retry with backoff\n// so transient PQconsumeInput / \"server closed the connection\" errors from\n// the backend don't surface to the user.\nexport async function execSql(sql, db_shard, retries = 3) {\n for (let attempt = 1; attempt <= retries; attempt++) {\n try {\n let url = '/openc3-api/tsdb/exec'\n if (db_shard && db_shard !== '0') {\n url += `?db_shard=${db_shard}`\n }\n return await Api.post(url, {\n data: sql,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'text/plain',\n },\n })\n } catch (error) {\n const msg = error.response?.data?.message || error.message || ''\n const isConnectionError =\n msg.includes('PQconsumeInput') ||\n msg.includes('server closed the connection')\n if (isConnectionError && attempt < retries) {\n await new Promise((r) => setTimeout(r, 1000 * attempt))\n continue\n }\n throw error\n }\n }\n}\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-card>\n <v-card-title> QuestDB Table Storage Metrics </v-card-title>\n <v-card-text>\n <div v-if=\"metricsError\" class=\"mt-2 text-red monospace\">\n Error: {{ metricsError }}\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-btn\n :loading=\"metricsLoading\"\n color=\"success\"\n variant=\"text\"\n data-test=\"tsdb-metrics-refresh\"\n @click=\"fetchMetrics\"\n >\n Refresh\n </v-btn>\n <v-text-field\n v-model=\"db_shard\"\n type=\"number\"\n min=\"0\"\n label=\"DB Shard\"\n hint=\"DB Shard is N/A in Core\"\n hide-details\n density=\"compact\"\n style=\"max-width: 100px\"\n class=\"ml-4\"\n />\n <v-spacer />\n <v-text-field\n v-model=\"gapSampleInterval\"\n label=\"Data Gap Sample Interval\"\n hint=\"QuestDB SAMPLE BY duration (e.g. 5s, 1m, 10m, 1h)\"\n persistent-hint\n density=\"compact\"\n hide-details=\"auto\"\n style=\"max-width: 260px\"\n data-test=\"gap-sample-interval\"\n />\n </v-card-actions>\n\n <div v-if=\"metricsRows.length\">\n <template v-for=\"(section, idx) in sections\" :key=\"section.title\">\n <h3 class=\"text-h6 ml-2\" :class=\"idx === 0 ? 'mt-4' : 'mt-6'\">\n {{ section.title }}\n </h3>\n <v-data-table\n :headers=\"metricsHeaders\"\n :items=\"section.items\"\n :group-by=\"metricsGroupBy\"\n class=\"monospace\"\n :items-per-page=\"50\"\n density=\"compact\"\n >\n <template\n #group-header=\"{ item, columns, toggleGroup, isGroupOpen }\"\n >\n <tr>\n <td :colspan=\"columns.length - 1\">\n <v-btn\n :icon=\"isGroupOpen(item) ? '$expand' : '$next'\"\n size=\"small\"\n variant=\"text\"\n @click=\"toggleGroup(item)\"\n />\n <span class=\"font-weight-bold\">\n {{ item.value }}\n </span>\n <span class=\"ml-4 text-medium-emphasis\">\n Packets: {{ item.items.length }} &mdash; Rows:\n {{ groupRowCount(item.items).toLocaleString() }} &mdash;\n Disk: {{ formatBytes(groupDiskSize(item.items)) }}\n </span>\n </td>\n <td>\n <v-menu>\n <template #activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n icon=\"mdi-dots-horizontal\"\n data-test=\"group-actions\"\n />\n </template>\n <v-list>\n <v-list-item\n title=\"Analyze Data Gaps\"\n prepend-icon=\"mdi-chart-timeline-variant-shimmer\"\n data-test=\"group-analyze-gap\"\n @click=\"analyzeGroupDataGap(item.items)\"\n />\n <v-list-item\n title=\"Delete All\"\n prepend-icon=\"mdi-delete\"\n data-test=\"group-delete\"\n @click=\"deleteGroup(item.items)\"\n />\n </v-list>\n </v-menu>\n </td>\n </tr>\n </template>\n <template #item.diskSize=\"{ item }\">\n {{ formatBytes(item.diskSize) }}\n </template>\n <template #item.rowCount=\"{ item }\">\n {{ Number(item.rowCount).toLocaleString() }}\n </template>\n <template #item.actions=\"{ item }\">\n <v-menu>\n <template #activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n icon=\"mdi-dots-horizontal\"\n data-test=\"row-actions\"\n />\n </template>\n <v-list>\n <v-list-item\n title=\"Analyze Data Gap\"\n prepend-icon=\"mdi-chart-timeline-variant-shimmer\"\n data-test=\"row-analyze-gap\"\n @click=\"analyzeDataGap(item.tableName)\"\n />\n <v-list-item\n title=\"Delete\"\n prepend-icon=\"mdi-delete\"\n data-test=\"row-delete\"\n @click=\"deleteTable(item.tableName)\"\n />\n </v-list>\n </v-menu>\n </template>\n </v-data-table>\n </template>\n </div>\n </v-card>\n\n <!-- Data Gap Analysis Dialog -->\n <v-dialog v-model=\"gapDialog\" max-width=\"900\">\n <v-card>\n <v-card-title class=\"d-flex align-center\">\n Data Gap Analysis: {{ gapDialogTitle }}\n <v-spacer />\n <v-btn icon=\"mdi-close\" variant=\"text\" @click=\"gapDialog = false\" />\n </v-card-title>\n <v-card-text style=\"max-height: 80vh; overflow-y: auto\">\n <v-progress-linear\n v-if=\"gapLoading\"\n :model-value=\"gapProgress\"\n :indeterminate=\"gapProgress === 0\"\n class=\"mb-4\"\n />\n <div v-if=\"gapError\" class=\"text-red monospace mb-4\">\n Error: {{ gapError }}\n </div>\n\n <!-- Single table result -->\n <template v-if=\"!gapLoading && !gapError && gapSummary\">\n <v-table density=\"compact\" class=\"monospace mb-4\">\n <tbody>\n <tr>\n <td class=\"font-weight-bold\">First Record</td>\n <td>{{ gapSummary.firstTs }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">Last Record</td>\n <td>{{ gapSummary.lastTs }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">Total Time Span</td>\n <td>{{ gapSummary.timeSpan }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">Gaps Found</td>\n <td>{{ gapSummary.gaps.length }}</td>\n </tr>\n </tbody>\n </v-table>\n <div v-if=\"gapSummary.gaps.length\">\n <h4 class=\"text-subtitle-1 font-weight-bold mb-2\">\n Data Gaps (periods with no data)\n </h4>\n <v-data-table\n :headers=\"gapHeaders\"\n :items=\"gapSummary.gaps\"\n class=\"monospace\"\n :items-per-page=\"20\"\n density=\"compact\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n v-if=\"isTlmTable(gapDialogTitle)\"\n icon=\"mdi-wrench\"\n size=\"small\"\n variant=\"text\"\n data-test=\"gap-repair\"\n title=\"Repair (reingest raw logs)\"\n @click=\"openRepair(item, gapDialogTitle)\"\n />\n </template>\n </v-data-table>\n </div>\n <div v-else class=\"text-medium-emphasis\">\n No data gaps detected (sampled at {{ gapSampleInterval }}\n intervals).\n </div>\n </template>\n\n <!-- Group results (only tables with gaps) -->\n <template v-if=\"!gapLoading && !gapError && gapGroupResults\">\n <div\n v-if=\"gapGroupResults.withGaps.length === 0\"\n class=\"text-medium-emphasis\"\n >\n No data gaps detected across\n {{ gapGroupResults.totalTables }} tables (sampled at\n {{ gapSampleInterval }} intervals).\n </div>\n <div v-else>\n <div class=\"mb-4 text-medium-emphasis\">\n {{ gapGroupResults.withGaps.length }} of\n {{ gapGroupResults.totalTables }} tables have data gaps.\n </div>\n <div\n v-for=\"result in gapGroupResults.withGaps\"\n :key=\"result.tableName\"\n class=\"mb-6\"\n >\n <h4 class=\"text-subtitle-1 font-weight-bold mb-1\">\n {{ result.packet }}\n </h4>\n <div class=\"text-medium-emphasis monospace mb-2\">\n {{ result.firstTs }} to {{ result.lastTs }} ({{\n result.timeSpan\n }}) &mdash; {{ result.gaps.length }} gap(s)\n </div>\n <v-data-table\n :headers=\"gapHeaders\"\n :items=\"result.gaps\"\n class=\"monospace\"\n :items-per-page=\"10\"\n density=\"compact\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n v-if=\"isTlmTable(result.tableName)\"\n icon=\"mdi-wrench\"\n size=\"small\"\n variant=\"text\"\n data-test=\"gap-repair\"\n title=\"Repair (reingest raw logs)\"\n @click=\"openRepair(item, result.tableName)\"\n />\n </template>\n </v-data-table>\n </div>\n </div>\n </template>\n </v-card-text>\n </v-card>\n </v-dialog>\n\n <repair-gap-dialog\n v-if=\"repairContext\"\n v-model=\"repairDialog\"\n :context=\"repairContext\"\n @complete=\"onRepairComplete\"\n />\n </div>\n</template>\n\n<script>\nimport RepairGapDialog from './RepairGapDialog.vue'\nimport { execSql } from './tsdbApi'\n\nexport default {\n components: {\n RepairGapDialog,\n },\n data() {\n return {\n metricsRows: [],\n metricsError: null,\n metricsLoading: false,\n metricsGroupBy: [{ key: 'target', order: 'asc' }],\n metricsHeaders: [\n { title: 'Packet', key: 'packet' },\n { title: 'Table Name', key: 'tableName' },\n { title: 'Partition Count', key: 'partitionCount' },\n { title: 'Row Count', key: 'rowCount' },\n { title: 'Disk Size', key: 'diskSize' },\n { title: 'Actions', key: 'actions', sortable: false },\n ],\n gapDialog: false,\n gapDialogTitle: '',\n gapLoading: false,\n gapProgress: 0,\n gapError: null,\n gapSummary: null,\n gapGroupResults: null,\n gapHeaders: [\n { title: 'Gap Start', key: 'start' },\n { title: 'Gap End', key: 'end' },\n { title: 'Duration', key: 'duration' },\n { title: 'Actions', key: 'actions', sortable: false, width: 80 },\n ],\n repairDialog: false,\n repairContext: null,\n gapSampleInterval: '1m',\n db_shard: '0',\n }\n },\n computed: {\n sections() {\n return [\n {\n title: 'Telemetry',\n items: this.metricsRows.filter((row) => row.type === 'TLM'),\n },\n {\n title: 'Commands',\n items: this.metricsRows.filter((row) => row.type === 'CMD'),\n },\n ]\n },\n },\n mounted() {\n this.fetchMetrics()\n },\n methods: {\n groupRowCount(items) {\n return items.reduce(\n (sum, row) => sum + Number((row.raw || row).rowCount || 0),\n 0,\n )\n },\n groupDiskSize(items) {\n return items.reduce(\n (sum, row) => sum + Number((row.raw || row).diskSize || 0),\n 0,\n )\n },\n formatBytes(bytes) {\n if (bytes === 0) return '0 B'\n const units = ['B', 'KB', 'MB', 'GB', 'TB']\n const k = 1024\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n const value = bytes / Math.pow(k, i)\n return `${value.toFixed(i === 0 ? 0 : 1)} ${units[i]}`\n },\n fetchMetrics() {\n this.metricsError = null\n this.metricsRows = []\n this.metricsLoading = true\n execSql(\n 'SELECT tableName, partitionCount, rowCount, diskSize FROM table_storage;',\n this.db_shard,\n )\n .then((response) => {\n const cols = response.data.columns\n this.metricsRows = response.data.rows.map((row) => {\n const obj = {}\n cols.forEach((col, i) => {\n obj[col] = row[i]\n })\n const parts = (obj.tableName || '').split('__')\n obj.type = parts[1] || ''\n obj.target = parts[2] || ''\n obj.packet = parts[3] || ''\n return obj\n })\n })\n .catch((error) => {\n if (error.response && error.response.data) {\n this.metricsError = error.response.data.message\n } else {\n this.metricsError = error.message\n }\n })\n .finally(() => {\n this.metricsLoading = false\n })\n },\n dropTable(tableName) {\n return execSql(`DROP TABLE '${tableName}';`, this.db_shard)\n },\n deleteTable(tableName) {\n let target = tableName.split('__')[2] || tableName\n let packet = tableName.split('__')[3] || tableName\n this.$dialog\n .confirm(\n `Are you sure you want to drop table: ${tableName}? This removes ALL decommutated data for ${target} ${packet}!`,\n {\n okText: 'Delete',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.dropTable(tableName)\n .then(() => {\n this.metricsRows = this.metricsRows.filter(\n (row) => row.tableName !== tableName,\n )\n })\n .catch((error) => {\n if (error.response && error.response.data) {\n this.metricsError = error.response.data.message\n } else {\n this.metricsError = error.message\n }\n })\n })\n },\n deleteGroup(items) {\n const tableNames = items.map((item) => (item.raw || item).tableName)\n let target = tableNames[0].split('__')[2]\n this.$dialog\n .confirm(\n `Are you sure you want to drop ${tableNames.length} tables? This removes ALL decommutated data for ${target}!\\n\\n${tableNames.join('\\n')}`,\n {\n okText: 'Delete',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n const nameSet = new Set(tableNames)\n Promise.all(tableNames.map((name) => this.dropTable(name)))\n .then(() => {\n this.metricsRows = this.metricsRows.filter(\n (row) => !nameSet.has(row.tableName),\n )\n })\n .catch((error) => {\n if (error.response && error.response.data) {\n this.metricsError = error.response.data.message\n } else {\n this.metricsError = error.message\n }\n })\n })\n },\n formatDuration(ms) {\n const seconds = Math.floor(ms / 1000)\n const days = Math.floor(seconds / 86400)\n const hours = Math.floor((seconds % 86400) / 3600)\n const minutes = Math.floor((seconds % 3600) / 60)\n const parts = []\n if (days) parts.push(`${days}d`)\n if (hours) parts.push(`${hours}h`)\n if (minutes) parts.push(`${minutes}m`)\n if (!parts.length) parts.push(`${seconds}s`)\n return parts.join(' ')\n },\n formatTimestamp(ts) {\n return new Date(ts).toISOString().replace('T', ' ').replace('.000Z', 'Z')\n },\n // Parse a QuestDB SAMPLE BY duration like \"1m\", \"30s\", \"2h\" into ms.\n // Returns null if malformed.\n parseSampleIntervalMs(input) {\n const match = String(input || '')\n .trim()\n .match(/^(\\d+)\\s*([smhd])$/i)\n if (!match) return null\n const value = Number.parseInt(match[1], 10)\n const multipliers = { s: 1_000, m: 60_000, h: 3_600_000, d: 86_400_000 }\n return value * multipliers[match[2].toLowerCase()]\n },\n async fetchTableGaps(tableName) {\n const interval = (this.gapSampleInterval || '1m').trim()\n const bucketMs = this.parseSampleIntervalMs(interval)\n if (!bucketMs) {\n throw new Error(\n `Invalid sample interval '${interval}'. Use a number followed by s, m, h, or d (e.g. 5s, 1m, 2h).`,\n )\n }\n\n // Get first and last timestamps\n const rangeResp = await execSql(\n `SELECT first(PACKET_TIMESECONDS) as first_ts, last(PACKET_TIMESECONDS) as last_ts FROM '${tableName}';`,\n this.db_shard,\n )\n const rangeCols = rangeResp.data.columns\n const rangeRow = rangeResp.data.rows[0]\n const rangeObj = {}\n rangeCols.forEach((col, i) => {\n rangeObj[col] = rangeRow[i]\n })\n const firstTs = rangeObj.first_ts\n const lastTs = rangeObj.last_ts\n const totalMs = new Date(lastTs) - new Date(firstTs)\n\n // Sample by the user-chosen interval with FILL(NULL) to detect gaps.\n const gapResp = await execSql(\n `(SELECT PACKET_TIMESECONDS, count() as cnt FROM '${tableName}' SAMPLE BY ${interval} FILL(NULL)) WHERE cnt IS NULL`,\n this.db_shard,\n )\n const gapCols = gapResp.data.columns\n const gapRows = gapResp.data.rows.map((row) => {\n const obj = {}\n gapCols.forEach((col, i) => {\n obj[col] = row[i]\n })\n return obj\n })\n\n // Group contiguous null-bucket timestamps into gaps. A delta > bucketMs\n // between consecutive empty buckets means a new gap has started.\n const gaps = []\n const buildGap = (startRaw, endRaw) => {\n const startMs = new Date(startRaw).getTime()\n const endMs = new Date(endRaw).getTime() + bucketMs\n return {\n start: this.formatTimestamp(startRaw),\n end: this.formatTimestamp(new Date(endMs)),\n duration: this.formatDuration(endMs - startMs),\n // ISO strings avoid the JS precision cliff on nsec integers.\n startIso: new Date(startMs).toISOString(),\n endIso: new Date(endMs).toISOString(),\n }\n }\n if (gapRows.length > 0) {\n let gapStart = gapRows[0].PACKET_TIMESECONDS\n let gapEnd = gapStart\n for (let i = 1; i < gapRows.length; i++) {\n const prev = new Date(gapEnd)\n const curr = new Date(gapRows[i].PACKET_TIMESECONDS)\n if (curr - prev > bucketMs) {\n gaps.push(buildGap(gapStart, gapEnd))\n gapStart = gapRows[i].PACKET_TIMESECONDS\n }\n gapEnd = gapRows[i].PACKET_TIMESECONDS\n }\n gaps.push(buildGap(gapStart, gapEnd))\n }\n\n return {\n firstTs: this.formatTimestamp(firstTs),\n lastTs: this.formatTimestamp(lastTs),\n timeSpan: this.formatDuration(totalMs),\n gaps,\n }\n },\n async analyzeDataGap(tableName) {\n this.gapDialogTitle = tableName\n this.gapDialog = true\n this.gapLoading = true\n this.gapProgress = 0\n this.gapError = null\n this.gapSummary = null\n this.gapGroupResults = null\n try {\n this.gapSummary = await this.fetchTableGaps(tableName)\n } catch (error) {\n this.gapError = error.response?.data?.message || error.message\n } finally {\n this.gapLoading = false\n }\n },\n async analyzeGroupDataGap(items) {\n const tableNames = items.map((item) => (item.raw || item).tableName)\n const target = (items[0].raw || items[0]).target\n this.gapDialogTitle = `${target} (${tableNames.length} tables)`\n this.gapDialog = true\n this.gapLoading = true\n this.gapProgress = 0\n this.gapError = null\n this.gapSummary = null\n this.gapGroupResults = null\n try {\n const withGaps = []\n for (let i = 0; i < tableNames.length; i++) {\n this.gapProgress = Math.round(((i + 1) / tableNames.length) * 100)\n try {\n const result = await this.fetchTableGaps(tableNames[i])\n if (result.gaps.length > 0) {\n const parts = tableNames[i].split('__')\n withGaps.push({\n tableName: tableNames[i],\n packet: parts[3] || tableNames[i],\n ...result,\n })\n }\n } catch {\n // Skip tables that error (e.g. empty tables)\n }\n }\n this.gapGroupResults = {\n totalTables: tableNames.length,\n withGaps,\n }\n } catch (error) {\n this.gapError = error.response?.data?.message || error.message\n } finally {\n this.gapLoading = false\n }\n },\n // scope__TLM|CMD__TARGET__PACKET → { scope, cmdOrTlm, target, packet }\n parseTableName(tableName) {\n const parts = tableName.split('__')\n if (parts.length < 4) return null\n return {\n scope: parts[0],\n cmdOrTlm: parts[1],\n target: parts[2],\n packet: parts[3],\n }\n },\n isTlmTable(tableName) {\n const parsed = this.parseTableName(tableName)\n return parsed?.cmdOrTlm === 'TLM'\n },\n openRepair(gap, tableName) {\n const parsed = this.parseTableName(tableName)\n if (!parsed) return\n this.repairContext = {\n tableName,\n ...parsed,\n gap,\n }\n this.repairDialog = true\n },\n onRepairComplete() {\n // Re-run gap analysis on whichever view is currently showing.\n if (this.gapGroupResults) return // group analysis is expensive; let the user re-run manually\n if (this.gapDialogTitle) this.analyzeDataGap(this.gapDialogTitle)\n },\n },\n}\n</script>\n\n<style scoped>\n.monospace {\n font-family: monospace;\n font-size: 14px;\n}\n.text-red {\n color: rgb(var(--v-theme-error));\n}\n</style>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card>\n <v-card-title> Send SQL Queries to QuestDB </v-card-title>\n <v-card-subtitle>\n THIS IS DANGEROUS! This allows you to interact directly with the\n underlying QuestDB time series database, making it easy to modify or\n delete data.\n <br /><br />\n Enter SQL queries like:\n <code> SELECT * FROM DEFAULT__TLM__INST__HEALTH_STATUS LIMIT 10 </code>\n or\n <code>SHOW TABLES</code>\n </v-card-subtitle>\n <v-card-text class=\"pb-0 ml-2\">\n <v-textarea\n v-model=\"sqlText\"\n hide-details\n label=\"SQL query\"\n class=\"monospace\"\n rows=\"3\"\n @keydown=\"commandKeydown\"\n />\n <div v-if=\"errorMessage\" class=\"mt-2 text-red monospace\">\n Error: {{ errorMessage }}\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-btn\n :disabled=\"!sqlText.length\"\n :loading=\"loading\"\n color=\"success\"\n variant=\"text\"\n data-test=\"tsdb-execute\"\n @click=\"executeQuery\"\n >\n Execute\n </v-btn>\n <v-text-field\n v-model=\"db_shard\"\n type=\"number\"\n min=\"0\"\n label=\"DB Shard\"\n hide-details\n density=\"compact\"\n style=\"max-width: 100px\"\n class=\"ml-4\"\n />\n </v-card-actions>\n\n <v-data-table\n v-if=\"columns.length\"\n :headers=\"tableHeaders\"\n :items=\"rows\"\n class=\"monospace\"\n :items-per-page=\"50\"\n density=\"compact\"\n >\n </v-data-table>\n </v-card>\n</template>\n\n<script>\nimport { execSql } from './tsdbApi'\n\nexport default {\n data() {\n return {\n sqlText: '',\n db_shard: '0',\n columns: [],\n rows: [],\n errorMessage: null,\n loading: false,\n }\n },\n computed: {\n tableHeaders() {\n return this.columns.map((col) => ({\n title: col,\n key: col,\n }))\n },\n },\n methods: {\n commandKeydown($event) {\n if (($event.metaKey || $event.ctrlKey) && $event.key === 'Enter') {\n this.executeQuery()\n }\n },\n executeQuery() {\n this.errorMessage = null\n this.columns = []\n this.rows = []\n this.loading = true\n execSql(this.sqlText, this.db_shard)\n .then((response) => {\n this.columns = response.data.columns\n this.rows = response.data.rows.map((row) => {\n const obj = {}\n this.columns.forEach((col, i) => {\n obj[col] = row[i]\n })\n return obj\n })\n })\n .catch((error) => {\n if (error.response && error.response.data) {\n this.errorMessage = error.response.data.message\n } else {\n this.errorMessage = error.message\n }\n })\n .finally(() => {\n this.loading = false\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.monospace {\n font-family: monospace;\n font-size: 14px;\n}\n.text-red {\n color: rgb(var(--v-theme-error));\n}\n</style>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-tabs v-model=\"activeTab\">\n <v-tab value=\"metrics\" data-test=\"tsdb-metrics-tab\">Metrics</v-tab>\n <v-tab value=\"queries\" data-test=\"tsdb-queries-tab\">Queries</v-tab>\n </v-tabs>\n <v-window v-model=\"activeTab\">\n <v-window-item value=\"metrics\">\n <tsdb-metrics />\n </v-window-item>\n <v-window-item value=\"queries\">\n <tsdb-queries />\n </v-window-item>\n </v-window>\n </div>\n</template>\n\n<script>\nimport TsdbMetrics from './tsdb/TsdbMetrics.vue'\nimport TsdbQueries from './tsdb/TsdbQueries.vue'\n\nexport default {\n components: {\n TsdbMetrics,\n TsdbQueries,\n },\n data() {\n return {\n activeTab: 'metrics',\n }\n },\n}\n</script>\n"],"names":["PHASE_LABELS","_sfc_main","phase","remaining","enabledAt","cooldown","nowSec","enabledSec","open","completed","response","Api","c","error","filenames","key","_hoisted_4","_hoisted_5","_hoisted_9","_hoisted_11","_createBlock","_component_v_dialog","$props","_createVNode","_component_v_card","_component_v_card_title","_toDisplayString","_component_v_card_subtitle","_component_v_card_text","$data","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_component_v_table","_createElementVNode","_cache","$options","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_10","w","idx","_component_v_progress_linear","_hoisted_2","_component_v_progress_circular","_hoisted_3","_component_v_data_table","$event","_component_v_radio_group","_component_v_radio","_component_v_card_actions","_component_v_spacer","_component_v_btn","execSql","sql","db_shard","retries","attempt","url","msg","r","RepairGapDialog","row","items","sum","bytes","units","k","i","cols","obj","col","parts","tableName","target","packet","tableNames","item","nameSet","name","ms","seconds","days","hours","minutes","ts","input","match","interval","bucketMs","rangeResp","rangeCols","rangeRow","rangeObj","firstTs","lastTs","totalMs","gapResp","gapCols","gapRows","gaps","buildGap","startRaw","endRaw","startMs","endMs","gapStart","gapEnd","prev","withGaps","result","gap","parsed","_hoisted_12","_hoisted_13","_component_v_text_field","_renderList","section","_normalizeClass","_withCtx","columns","toggleGroup","isGroupOpen","_component_v_menu","props","_component_v_icon","_mergeProps","_component_v_list","_component_v_list_item","_createTextVNode","_component_repair_gap_dialog","_component_v_textarea","TsdbMetrics","TsdbQueries","_component_v_tabs","_component_v_tab","_component_v_window","_component_v_window_item","_component_tsdb_metrics","_component_tsdb_queries"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("./format-qjtPogBb.cjs"),e=require("vue"),T=require("./CustomIcon-8F08upeg.cjs"),M={downloading:"Downloading files…",enabling_dedup:"Enabling DEDUP…",ingesting:"Ingesting packets…",dedup_cooldown:"Waiting for DEDUP cooldown…",disabling_dedup:"Disabling DEDUP…"},L={props:{modelValue:{type:Boolean,default:!1},context:{type:Object,required:!0}},emits:["update:modelValue","complete"],data(){return{loadingCandidates:!1,candidates:[],selectedKeys:[],targetVersion:"as_logged",bucketEnv:null,path:null,candidateHeaders:[{title:"File",key:"filename"},{title:"Key",key:"key"}],jobId:null,jobStatus:null,pollHandle:null,errorMessage:null,confirmCloseOpen:!1}},computed:{isRunning(){return this.jobStatus?["Queued","Running"].includes(this.jobStatus.state):!1},phaseLabel(){const s=this.jobStatus?.progress_phase;if(!s)return this.jobStatus?.state||"";if(s==="dedup_cooldown"){const t=this.cooldownRemaining;if(t!=null)return`Waiting for DEDUP cooldown (${t}s)…`}return M[s]||s},cooldownRemaining(){const s=this.jobStatus?.dedup_enabled_at,t=this.jobStatus?.dedup_cooldown_seconds;if(!s||!t)return null;const n=Date.now()/1e3,a=new Date(s).getTime()/1e3,o=Math.round(a+t-n);return Math.max(o,0)},progressPercent(){const s=this.jobStatus;return s?s.state==="Complete"?100:!s.progress_total||s.progress_total===0?0:Math.round(s.progress_current/s.progress_total*100):0}},watch:{modelValue(s){s&&this.fetchCandidates()}},mounted(){this.modelValue&&this.fetchCandidates()},beforeUnmount(){this.stopPolling()},methods:{close(){this.stopPolling();const s=this.jobStatus?.state==="Complete";this.resetState(),this.$emit("update:modelValue",!1),s&&this.$emit("complete")},attemptClose(){this.isRunning?this.confirmCloseOpen=!0:this.close()},confirmClose(){this.confirmCloseOpen=!1,this.close()},resetState(){this.candidates=[],this.selectedKeys=[],this.targetVersion="as_logged",this.bucketEnv=null,this.path=null,this.jobId=null,this.jobStatus=null,this.errorMessage=null,this.loadingCandidates=!1,this.confirmCloseOpen=!1},async fetchCandidates(){this.resetState(),this.loadingCandidates=!0;try{const s=await S.Br.get("/openc3-api/storage/repair_candidates",{params:{scope:this.context.scope,target:this.context.target,packet:this.context.packet,cmd_or_tlm:this.context.cmdOrTlm,start_time:this.context.gap.startIso,end_time:this.context.gap.endIso}});this.candidates=s.data.files||[],this.bucketEnv=s.data.bucket,this.path=s.data.path,this.selectedKeys=this.candidates.map(t=>t.key)}catch(s){this.errorMessage=s.response?.data?.message||s.message}finally{this.loadingCandidates=!1}},async startReingest(){this.errorMessage=null;const s=this.selectedKeys.map(t=>this.path&&t.startsWith(this.path)?t.slice(this.path.length):t.split("/").pop());try{const t=await S.Br.post("/openc3-api/storage/reingest",{data:{scope:this.context.scope,bucket:this.bucketEnv,path:this.path,files:s,target_version:this.targetVersion}});this.jobId=t.data.job_id,this.jobStatus={state:t.data.state},this.startPolling()}catch(t){this.errorMessage=t.response?.data?.message||t.message}},startPolling(){this.stopPolling(),this.pollHandle=setInterval(this.pollStatus,2e3),this.pollStatus()},stopPolling(){this.pollHandle&&(clearInterval(this.pollHandle),this.pollHandle=null)},async pollStatus(){if(this.jobId)try{const s=await S.Br.get(`/openc3-api/storage/reingest/${this.jobId}`,{params:{scope:this.context.scope}});this.jobStatus=s.data,this.isRunning||this.stopPolling()}catch(s){this.errorMessage=s.response?.data?.message||s.message,this.stopPolling()}}}},I={key:0,class:"text-red monospace mb-4"},j={key:0,class:"d-flex align-center mb-4"},G={key:0,class:"text-medium-emphasis"},P={class:"mb-2"},A={class:"mt-4"},O={key:0},z={key:1},K={key:2},U={class:"text-red"},F={key:3},H={class:"text-orange"};function q(s,t,n,a,o,l){const d=e.resolveComponent("v-card-title"),h=e.resolveComponent("v-card-subtitle"),g=e.resolveComponent("v-progress-circular"),C=e.resolveComponent("v-data-table"),_=e.resolveComponent("v-radio"),w=e.resolveComponent("v-radio-group"),m=e.resolveComponent("v-table"),v=e.resolveComponent("v-progress-linear"),b=e.resolveComponent("v-card-text"),i=e.resolveComponent("v-spacer"),c=e.resolveComponent("v-btn"),p=e.resolveComponent("v-card-actions"),f=e.resolveComponent("v-card"),V=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(V,{"model-value":n.modelValue,"max-width":"900",persistent:""},{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(d,{class:"d-flex align-center"},{default:e.withCtx(()=>[e.createTextVNode(" Repair Gap: "+e.toDisplayString(n.context.target)+" "+e.toDisplayString(n.context.packet),1)]),_:1}),n.context.gap?(e.openBlock(),e.createBlock(h,{key:0},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.context.gap.start)+" — "+e.toDisplayString(n.context.gap.end)+" ("+e.toDisplayString(n.context.gap.duration)+") ",1)]),_:1})):e.createCommentVNode("",!0),e.createVNode(b,{style:{"max-height":"75vh","overflow-y":"auto"}},{default:e.withCtx(()=>[o.errorMessage?(e.openBlock(),e.createElementBlock("div",I," Error: "+e.toDisplayString(o.errorMessage),1)):e.createCommentVNode("",!0),o.jobId?o.jobStatus?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createVNode(m,{density:"compact",class:"monospace mb-4"},{default:e.withCtx(()=>[e.createElementVNode("tbody",null,[e.createElementVNode("tr",null,[t[8]||(t[8]=e.createElementVNode("td",{class:"font-weight-bold"},"Job",-1)),e.createElementVNode("td",null,e.toDisplayString(o.jobId),1)]),e.createElementVNode("tr",null,[t[9]||(t[9]=e.createElementVNode("td",{class:"font-weight-bold"},"State",-1)),e.createElementVNode("td",null,e.toDisplayString(o.jobStatus.state),1)]),e.createElementVNode("tr",null,[t[10]||(t[10]=e.createElementVNode("td",{class:"font-weight-bold"},"Phase",-1)),e.createElementVNode("td",null,e.toDisplayString(l.phaseLabel),1)]),o.jobStatus.target_version?(e.openBlock(),e.createElementBlock("tr",O,[t[11]||(t[11]=e.createElementVNode("td",{class:"font-weight-bold"},"Target Version",-1)),e.createElementVNode("td",null,e.toDisplayString(o.jobStatus.target_version),1)])):e.createCommentVNode("",!0),o.jobStatus.packets_written!==void 0?(e.openBlock(),e.createElementBlock("tr",z,[t[12]||(t[12]=e.createElementVNode("td",{class:"font-weight-bold"},"Packets Written",-1)),e.createElementVNode("td",null,e.toDisplayString(o.jobStatus.packets_written.toLocaleString()),1)])):e.createCommentVNode("",!0),o.jobStatus.error?(e.openBlock(),e.createElementBlock("tr",K,[t[13]||(t[13]=e.createElementVNode("td",{class:"font-weight-bold text-red"},"Error",-1)),e.createElementVNode("td",U,e.toDisplayString(o.jobStatus.error),1)])):e.createCommentVNode("",!0),o.jobStatus.warnings&&o.jobStatus.warnings.length?(e.openBlock(),e.createElementBlock("tr",F,[t[14]||(t[14]=e.createElementVNode("td",{class:"font-weight-bold text-orange"},"Warnings",-1)),e.createElementVNode("td",H,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.jobStatus.warnings,(y,D)=>(e.openBlock(),e.createElementBlock("div",{key:D},e.toDisplayString(y),1))),128))])])):e.createCommentVNode("",!0)])]),_:1}),e.createVNode(v,{"model-value":l.progressPercent,indeterminate:l.progressPercent===0&&l.isRunning,class:"mb-2"},null,8,["model-value","indeterminate"])],64)):e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[o.loadingCandidates?(e.openBlock(),e.createElementBlock("div",j,[e.createVNode(g,{indeterminate:"",size:"24",class:"mr-3"}),t[4]||(t[4]=e.createTextVNode(" Searching bucket for raw log files that cover this gap… ",-1))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[o.candidates.length===0?(e.openBlock(),e.createElementBlock("div",G," No raw log files cover this gap window. Reingest is not available — the data may have been written from a source that skipped raw logging, or the logs have been deleted. ")):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",P,e.toDisplayString(o.candidates.length)+" raw log file(s) overlap this window. Select which to reingest: ",1),e.createVNode(C,{modelValue:o.selectedKeys,"onUpdate:modelValue":t[0]||(t[0]=y=>o.selectedKeys=y),headers:o.candidateHeaders,items:o.candidates,"item-value":"key","show-select":"",class:"monospace","items-per-page":20,density:"compact","data-test":"repair-candidates"},null,8,["modelValue","headers","items"]),e.createElementVNode("div",A,[t[7]||(t[7]=e.createElementVNode("div",{class:"text-subtitle-2 font-weight-bold mb-1"}," Target Definition Version ",-1)),e.createVNode(w,{modelValue:o.targetVersion,"onUpdate:modelValue":t[1]||(t[1]=y=>o.targetVersion=y),"hide-details":"",density:"compact","data-test":"repair-version"},{default:e.withCtx(()=>[e.createVNode(_,{value:"as_logged","data-test":"repair-version-as-logged"},{label:e.withCtx(()=>[...t[5]||(t[5]=[e.createElementVNode("div",{style:{"padding-left":"10px"}},[e.createElementVNode("div",null,"As logged (default)"),e.createElementVNode("div",{class:"text-caption text-medium-emphasis"}," Decode each file with the cmd/tlm definition that was in effect when the data was originally logged. Safest for historical fidelity — preserves packet layouts as they existed at that time. "),e.createElementVNode("div",{class:"text-caption text-medium-emphasis mt-1"}," If an item's type has changed since the log was written (e.g. STRING → FLOAT), QuestDB column types are kept as-is; historical values are cast to fit the current column, and any values that can't cast are stored as NULL. ")],-1)])]),_:1}),e.createVNode(_,{value:"current","data-test":"repair-version-current"},{label:e.withCtx(()=>[...t[6]||(t[6]=[e.createElementVNode("div",{style:{"padding-left":"10px"}},[e.createElementVNode("div",null,"Current"),e.createElementVNode("div",{class:"text-caption text-medium-emphasis"}," Decode all files with the latest cmd/tlm definition. Choose this when the historical definition had a bug that you've since fixed, and you want the reingested data decoded with the corrected layout. ")],-1)])]),_:1})]),_:1},8,["modelValue"])])],64))],64))],64))]),_:1}),e.createVNode(p,{class:"px-4 pb-4"},{default:e.withCtx(()=>[e.createVNode(i),o.jobId?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(c,{key:0,color:"warning",variant:"elevated",disabled:o.loadingCandidates||o.candidates.length===0||o.selectedKeys.length===0,"data-test":"repair-reingest",onClick:l.startReingest},{default:e.withCtx(()=>[e.createTextVNode(" Reingest "+e.toDisplayString(o.selectedKeys.length),1)]),_:1},8,["disabled","onClick"])),e.createVNode(c,{variant:"text","data-test":"repair-close",onClick:l.attemptClose},{default:e.withCtx(()=>[...t[15]||(t[15]=[e.createTextVNode(" Close ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1}),e.createVNode(V,{modelValue:o.confirmCloseOpen,"onUpdate:modelValue":t[3]||(t[3]=y=>o.confirmCloseOpen=y),"max-width":"500",persistent:""},{default:e.withCtx(()=>[e.createVNode(f,null,{default:e.withCtx(()=>[e.createVNode(d,null,{default:e.withCtx(()=>[...t[16]||(t[16]=[e.createTextVNode("Reingest Still Running",-1)])]),_:1}),e.createVNode(b,null,{default:e.withCtx(()=>[...t[17]||(t[17]=[e.createTextVNode(" The reingest job is still in progress. Closing this dialog will not stop the job, but you will lose visibility into its status. Are you sure you want to close? ",-1)])]),_:1}),e.createVNode(p,{class:"px-4 pb-4"},{default:e.withCtx(()=>[e.createVNode(i),e.createVNode(c,{variant:"text","data-test":"repair-close-cancel",onClick:t[2]||(t[2]=y=>o.confirmCloseOpen=!1)},{default:e.withCtx(()=>[...t[18]||(t[18]=[e.createTextVNode(" Keep Watching ",-1)])]),_:1}),e.createVNode(c,{color:"warning",variant:"elevated","data-test":"repair-close-confirm",onClick:l.confirmClose},{default:e.withCtx(()=>[...t[19]||(t[19]=[e.createTextVNode(" Close Anyway ",-1)])]),_:1},8,["onClick"])]),_:1})]),_:1})]),_:1},8,["modelValue"])]),_:1},8,["model-value"])}const Q=T._export_sfc(L,[["render",q],["__scopeId","data-v-2ab87eb9"]]);async function x(s,t,n=3){for(let a=1;a<=n;a++)try{let o="/openc3-api/tsdb/exec";return t&&t!=="0"&&(o+=`?db_shard=${t}`),await S.Br.post(o,{data:s,headers:{Accept:"application/json","Content-Type":"text/plain"}})}catch(o){const l=o.response?.data?.message||o.message||"";if((l.includes("PQconsumeInput")||l.includes("server closed the connection"))&&a<n){await new Promise(h=>setTimeout(h,1e3*a));continue}throw o}}const W={components:{RepairGapDialog:Q},data(){return{metricsRows:[],metricsError:null,metricsLoading:!1,metricsGroupBy:[{key:"target",order:"asc"}],metricsHeaders:[{title:"Packet",key:"packet"},{title:"Table Name",key:"tableName"},{title:"Partition Count",key:"partitionCount"},{title:"Row Count",key:"rowCount"},{title:"Disk Size",key:"diskSize"},{title:"Actions",key:"actions",sortable:!1}],gapDialog:!1,gapDialogTitle:"",gapLoading:!1,gapProgress:0,gapError:null,gapSummary:null,gapGroupResults:null,gapHeaders:[{title:"Gap Start",key:"start"},{title:"Gap End",key:"end"},{title:"Duration",key:"duration"},{title:"Actions",key:"actions",sortable:!1,width:80}],repairDialog:!1,repairContext:null,gapSampleInterval:"1m",db_shard:"0"}},computed:{sections(){return[{title:"Telemetry",items:this.metricsRows.filter(s=>s.type==="TLM")},{title:"Commands",items:this.metricsRows.filter(s=>s.type==="CMD")}]}},mounted(){this.fetchMetrics()},methods:{groupRowCount(s){return s.reduce((t,n)=>t+Number((n.raw||n).rowCount||0),0)},groupDiskSize(s){return s.reduce((t,n)=>t+Number((n.raw||n).diskSize||0),0)},formatBytes(s){if(s===0)return"0 B";const t=["B","KB","MB","GB","TB"],n=1024,a=Math.floor(Math.log(s)/Math.log(n));return`${(s/Math.pow(n,a)).toFixed(a===0?0:1)} ${t[a]}`},fetchMetrics(){this.metricsError=null,this.metricsRows=[],this.metricsLoading=!0,x("SELECT tableName, partitionCount, rowCount, diskSize FROM table_storage;",this.db_shard).then(s=>{const t=s.data.columns;this.metricsRows=s.data.rows.map(n=>{const a={};t.forEach((l,d)=>{a[l]=n[d]});const o=(a.tableName||"").split("__");return a.type=o[1]||"",a.target=o[2]||"",a.packet=o[3]||"",a})}).catch(s=>{s.response&&s.response.data?this.metricsError=s.response.data.message:this.metricsError=s.message}).finally(()=>{this.metricsLoading=!1})},dropTable(s){return x(`DROP TABLE '${s}';`,this.db_shard)},deleteTable(s){let t=s.split("__")[2]||s,n=s.split("__")[3]||s;this.$dialog.confirm(`Are you sure you want to drop table: ${s}? This removes ALL decommutated data for ${t} ${n}!`,{okText:"Delete",cancelText:"Cancel"}).then(()=>{this.dropTable(s).then(()=>{this.metricsRows=this.metricsRows.filter(a=>a.tableName!==s)}).catch(a=>{a.response&&a.response.data?this.metricsError=a.response.data.message:this.metricsError=a.message})})},deleteGroup(s){const t=s.map(a=>(a.raw||a).tableName);let n=t[0].split("__")[2];this.$dialog.confirm(`Are you sure you want to drop ${t.length} tables? This removes ALL decommutated data for ${n}!
2
+
3
+ ${t.join(`
4
+ `)}`,{okText:"Delete",cancelText:"Cancel"}).then(()=>{const a=new Set(t);Promise.all(t.map(o=>this.dropTable(o))).then(()=>{this.metricsRows=this.metricsRows.filter(o=>!a.has(o.tableName))}).catch(o=>{o.response&&o.response.data?this.metricsError=o.response.data.message:this.metricsError=o.message})})},formatDuration(s){const t=Math.floor(s/1e3),n=Math.floor(t/86400),a=Math.floor(t%86400/3600),o=Math.floor(t%3600/60),l=[];return n&&l.push(`${n}d`),a&&l.push(`${a}h`),o&&l.push(`${o}m`),l.length||l.push(`${t}s`),l.join(" ")},formatTimestamp(s){return new Date(s).toISOString().replace("T"," ").replace(".000Z","Z")},parseSampleIntervalMs(s){const t=String(s||"").trim().match(/^(\d+)\s*([smhd])$/i);return t?Number.parseInt(t[1],10)*{s:1e3,m:6e4,h:36e5,d:864e5}[t[2].toLowerCase()]:null},async fetchTableGaps(s){const t=(this.gapSampleInterval||"1m").trim(),n=this.parseSampleIntervalMs(t);if(!n)throw new Error(`Invalid sample interval '${t}'. Use a number followed by s, m, h, or d (e.g. 5s, 1m, 2h).`);const a=await x(`SELECT first(PACKET_TIMESECONDS) as first_ts, last(PACKET_TIMESECONDS) as last_ts FROM '${s}';`,this.db_shard),o=a.data.columns,l=a.data.rows[0],d={};o.forEach((i,c)=>{d[i]=l[c]});const h=d.first_ts,g=d.last_ts,C=new Date(g)-new Date(h),_=await x(`(SELECT PACKET_TIMESECONDS, count() as cnt FROM '${s}' SAMPLE BY ${t} FILL(NULL)) WHERE cnt IS NULL`,this.db_shard),w=_.data.columns,m=_.data.rows.map(i=>{const c={};return w.forEach((p,f)=>{c[p]=i[f]}),c}),v=[],b=(i,c)=>{const p=new Date(i).getTime(),f=new Date(c).getTime()+n;return{start:this.formatTimestamp(i),end:this.formatTimestamp(new Date(f)),duration:this.formatDuration(f-p),startIso:new Date(p).toISOString(),endIso:new Date(f).toISOString()}};if(m.length>0){let i=m[0].PACKET_TIMESECONDS,c=i;for(let p=1;p<m.length;p++){const f=new Date(c);new Date(m[p].PACKET_TIMESECONDS)-f>n&&(v.push(b(i,c)),i=m[p].PACKET_TIMESECONDS),c=m[p].PACKET_TIMESECONDS}v.push(b(i,c))}return{firstTs:this.formatTimestamp(h),lastTs:this.formatTimestamp(g),timeSpan:this.formatDuration(C),gaps:v}},async analyzeDataGap(s){this.gapDialogTitle=s,this.gapDialog=!0,this.gapLoading=!0,this.gapProgress=0,this.gapError=null,this.gapSummary=null,this.gapGroupResults=null;try{this.gapSummary=await this.fetchTableGaps(s)}catch(t){this.gapError=t.response?.data?.message||t.message}finally{this.gapLoading=!1}},async analyzeGroupDataGap(s){const t=s.map(a=>(a.raw||a).tableName),n=(s[0].raw||s[0]).target;this.gapDialogTitle=`${n} (${t.length} tables)`,this.gapDialog=!0,this.gapLoading=!0,this.gapProgress=0,this.gapError=null,this.gapSummary=null,this.gapGroupResults=null;try{const a=[];for(let o=0;o<t.length;o++){this.gapProgress=Math.round((o+1)/t.length*100);try{const l=await this.fetchTableGaps(t[o]);if(l.gaps.length>0){const d=t[o].split("__");a.push({tableName:t[o],packet:d[3]||t[o],...l})}}catch{}}this.gapGroupResults={totalTables:t.length,withGaps:a}}catch(a){this.gapError=a.response?.data?.message||a.message}finally{this.gapLoading=!1}},parseTableName(s){const t=s.split("__");return t.length<4?null:{scope:t[0],cmdOrTlm:t[1],target:t[2],packet:t[3]}},isTlmTable(s){return this.parseTableName(s)?.cmdOrTlm==="TLM"},openRepair(s,t){const n=this.parseTableName(t);n&&(this.repairContext={tableName:t,...n,gap:s},this.repairDialog=!0)},onRepairComplete(){this.gapGroupResults||this.gapDialogTitle&&this.analyzeDataGap(this.gapDialogTitle)}}},Y={key:0,class:"mt-2 text-red monospace"},Z={key:0},J=["colspan"],X={class:"font-weight-bold"},$={class:"ml-4 text-medium-emphasis"},ee={key:1,class:"text-red monospace mb-4"},te={key:0},oe={key:1,class:"text-medium-emphasis"},se={key:0,class:"text-medium-emphasis"},ae={key:1},ne={class:"mb-4 text-medium-emphasis"},le={class:"text-subtitle-1 font-weight-bold mb-1"},re={class:"text-medium-emphasis monospace mb-2"};function ie(s,t,n,a,o,l){const d=e.resolveComponent("v-card-title"),h=e.resolveComponent("v-card-text"),g=e.resolveComponent("v-btn"),C=e.resolveComponent("v-text-field"),_=e.resolveComponent("v-spacer"),w=e.resolveComponent("v-card-actions"),m=e.resolveComponent("v-icon"),v=e.resolveComponent("v-list-item"),b=e.resolveComponent("v-list"),i=e.resolveComponent("v-menu"),c=e.resolveComponent("v-data-table"),p=e.resolveComponent("v-card"),f=e.resolveComponent("v-progress-linear"),V=e.resolveComponent("v-table"),y=e.resolveComponent("v-dialog"),D=e.resolveComponent("repair-gap-dialog");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(d,null,{default:e.withCtx(()=>[...t[5]||(t[5]=[e.createTextVNode(" QuestDB Table Storage Metrics ",-1)])]),_:1}),e.createVNode(h,null,{default:e.withCtx(()=>[o.metricsError?(e.openBlock(),e.createElementBlock("div",Y," Error: "+e.toDisplayString(o.metricsError),1)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(w,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(g,{loading:o.metricsLoading,color:"success",variant:"text","data-test":"tsdb-metrics-refresh",onClick:l.fetchMetrics},{default:e.withCtx(()=>[...t[6]||(t[6]=[e.createTextVNode(" Refresh ",-1)])]),_:1},8,["loading","onClick"]),e.createVNode(C,{modelValue:o.db_shard,"onUpdate:modelValue":t[0]||(t[0]=r=>o.db_shard=r),type:"number",min:"0",label:"DB Shard",hint:"DB Shard is N/A in Core","hide-details":"",density:"compact",style:{"max-width":"100px"},class:"ml-4"},null,8,["modelValue"]),e.createVNode(_),e.createVNode(C,{modelValue:o.gapSampleInterval,"onUpdate:modelValue":t[1]||(t[1]=r=>o.gapSampleInterval=r),label:"Data Gap Sample Interval",hint:"QuestDB SAMPLE BY duration (e.g. 5s, 1m, 10m, 1h)","persistent-hint":"",density:"compact","hide-details":"auto",style:{"max-width":"260px"},"data-test":"gap-sample-interval"},null,8,["modelValue"])]),_:1}),o.metricsRows.length?(e.openBlock(),e.createElementBlock("div",Z,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.sections,(r,k)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:r.title},[e.createElementVNode("h3",{class:e.normalizeClass(["text-h6 ml-2",k===0?"mt-4":"mt-6"])},e.toDisplayString(r.title),3),e.createVNode(c,{headers:o.metricsHeaders,items:r.items,"group-by":o.metricsGroupBy,class:"monospace","items-per-page":50,density:"compact"},{"group-header":e.withCtx(({item:u,columns:N,toggleGroup:B,isGroupOpen:R})=>[e.createElementVNode("tr",null,[e.createElementVNode("td",{colspan:N.length-1},[e.createVNode(g,{icon:R(u)?"$expand":"$next",size:"small",variant:"text",onClick:E=>B(u)},null,8,["icon","onClick"]),e.createElementVNode("span",X,e.toDisplayString(u.value),1),e.createElementVNode("span",$," Packets: "+e.toDisplayString(u.items.length)+" — Rows: "+e.toDisplayString(l.groupRowCount(u.items).toLocaleString())+" — Disk: "+e.toDisplayString(l.formatBytes(l.groupDiskSize(u.items))),1)],8,J),e.createElementVNode("td",null,[e.createVNode(i,null,{activator:e.withCtx(({props:E})=>[e.createVNode(m,e.mergeProps({ref_for:!0},E,{icon:"mdi-dots-horizontal","data-test":"group-actions"}),null,16)]),default:e.withCtx(()=>[e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(v,{title:"Analyze Data Gaps","prepend-icon":"mdi-chart-timeline-variant-shimmer","data-test":"group-analyze-gap",onClick:E=>l.analyzeGroupDataGap(u.items)},null,8,["onClick"]),e.createVNode(v,{title:"Delete All","prepend-icon":"mdi-delete","data-test":"group-delete",onClick:E=>l.deleteGroup(u.items)},null,8,["onClick"])]),_:2},1024)]),_:2},1024)])])]),"item.diskSize":e.withCtx(({item:u})=>[e.createTextVNode(e.toDisplayString(l.formatBytes(u.diskSize)),1)]),"item.rowCount":e.withCtx(({item:u})=>[e.createTextVNode(e.toDisplayString(Number(u.rowCount).toLocaleString()),1)]),"item.actions":e.withCtx(({item:u})=>[e.createVNode(i,null,{activator:e.withCtx(({props:N})=>[e.createVNode(m,e.mergeProps({ref_for:!0},N,{icon:"mdi-dots-horizontal","data-test":"row-actions"}),null,16)]),default:e.withCtx(()=>[e.createVNode(b,null,{default:e.withCtx(()=>[e.createVNode(v,{title:"Analyze Data Gap","prepend-icon":"mdi-chart-timeline-variant-shimmer","data-test":"row-analyze-gap",onClick:N=>l.analyzeDataGap(u.tableName)},null,8,["onClick"]),e.createVNode(v,{title:"Delete","prepend-icon":"mdi-delete","data-test":"row-delete",onClick:N=>l.deleteTable(u.tableName)},null,8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:1},8,["headers","items","group-by"])],64))),128))])):e.createCommentVNode("",!0)]),_:1}),e.createVNode(y,{modelValue:o.gapDialog,"onUpdate:modelValue":t[3]||(t[3]=r=>o.gapDialog=r),"max-width":"900"},{default:e.withCtx(()=>[e.createVNode(p,null,{default:e.withCtx(()=>[e.createVNode(d,{class:"d-flex align-center"},{default:e.withCtx(()=>[e.createTextVNode(" Data Gap Analysis: "+e.toDisplayString(o.gapDialogTitle)+" ",1),e.createVNode(_),e.createVNode(g,{icon:"mdi-close",variant:"text",onClick:t[2]||(t[2]=r=>o.gapDialog=!1)})]),_:1}),e.createVNode(h,{style:{"max-height":"80vh","overflow-y":"auto"}},{default:e.withCtx(()=>[o.gapLoading?(e.openBlock(),e.createBlock(f,{key:0,"model-value":o.gapProgress,indeterminate:o.gapProgress===0,class:"mb-4"},null,8,["model-value","indeterminate"])):e.createCommentVNode("",!0),o.gapError?(e.openBlock(),e.createElementBlock("div",ee," Error: "+e.toDisplayString(o.gapError),1)):e.createCommentVNode("",!0),!o.gapLoading&&!o.gapError&&o.gapSummary?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createVNode(V,{density:"compact",class:"monospace mb-4"},{default:e.withCtx(()=>[e.createElementVNode("tbody",null,[e.createElementVNode("tr",null,[t[7]||(t[7]=e.createElementVNode("td",{class:"font-weight-bold"},"First Record",-1)),e.createElementVNode("td",null,e.toDisplayString(o.gapSummary.firstTs),1)]),e.createElementVNode("tr",null,[t[8]||(t[8]=e.createElementVNode("td",{class:"font-weight-bold"},"Last Record",-1)),e.createElementVNode("td",null,e.toDisplayString(o.gapSummary.lastTs),1)]),e.createElementVNode("tr",null,[t[9]||(t[9]=e.createElementVNode("td",{class:"font-weight-bold"},"Total Time Span",-1)),e.createElementVNode("td",null,e.toDisplayString(o.gapSummary.timeSpan),1)]),e.createElementVNode("tr",null,[t[10]||(t[10]=e.createElementVNode("td",{class:"font-weight-bold"},"Gaps Found",-1)),e.createElementVNode("td",null,e.toDisplayString(o.gapSummary.gaps.length),1)])])]),_:1}),o.gapSummary.gaps.length?(e.openBlock(),e.createElementBlock("div",te,[t[11]||(t[11]=e.createElementVNode("h4",{class:"text-subtitle-1 font-weight-bold mb-2"}," Data Gaps (periods with no data) ",-1)),e.createVNode(c,{headers:o.gapHeaders,items:o.gapSummary.gaps,class:"monospace","items-per-page":20,density:"compact"},{"item.actions":e.withCtx(({item:r})=>[l.isTlmTable(o.gapDialogTitle)?(e.openBlock(),e.createBlock(g,{key:0,icon:"mdi-wrench",size:"small",variant:"text","data-test":"gap-repair",title:"Repair (reingest raw logs)",onClick:k=>l.openRepair(r,o.gapDialogTitle)},null,8,["onClick"])):e.createCommentVNode("",!0)]),_:1},8,["headers","items"])])):(e.openBlock(),e.createElementBlock("div",oe," No data gaps detected (sampled at "+e.toDisplayString(o.gapSampleInterval)+" intervals). ",1))],64)):e.createCommentVNode("",!0),!o.gapLoading&&!o.gapError&&o.gapGroupResults?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[o.gapGroupResults.withGaps.length===0?(e.openBlock(),e.createElementBlock("div",se," No data gaps detected across "+e.toDisplayString(o.gapGroupResults.totalTables)+" tables (sampled at "+e.toDisplayString(o.gapSampleInterval)+" intervals). ",1)):(e.openBlock(),e.createElementBlock("div",ae,[e.createElementVNode("div",ne,e.toDisplayString(o.gapGroupResults.withGaps.length)+" of "+e.toDisplayString(o.gapGroupResults.totalTables)+" tables have data gaps. ",1),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.gapGroupResults.withGaps,r=>(e.openBlock(),e.createElementBlock("div",{key:r.tableName,class:"mb-6"},[e.createElementVNode("h4",le,e.toDisplayString(r.packet),1),e.createElementVNode("div",re,e.toDisplayString(r.firstTs)+" to "+e.toDisplayString(r.lastTs)+" ("+e.toDisplayString(r.timeSpan)+") — "+e.toDisplayString(r.gaps.length)+" gap(s) ",1),e.createVNode(c,{headers:o.gapHeaders,items:r.gaps,class:"monospace","items-per-page":10,density:"compact"},{"item.actions":e.withCtx(({item:k})=>[l.isTlmTable(r.tableName)?(e.openBlock(),e.createBlock(g,{key:0,icon:"mdi-wrench",size:"small",variant:"text","data-test":"gap-repair",title:"Repair (reingest raw logs)",onClick:u=>l.openRepair(k,r.tableName)},null,8,["onClick"])):e.createCommentVNode("",!0)]),_:2},1032,["headers","items"])]))),128))]))],64)):e.createCommentVNode("",!0)]),_:1})]),_:1})]),_:1},8,["modelValue"]),o.repairContext?(e.openBlock(),e.createBlock(D,{key:0,modelValue:o.repairDialog,"onUpdate:modelValue":t[4]||(t[4]=r=>o.repairDialog=r),context:o.repairContext,onComplete:l.onRepairComplete},null,8,["modelValue","context","onComplete"])):e.createCommentVNode("",!0)])}const ce=T._export_sfc(W,[["render",ie],["__scopeId","data-v-25188e19"]]),de={data(){return{sqlText:"",db_shard:"0",columns:[],rows:[],errorMessage:null,loading:!1}},computed:{tableHeaders(){return this.columns.map(s=>({title:s,key:s}))}},methods:{commandKeydown(s){(s.metaKey||s.ctrlKey)&&s.key==="Enter"&&this.executeQuery()},executeQuery(){this.errorMessage=null,this.columns=[],this.rows=[],this.loading=!0,x(this.sqlText,this.db_shard).then(s=>{this.columns=s.data.columns,this.rows=s.data.rows.map(t=>{const n={};return this.columns.forEach((a,o)=>{n[a]=t[o]}),n})}).catch(s=>{s.response&&s.response.data?this.errorMessage=s.response.data.message:this.errorMessage=s.message}).finally(()=>{this.loading=!1})}}},me={key:0,class:"mt-2 text-red monospace"};function pe(s,t,n,a,o,l){const d=e.resolveComponent("v-card-title"),h=e.resolveComponent("v-card-subtitle"),g=e.resolveComponent("v-textarea"),C=e.resolveComponent("v-card-text"),_=e.resolveComponent("v-btn"),w=e.resolveComponent("v-text-field"),m=e.resolveComponent("v-card-actions"),v=e.resolveComponent("v-data-table"),b=e.resolveComponent("v-card");return e.openBlock(),e.createBlock(b,null,{default:e.withCtx(()=>[e.createVNode(d,null,{default:e.withCtx(()=>[...t[2]||(t[2]=[e.createTextVNode(" Send SQL Queries to QuestDB ",-1)])]),_:1}),e.createVNode(h,null,{default:e.withCtx(()=>[...t[3]||(t[3]=[e.createTextVNode(" THIS IS DANGEROUS! This allows you to interact directly with the underlying QuestDB time series database, making it easy to modify or delete data. ",-1),e.createElementVNode("br",null,null,-1),e.createElementVNode("br",null,null,-1),e.createTextVNode(" Enter SQL queries like: ",-1),e.createElementVNode("code",null," SELECT * FROM DEFAULT__TLM__INST__HEALTH_STATUS LIMIT 10 ",-1),e.createTextVNode(" or ",-1),e.createElementVNode("code",null,"SHOW TABLES",-1)])]),_:1}),e.createVNode(C,{class:"pb-0 ml-2"},{default:e.withCtx(()=>[e.createVNode(g,{modelValue:o.sqlText,"onUpdate:modelValue":t[0]||(t[0]=i=>o.sqlText=i),"hide-details":"",label:"SQL query",class:"monospace",rows:"3",onKeydown:l.commandKeydown},null,8,["modelValue","onKeydown"]),o.errorMessage?(e.openBlock(),e.createElementBlock("div",me," Error: "+e.toDisplayString(o.errorMessage),1)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(m,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(_,{disabled:!o.sqlText.length,loading:o.loading,color:"success",variant:"text","data-test":"tsdb-execute",onClick:l.executeQuery},{default:e.withCtx(()=>[...t[4]||(t[4]=[e.createTextVNode(" Execute ",-1)])]),_:1},8,["disabled","loading","onClick"]),e.createVNode(w,{modelValue:o.db_shard,"onUpdate:modelValue":t[1]||(t[1]=i=>o.db_shard=i),type:"number",min:"0",label:"DB Shard","hide-details":"",density:"compact",style:{"max-width":"100px"},class:"ml-4"},null,8,["modelValue"])]),_:1}),o.columns.length?(e.openBlock(),e.createBlock(v,{key:0,headers:l.tableHeaders,items:o.rows,class:"monospace","items-per-page":50,density:"compact"},null,8,["headers","items"])):e.createCommentVNode("",!0)]),_:1})}const ue=T._export_sfc(de,[["render",pe],["__scopeId","data-v-4c0d0a5c"]]),ge={components:{TsdbMetrics:ce,TsdbQueries:ue},data(){return{activeTab:"metrics"}}};function he(s,t,n,a,o,l){const d=e.resolveComponent("v-tab"),h=e.resolveComponent("v-tabs"),g=e.resolveComponent("tsdb-metrics"),C=e.resolveComponent("v-window-item"),_=e.resolveComponent("tsdb-queries"),w=e.resolveComponent("v-window");return e.openBlock(),e.createElementBlock("div",null,[e.createVNode(h,{modelValue:o.activeTab,"onUpdate:modelValue":t[0]||(t[0]=m=>o.activeTab=m)},{default:e.withCtx(()=>[e.createVNode(d,{value:"metrics","data-test":"tsdb-metrics-tab"},{default:e.withCtx(()=>[...t[2]||(t[2]=[e.createTextVNode("Metrics",-1)])]),_:1}),e.createVNode(d,{value:"queries","data-test":"tsdb-queries-tab"},{default:e.withCtx(()=>[...t[3]||(t[3]=[e.createTextVNode("Queries",-1)])]),_:1})]),_:1},8,["modelValue"]),e.createVNode(w,{modelValue:o.activeTab,"onUpdate:modelValue":t[1]||(t[1]=m=>o.activeTab=m)},{default:e.withCtx(()=>[e.createVNode(C,{value:"metrics"},{default:e.withCtx(()=>[e.createVNode(g)]),_:1}),e.createVNode(C,{value:"queries"},{default:e.withCtx(()=>[e.createVNode(_)]),_:1})]),_:1},8,["modelValue"])])}const _e=T._export_sfc(ge,[["render",he]]);exports.default=_e;
5
+ //# sourceMappingURL=TsdbTab-OOO451j0.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TsdbTab-OOO451j0.cjs","sources":["../src/tools/admin/tabs/tsdb/RepairGapDialog.vue","../src/tools/admin/tabs/tsdb/tsdbApi.js","../src/tools/admin/tabs/tsdb/TsdbMetrics.vue","../src/tools/admin/tabs/tsdb/TsdbQueries.vue","../src/tools/admin/tabs/TsdbTab.vue"],"sourcesContent":["<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog :model-value=\"modelValue\" max-width=\"900\" persistent>\n <v-card>\n <v-card-title class=\"d-flex align-center\">\n Repair Gap: {{ context.target }} {{ context.packet }}\n </v-card-title>\n <v-card-subtitle v-if=\"context.gap\">\n {{ context.gap.start }} &mdash; {{ context.gap.end }} ({{\n context.gap.duration\n }})\n </v-card-subtitle>\n\n <v-card-text style=\"max-height: 75vh; overflow-y: auto\">\n <div v-if=\"errorMessage\" class=\"text-red monospace mb-4\">\n Error: {{ errorMessage }}\n </div>\n\n <!-- Candidate listing phase -->\n <template v-if=\"!jobId\">\n <div v-if=\"loadingCandidates\" class=\"d-flex align-center mb-4\">\n <v-progress-circular indeterminate size=\"24\" class=\"mr-3\" />\n Searching bucket for raw log files that cover this gap…\n </div>\n\n <template v-else>\n <div v-if=\"candidates.length === 0\" class=\"text-medium-emphasis\">\n No raw log files cover this gap window. Reingest is not available\n &mdash; the data may have been written from a source that skipped\n raw logging, or the logs have been deleted.\n </div>\n\n <template v-else>\n <div class=\"mb-2\">\n {{ candidates.length }} raw log file(s) overlap this window.\n Select which to reingest:\n </div>\n <v-data-table\n v-model=\"selectedKeys\"\n :headers=\"candidateHeaders\"\n :items=\"candidates\"\n item-value=\"key\"\n show-select\n class=\"monospace\"\n :items-per-page=\"20\"\n density=\"compact\"\n data-test=\"repair-candidates\"\n />\n\n <div class=\"mt-4\">\n <div class=\"text-subtitle-2 font-weight-bold mb-1\">\n Target Definition Version\n </div>\n <v-radio-group\n v-model=\"targetVersion\"\n hide-details\n density=\"compact\"\n data-test=\"repair-version\"\n >\n <v-radio\n value=\"as_logged\"\n data-test=\"repair-version-as-logged\"\n >\n <template #label>\n <div style=\"padding-left: 10px\">\n <div>As logged (default)</div>\n <div class=\"text-caption text-medium-emphasis\">\n Decode each file with the cmd/tlm definition that was\n in effect when the data was originally logged. Safest\n for historical fidelity — preserves packet layouts as\n they existed at that time.\n </div>\n <div class=\"text-caption text-medium-emphasis mt-1\">\n If an item's type has changed since the log was\n written (e.g. STRING &rarr; FLOAT), QuestDB column\n types are kept as-is; historical values are cast to\n fit the current column, and any values that can't cast\n are stored as NULL.\n </div>\n </div>\n </template>\n </v-radio>\n <v-radio value=\"current\" data-test=\"repair-version-current\">\n <template #label>\n <div style=\"padding-left: 10px\">\n <div>Current</div>\n <div class=\"text-caption text-medium-emphasis\">\n Decode all files with the latest cmd/tlm definition.\n Choose this when the historical definition had a bug\n that you've since fixed, and you want the reingested\n data decoded with the corrected layout.\n </div>\n </div>\n </template>\n </v-radio>\n </v-radio-group>\n </div>\n </template>\n </template>\n </template>\n\n <!-- Job polling phase -->\n <template v-else-if=\"jobStatus\">\n <v-table density=\"compact\" class=\"monospace mb-4\">\n <tbody>\n <tr>\n <td class=\"font-weight-bold\">Job</td>\n <td>{{ jobId }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">State</td>\n <td>{{ jobStatus.state }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">Phase</td>\n <td>{{ phaseLabel }}</td>\n </tr>\n <tr v-if=\"jobStatus.target_version\">\n <td class=\"font-weight-bold\">Target Version</td>\n <td>{{ jobStatus.target_version }}</td>\n </tr>\n <tr v-if=\"jobStatus.packets_written !== undefined\">\n <td class=\"font-weight-bold\">Packets Written</td>\n <td>{{ jobStatus.packets_written.toLocaleString() }}</td>\n </tr>\n <tr v-if=\"jobStatus.error\">\n <td class=\"font-weight-bold text-red\">Error</td>\n <td class=\"text-red\">{{ jobStatus.error }}</td>\n </tr>\n <tr v-if=\"jobStatus.warnings && jobStatus.warnings.length\">\n <td class=\"font-weight-bold text-orange\">Warnings</td>\n <td class=\"text-orange\">\n <div v-for=\"(w, idx) in jobStatus.warnings\" :key=\"idx\">\n {{ w }}\n </div>\n </td>\n </tr>\n </tbody>\n </v-table>\n <v-progress-linear\n :model-value=\"progressPercent\"\n :indeterminate=\"progressPercent === 0 && isRunning\"\n class=\"mb-2\"\n />\n </template>\n </v-card-text>\n\n <v-card-actions class=\"px-4 pb-4\">\n <v-spacer />\n <v-btn\n v-if=\"!jobId\"\n color=\"warning\"\n variant=\"elevated\"\n :disabled=\"\n loadingCandidates ||\n candidates.length === 0 ||\n selectedKeys.length === 0\n \"\n data-test=\"repair-reingest\"\n @click=\"startReingest\"\n >\n Reingest {{ selectedKeys.length }}\n </v-btn>\n <v-btn variant=\"text\" data-test=\"repair-close\" @click=\"attemptClose\">\n Close\n </v-btn>\n </v-card-actions>\n </v-card>\n\n <v-dialog v-model=\"confirmCloseOpen\" max-width=\"500\" persistent>\n <v-card>\n <v-card-title>Reingest Still Running</v-card-title>\n <v-card-text>\n The reingest job is still in progress. Closing this dialog will not\n stop the job, but you will lose visibility into its status. Are you\n sure you want to close?\n </v-card-text>\n <v-card-actions class=\"px-4 pb-4\">\n <v-spacer />\n <v-btn\n variant=\"text\"\n data-test=\"repair-close-cancel\"\n @click=\"confirmCloseOpen = false\"\n >\n Keep Watching\n </v-btn>\n <v-btn\n color=\"warning\"\n variant=\"elevated\"\n data-test=\"repair-close-confirm\"\n @click=\"confirmClose\"\n >\n Close Anyway\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nconst PHASE_LABELS = {\n downloading: 'Downloading files…',\n enabling_dedup: 'Enabling DEDUP…',\n ingesting: 'Ingesting packets…',\n dedup_cooldown: 'Waiting for DEDUP cooldown…',\n disabling_dedup: 'Disabling DEDUP…',\n}\n\nexport default {\n props: {\n modelValue: {\n type: Boolean,\n default: false,\n },\n context: {\n type: Object,\n required: true,\n },\n },\n emits: ['update:modelValue', 'complete'],\n data() {\n return {\n loadingCandidates: false,\n candidates: [],\n selectedKeys: [],\n targetVersion: 'as_logged',\n bucketEnv: null,\n path: null,\n candidateHeaders: [\n { title: 'File', key: 'filename' },\n { title: 'Key', key: 'key' },\n ],\n jobId: null,\n jobStatus: null,\n pollHandle: null,\n errorMessage: null,\n confirmCloseOpen: false,\n }\n },\n computed: {\n isRunning() {\n if (!this.jobStatus) return false\n return ['Queued', 'Running'].includes(this.jobStatus.state)\n },\n phaseLabel() {\n const phase = this.jobStatus?.progress_phase\n if (!phase) return this.jobStatus?.state || ''\n if (phase === 'dedup_cooldown') {\n const remaining = this.cooldownRemaining\n if (remaining != null) {\n return `Waiting for DEDUP cooldown (${remaining}s)…`\n }\n }\n return PHASE_LABELS[phase] || phase\n },\n cooldownRemaining() {\n const enabledAt = this.jobStatus?.dedup_enabled_at\n const cooldown = this.jobStatus?.dedup_cooldown_seconds\n if (!enabledAt || !cooldown) return null\n const nowSec = Date.now() / 1000\n const enabledSec = new Date(enabledAt).getTime() / 1000\n const remaining = Math.round(enabledSec + cooldown - nowSec)\n return Math.max(remaining, 0)\n },\n progressPercent() {\n const s = this.jobStatus\n if (!s) return 0\n if (s.state === 'Complete') return 100\n if (!s.progress_total || s.progress_total === 0) return 0\n return Math.round((s.progress_current / s.progress_total) * 100)\n },\n },\n watch: {\n modelValue(open) {\n if (open) this.fetchCandidates()\n },\n },\n mounted() {\n if (this.modelValue) this.fetchCandidates()\n },\n beforeUnmount() {\n this.stopPolling()\n },\n methods: {\n close() {\n this.stopPolling()\n const completed = this.jobStatus?.state === 'Complete'\n this.resetState()\n this.$emit('update:modelValue', false)\n if (completed) this.$emit('complete')\n },\n attemptClose() {\n if (this.isRunning) {\n this.confirmCloseOpen = true\n } else {\n this.close()\n }\n },\n confirmClose() {\n this.confirmCloseOpen = false\n this.close()\n },\n resetState() {\n this.candidates = []\n this.selectedKeys = []\n this.targetVersion = 'as_logged'\n this.bucketEnv = null\n this.path = null\n this.jobId = null\n this.jobStatus = null\n this.errorMessage = null\n this.loadingCandidates = false\n this.confirmCloseOpen = false\n },\n async fetchCandidates() {\n this.resetState()\n this.loadingCandidates = true\n try {\n const response = await Api.get(\n '/openc3-api/storage/repair_candidates',\n {\n params: {\n scope: this.context.scope,\n target: this.context.target,\n packet: this.context.packet,\n cmd_or_tlm: this.context.cmdOrTlm,\n start_time: this.context.gap.startIso,\n end_time: this.context.gap.endIso,\n },\n },\n )\n this.candidates = response.data.files || []\n this.bucketEnv = response.data.bucket\n this.path = response.data.path\n this.selectedKeys = this.candidates.map((c) => c.key)\n } catch (error) {\n this.errorMessage = error.response?.data?.message || error.message\n } finally {\n this.loadingCandidates = false\n }\n },\n async startReingest() {\n this.errorMessage = null\n // The controller expects filenames relative to `path`, not full keys.\n const filenames = this.selectedKeys.map((key) => {\n if (this.path && key.startsWith(this.path)) {\n return key.slice(this.path.length)\n }\n return key.split('/').pop()\n })\n try {\n const response = await Api.post('/openc3-api/storage/reingest', {\n data: {\n scope: this.context.scope,\n bucket: this.bucketEnv,\n path: this.path,\n files: filenames,\n target_version: this.targetVersion,\n },\n })\n this.jobId = response.data.job_id\n this.jobStatus = { state: response.data.state }\n this.startPolling()\n } catch (error) {\n this.errorMessage = error.response?.data?.message || error.message\n }\n },\n startPolling() {\n this.stopPolling()\n this.pollHandle = setInterval(this.pollStatus, 2000)\n this.pollStatus()\n },\n stopPolling() {\n if (this.pollHandle) {\n clearInterval(this.pollHandle)\n this.pollHandle = null\n }\n },\n async pollStatus() {\n if (!this.jobId) return\n try {\n const response = await Api.get(\n `/openc3-api/storage/reingest/${this.jobId}`,\n { params: { scope: this.context.scope } },\n )\n this.jobStatus = response.data\n if (!this.isRunning) this.stopPolling()\n } catch (error) {\n this.errorMessage = error.response?.data?.message || error.message\n this.stopPolling()\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.monospace {\n font-family: monospace;\n font-size: 14px;\n}\n.text-red {\n color: rgb(var(--v-theme-error));\n}\n.text-orange {\n color: rgb(var(--v-theme-warning));\n}\n</style>\n","/*\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nimport { Api } from '@openc3/js-common/services'\n\n// QuestDB's PG wire occasionally drops idle connections; retry with backoff\n// so transient PQconsumeInput / \"server closed the connection\" errors from\n// the backend don't surface to the user.\nexport async function execSql(sql, db_shard, retries = 3) {\n for (let attempt = 1; attempt <= retries; attempt++) {\n try {\n let url = '/openc3-api/tsdb/exec'\n if (db_shard && db_shard !== '0') {\n url += `?db_shard=${db_shard}`\n }\n return await Api.post(url, {\n data: sql,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'text/plain',\n },\n })\n } catch (error) {\n const msg = error.response?.data?.message || error.message || ''\n const isConnectionError =\n msg.includes('PQconsumeInput') ||\n msg.includes('server closed the connection')\n if (isConnectionError && attempt < retries) {\n await new Promise((r) => setTimeout(r, 1000 * attempt))\n continue\n }\n throw error\n }\n }\n}\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-card>\n <v-card-title> QuestDB Table Storage Metrics </v-card-title>\n <v-card-text>\n <div v-if=\"metricsError\" class=\"mt-2 text-red monospace\">\n Error: {{ metricsError }}\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-btn\n :loading=\"metricsLoading\"\n color=\"success\"\n variant=\"text\"\n data-test=\"tsdb-metrics-refresh\"\n @click=\"fetchMetrics\"\n >\n Refresh\n </v-btn>\n <v-text-field\n v-model=\"db_shard\"\n type=\"number\"\n min=\"0\"\n label=\"DB Shard\"\n hint=\"DB Shard is N/A in Core\"\n hide-details\n density=\"compact\"\n style=\"max-width: 100px\"\n class=\"ml-4\"\n />\n <v-spacer />\n <v-text-field\n v-model=\"gapSampleInterval\"\n label=\"Data Gap Sample Interval\"\n hint=\"QuestDB SAMPLE BY duration (e.g. 5s, 1m, 10m, 1h)\"\n persistent-hint\n density=\"compact\"\n hide-details=\"auto\"\n style=\"max-width: 260px\"\n data-test=\"gap-sample-interval\"\n />\n </v-card-actions>\n\n <div v-if=\"metricsRows.length\">\n <template v-for=\"(section, idx) in sections\" :key=\"section.title\">\n <h3 class=\"text-h6 ml-2\" :class=\"idx === 0 ? 'mt-4' : 'mt-6'\">\n {{ section.title }}\n </h3>\n <v-data-table\n :headers=\"metricsHeaders\"\n :items=\"section.items\"\n :group-by=\"metricsGroupBy\"\n class=\"monospace\"\n :items-per-page=\"50\"\n density=\"compact\"\n >\n <template\n #group-header=\"{ item, columns, toggleGroup, isGroupOpen }\"\n >\n <tr>\n <td :colspan=\"columns.length - 1\">\n <v-btn\n :icon=\"isGroupOpen(item) ? '$expand' : '$next'\"\n size=\"small\"\n variant=\"text\"\n @click=\"toggleGroup(item)\"\n />\n <span class=\"font-weight-bold\">\n {{ item.value }}\n </span>\n <span class=\"ml-4 text-medium-emphasis\">\n Packets: {{ item.items.length }} &mdash; Rows:\n {{ groupRowCount(item.items).toLocaleString() }} &mdash;\n Disk: {{ formatBytes(groupDiskSize(item.items)) }}\n </span>\n </td>\n <td>\n <v-menu>\n <template #activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n icon=\"mdi-dots-horizontal\"\n data-test=\"group-actions\"\n />\n </template>\n <v-list>\n <v-list-item\n title=\"Analyze Data Gaps\"\n prepend-icon=\"mdi-chart-timeline-variant-shimmer\"\n data-test=\"group-analyze-gap\"\n @click=\"analyzeGroupDataGap(item.items)\"\n />\n <v-list-item\n title=\"Delete All\"\n prepend-icon=\"mdi-delete\"\n data-test=\"group-delete\"\n @click=\"deleteGroup(item.items)\"\n />\n </v-list>\n </v-menu>\n </td>\n </tr>\n </template>\n <template #item.diskSize=\"{ item }\">\n {{ formatBytes(item.diskSize) }}\n </template>\n <template #item.rowCount=\"{ item }\">\n {{ Number(item.rowCount).toLocaleString() }}\n </template>\n <template #item.actions=\"{ item }\">\n <v-menu>\n <template #activator=\"{ props }\">\n <v-icon\n v-bind=\"props\"\n icon=\"mdi-dots-horizontal\"\n data-test=\"row-actions\"\n />\n </template>\n <v-list>\n <v-list-item\n title=\"Analyze Data Gap\"\n prepend-icon=\"mdi-chart-timeline-variant-shimmer\"\n data-test=\"row-analyze-gap\"\n @click=\"analyzeDataGap(item.tableName)\"\n />\n <v-list-item\n title=\"Delete\"\n prepend-icon=\"mdi-delete\"\n data-test=\"row-delete\"\n @click=\"deleteTable(item.tableName)\"\n />\n </v-list>\n </v-menu>\n </template>\n </v-data-table>\n </template>\n </div>\n </v-card>\n\n <!-- Data Gap Analysis Dialog -->\n <v-dialog v-model=\"gapDialog\" max-width=\"900\">\n <v-card>\n <v-card-title class=\"d-flex align-center\">\n Data Gap Analysis: {{ gapDialogTitle }}\n <v-spacer />\n <v-btn icon=\"mdi-close\" variant=\"text\" @click=\"gapDialog = false\" />\n </v-card-title>\n <v-card-text style=\"max-height: 80vh; overflow-y: auto\">\n <v-progress-linear\n v-if=\"gapLoading\"\n :model-value=\"gapProgress\"\n :indeterminate=\"gapProgress === 0\"\n class=\"mb-4\"\n />\n <div v-if=\"gapError\" class=\"text-red monospace mb-4\">\n Error: {{ gapError }}\n </div>\n\n <!-- Single table result -->\n <template v-if=\"!gapLoading && !gapError && gapSummary\">\n <v-table density=\"compact\" class=\"monospace mb-4\">\n <tbody>\n <tr>\n <td class=\"font-weight-bold\">First Record</td>\n <td>{{ gapSummary.firstTs }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">Last Record</td>\n <td>{{ gapSummary.lastTs }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">Total Time Span</td>\n <td>{{ gapSummary.timeSpan }}</td>\n </tr>\n <tr>\n <td class=\"font-weight-bold\">Gaps Found</td>\n <td>{{ gapSummary.gaps.length }}</td>\n </tr>\n </tbody>\n </v-table>\n <div v-if=\"gapSummary.gaps.length\">\n <h4 class=\"text-subtitle-1 font-weight-bold mb-2\">\n Data Gaps (periods with no data)\n </h4>\n <v-data-table\n :headers=\"gapHeaders\"\n :items=\"gapSummary.gaps\"\n class=\"monospace\"\n :items-per-page=\"20\"\n density=\"compact\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n v-if=\"isTlmTable(gapDialogTitle)\"\n icon=\"mdi-wrench\"\n size=\"small\"\n variant=\"text\"\n data-test=\"gap-repair\"\n title=\"Repair (reingest raw logs)\"\n @click=\"openRepair(item, gapDialogTitle)\"\n />\n </template>\n </v-data-table>\n </div>\n <div v-else class=\"text-medium-emphasis\">\n No data gaps detected (sampled at {{ gapSampleInterval }}\n intervals).\n </div>\n </template>\n\n <!-- Group results (only tables with gaps) -->\n <template v-if=\"!gapLoading && !gapError && gapGroupResults\">\n <div\n v-if=\"gapGroupResults.withGaps.length === 0\"\n class=\"text-medium-emphasis\"\n >\n No data gaps detected across\n {{ gapGroupResults.totalTables }} tables (sampled at\n {{ gapSampleInterval }} intervals).\n </div>\n <div v-else>\n <div class=\"mb-4 text-medium-emphasis\">\n {{ gapGroupResults.withGaps.length }} of\n {{ gapGroupResults.totalTables }} tables have data gaps.\n </div>\n <div\n v-for=\"result in gapGroupResults.withGaps\"\n :key=\"result.tableName\"\n class=\"mb-6\"\n >\n <h4 class=\"text-subtitle-1 font-weight-bold mb-1\">\n {{ result.packet }}\n </h4>\n <div class=\"text-medium-emphasis monospace mb-2\">\n {{ result.firstTs }} to {{ result.lastTs }} ({{\n result.timeSpan\n }}) &mdash; {{ result.gaps.length }} gap(s)\n </div>\n <v-data-table\n :headers=\"gapHeaders\"\n :items=\"result.gaps\"\n class=\"monospace\"\n :items-per-page=\"10\"\n density=\"compact\"\n >\n <template #item.actions=\"{ item }\">\n <v-btn\n v-if=\"isTlmTable(result.tableName)\"\n icon=\"mdi-wrench\"\n size=\"small\"\n variant=\"text\"\n data-test=\"gap-repair\"\n title=\"Repair (reingest raw logs)\"\n @click=\"openRepair(item, result.tableName)\"\n />\n </template>\n </v-data-table>\n </div>\n </div>\n </template>\n </v-card-text>\n </v-card>\n </v-dialog>\n\n <repair-gap-dialog\n v-if=\"repairContext\"\n v-model=\"repairDialog\"\n :context=\"repairContext\"\n @complete=\"onRepairComplete\"\n />\n </div>\n</template>\n\n<script>\nimport RepairGapDialog from './RepairGapDialog.vue'\nimport { execSql } from './tsdbApi'\n\nexport default {\n components: {\n RepairGapDialog,\n },\n data() {\n return {\n metricsRows: [],\n metricsError: null,\n metricsLoading: false,\n metricsGroupBy: [{ key: 'target', order: 'asc' }],\n metricsHeaders: [\n { title: 'Packet', key: 'packet' },\n { title: 'Table Name', key: 'tableName' },\n { title: 'Partition Count', key: 'partitionCount' },\n { title: 'Row Count', key: 'rowCount' },\n { title: 'Disk Size', key: 'diskSize' },\n { title: 'Actions', key: 'actions', sortable: false },\n ],\n gapDialog: false,\n gapDialogTitle: '',\n gapLoading: false,\n gapProgress: 0,\n gapError: null,\n gapSummary: null,\n gapGroupResults: null,\n gapHeaders: [\n { title: 'Gap Start', key: 'start' },\n { title: 'Gap End', key: 'end' },\n { title: 'Duration', key: 'duration' },\n { title: 'Actions', key: 'actions', sortable: false, width: 80 },\n ],\n repairDialog: false,\n repairContext: null,\n gapSampleInterval: '1m',\n db_shard: '0',\n }\n },\n computed: {\n sections() {\n return [\n {\n title: 'Telemetry',\n items: this.metricsRows.filter((row) => row.type === 'TLM'),\n },\n {\n title: 'Commands',\n items: this.metricsRows.filter((row) => row.type === 'CMD'),\n },\n ]\n },\n },\n mounted() {\n this.fetchMetrics()\n },\n methods: {\n groupRowCount(items) {\n return items.reduce(\n (sum, row) => sum + Number((row.raw || row).rowCount || 0),\n 0,\n )\n },\n groupDiskSize(items) {\n return items.reduce(\n (sum, row) => sum + Number((row.raw || row).diskSize || 0),\n 0,\n )\n },\n formatBytes(bytes) {\n if (bytes === 0) return '0 B'\n const units = ['B', 'KB', 'MB', 'GB', 'TB']\n const k = 1024\n const i = Math.floor(Math.log(bytes) / Math.log(k))\n const value = bytes / Math.pow(k, i)\n return `${value.toFixed(i === 0 ? 0 : 1)} ${units[i]}`\n },\n fetchMetrics() {\n this.metricsError = null\n this.metricsRows = []\n this.metricsLoading = true\n execSql(\n 'SELECT tableName, partitionCount, rowCount, diskSize FROM table_storage;',\n this.db_shard,\n )\n .then((response) => {\n const cols = response.data.columns\n this.metricsRows = response.data.rows.map((row) => {\n const obj = {}\n cols.forEach((col, i) => {\n obj[col] = row[i]\n })\n const parts = (obj.tableName || '').split('__')\n obj.type = parts[1] || ''\n obj.target = parts[2] || ''\n obj.packet = parts[3] || ''\n return obj\n })\n })\n .catch((error) => {\n if (error.response && error.response.data) {\n this.metricsError = error.response.data.message\n } else {\n this.metricsError = error.message\n }\n })\n .finally(() => {\n this.metricsLoading = false\n })\n },\n dropTable(tableName) {\n return execSql(`DROP TABLE '${tableName}';`, this.db_shard)\n },\n deleteTable(tableName) {\n let target = tableName.split('__')[2] || tableName\n let packet = tableName.split('__')[3] || tableName\n this.$dialog\n .confirm(\n `Are you sure you want to drop table: ${tableName}? This removes ALL decommutated data for ${target} ${packet}!`,\n {\n okText: 'Delete',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n this.dropTable(tableName)\n .then(() => {\n this.metricsRows = this.metricsRows.filter(\n (row) => row.tableName !== tableName,\n )\n })\n .catch((error) => {\n if (error.response && error.response.data) {\n this.metricsError = error.response.data.message\n } else {\n this.metricsError = error.message\n }\n })\n })\n },\n deleteGroup(items) {\n const tableNames = items.map((item) => (item.raw || item).tableName)\n let target = tableNames[0].split('__')[2]\n this.$dialog\n .confirm(\n `Are you sure you want to drop ${tableNames.length} tables? This removes ALL decommutated data for ${target}!\\n\\n${tableNames.join('\\n')}`,\n {\n okText: 'Delete',\n cancelText: 'Cancel',\n },\n )\n .then(() => {\n const nameSet = new Set(tableNames)\n Promise.all(tableNames.map((name) => this.dropTable(name)))\n .then(() => {\n this.metricsRows = this.metricsRows.filter(\n (row) => !nameSet.has(row.tableName),\n )\n })\n .catch((error) => {\n if (error.response && error.response.data) {\n this.metricsError = error.response.data.message\n } else {\n this.metricsError = error.message\n }\n })\n })\n },\n formatDuration(ms) {\n const seconds = Math.floor(ms / 1000)\n const days = Math.floor(seconds / 86400)\n const hours = Math.floor((seconds % 86400) / 3600)\n const minutes = Math.floor((seconds % 3600) / 60)\n const parts = []\n if (days) parts.push(`${days}d`)\n if (hours) parts.push(`${hours}h`)\n if (minutes) parts.push(`${minutes}m`)\n if (!parts.length) parts.push(`${seconds}s`)\n return parts.join(' ')\n },\n formatTimestamp(ts) {\n return new Date(ts).toISOString().replace('T', ' ').replace('.000Z', 'Z')\n },\n // Parse a QuestDB SAMPLE BY duration like \"1m\", \"30s\", \"2h\" into ms.\n // Returns null if malformed.\n parseSampleIntervalMs(input) {\n const match = String(input || '')\n .trim()\n .match(/^(\\d+)\\s*([smhd])$/i)\n if (!match) return null\n const value = Number.parseInt(match[1], 10)\n const multipliers = { s: 1_000, m: 60_000, h: 3_600_000, d: 86_400_000 }\n return value * multipliers[match[2].toLowerCase()]\n },\n async fetchTableGaps(tableName) {\n const interval = (this.gapSampleInterval || '1m').trim()\n const bucketMs = this.parseSampleIntervalMs(interval)\n if (!bucketMs) {\n throw new Error(\n `Invalid sample interval '${interval}'. Use a number followed by s, m, h, or d (e.g. 5s, 1m, 2h).`,\n )\n }\n\n // Get first and last timestamps\n const rangeResp = await execSql(\n `SELECT first(PACKET_TIMESECONDS) as first_ts, last(PACKET_TIMESECONDS) as last_ts FROM '${tableName}';`,\n this.db_shard,\n )\n const rangeCols = rangeResp.data.columns\n const rangeRow = rangeResp.data.rows[0]\n const rangeObj = {}\n rangeCols.forEach((col, i) => {\n rangeObj[col] = rangeRow[i]\n })\n const firstTs = rangeObj.first_ts\n const lastTs = rangeObj.last_ts\n const totalMs = new Date(lastTs) - new Date(firstTs)\n\n // Sample by the user-chosen interval with FILL(NULL) to detect gaps.\n const gapResp = await execSql(\n `(SELECT PACKET_TIMESECONDS, count() as cnt FROM '${tableName}' SAMPLE BY ${interval} FILL(NULL)) WHERE cnt IS NULL`,\n this.db_shard,\n )\n const gapCols = gapResp.data.columns\n const gapRows = gapResp.data.rows.map((row) => {\n const obj = {}\n gapCols.forEach((col, i) => {\n obj[col] = row[i]\n })\n return obj\n })\n\n // Group contiguous null-bucket timestamps into gaps. A delta > bucketMs\n // between consecutive empty buckets means a new gap has started.\n const gaps = []\n const buildGap = (startRaw, endRaw) => {\n const startMs = new Date(startRaw).getTime()\n const endMs = new Date(endRaw).getTime() + bucketMs\n return {\n start: this.formatTimestamp(startRaw),\n end: this.formatTimestamp(new Date(endMs)),\n duration: this.formatDuration(endMs - startMs),\n // ISO strings avoid the JS precision cliff on nsec integers.\n startIso: new Date(startMs).toISOString(),\n endIso: new Date(endMs).toISOString(),\n }\n }\n if (gapRows.length > 0) {\n let gapStart = gapRows[0].PACKET_TIMESECONDS\n let gapEnd = gapStart\n for (let i = 1; i < gapRows.length; i++) {\n const prev = new Date(gapEnd)\n const curr = new Date(gapRows[i].PACKET_TIMESECONDS)\n if (curr - prev > bucketMs) {\n gaps.push(buildGap(gapStart, gapEnd))\n gapStart = gapRows[i].PACKET_TIMESECONDS\n }\n gapEnd = gapRows[i].PACKET_TIMESECONDS\n }\n gaps.push(buildGap(gapStart, gapEnd))\n }\n\n return {\n firstTs: this.formatTimestamp(firstTs),\n lastTs: this.formatTimestamp(lastTs),\n timeSpan: this.formatDuration(totalMs),\n gaps,\n }\n },\n async analyzeDataGap(tableName) {\n this.gapDialogTitle = tableName\n this.gapDialog = true\n this.gapLoading = true\n this.gapProgress = 0\n this.gapError = null\n this.gapSummary = null\n this.gapGroupResults = null\n try {\n this.gapSummary = await this.fetchTableGaps(tableName)\n } catch (error) {\n this.gapError = error.response?.data?.message || error.message\n } finally {\n this.gapLoading = false\n }\n },\n async analyzeGroupDataGap(items) {\n const tableNames = items.map((item) => (item.raw || item).tableName)\n const target = (items[0].raw || items[0]).target\n this.gapDialogTitle = `${target} (${tableNames.length} tables)`\n this.gapDialog = true\n this.gapLoading = true\n this.gapProgress = 0\n this.gapError = null\n this.gapSummary = null\n this.gapGroupResults = null\n try {\n const withGaps = []\n for (let i = 0; i < tableNames.length; i++) {\n this.gapProgress = Math.round(((i + 1) / tableNames.length) * 100)\n try {\n const result = await this.fetchTableGaps(tableNames[i])\n if (result.gaps.length > 0) {\n const parts = tableNames[i].split('__')\n withGaps.push({\n tableName: tableNames[i],\n packet: parts[3] || tableNames[i],\n ...result,\n })\n }\n } catch {\n // Skip tables that error (e.g. empty tables)\n }\n }\n this.gapGroupResults = {\n totalTables: tableNames.length,\n withGaps,\n }\n } catch (error) {\n this.gapError = error.response?.data?.message || error.message\n } finally {\n this.gapLoading = false\n }\n },\n // scope__TLM|CMD__TARGET__PACKET → { scope, cmdOrTlm, target, packet }\n parseTableName(tableName) {\n const parts = tableName.split('__')\n if (parts.length < 4) return null\n return {\n scope: parts[0],\n cmdOrTlm: parts[1],\n target: parts[2],\n packet: parts[3],\n }\n },\n isTlmTable(tableName) {\n const parsed = this.parseTableName(tableName)\n return parsed?.cmdOrTlm === 'TLM'\n },\n openRepair(gap, tableName) {\n const parsed = this.parseTableName(tableName)\n if (!parsed) return\n this.repairContext = {\n tableName,\n ...parsed,\n gap,\n }\n this.repairDialog = true\n },\n onRepairComplete() {\n // Re-run gap analysis on whichever view is currently showing.\n if (this.gapGroupResults) return // group analysis is expensive; let the user re-run manually\n if (this.gapDialogTitle) this.analyzeDataGap(this.gapDialogTitle)\n },\n },\n}\n</script>\n\n<style scoped>\n.monospace {\n font-family: monospace;\n font-size: 14px;\n}\n.text-red {\n color: rgb(var(--v-theme-error));\n}\n</style>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-card>\n <v-card-title> Send SQL Queries to QuestDB </v-card-title>\n <v-card-subtitle>\n THIS IS DANGEROUS! This allows you to interact directly with the\n underlying QuestDB time series database, making it easy to modify or\n delete data.\n <br /><br />\n Enter SQL queries like:\n <code> SELECT * FROM DEFAULT__TLM__INST__HEALTH_STATUS LIMIT 10 </code>\n or\n <code>SHOW TABLES</code>\n </v-card-subtitle>\n <v-card-text class=\"pb-0 ml-2\">\n <v-textarea\n v-model=\"sqlText\"\n hide-details\n label=\"SQL query\"\n class=\"monospace\"\n rows=\"3\"\n @keydown=\"commandKeydown\"\n />\n <div v-if=\"errorMessage\" class=\"mt-2 text-red monospace\">\n Error: {{ errorMessage }}\n </div>\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-btn\n :disabled=\"!sqlText.length\"\n :loading=\"loading\"\n color=\"success\"\n variant=\"text\"\n data-test=\"tsdb-execute\"\n @click=\"executeQuery\"\n >\n Execute\n </v-btn>\n <v-text-field\n v-model=\"db_shard\"\n type=\"number\"\n min=\"0\"\n label=\"DB Shard\"\n hide-details\n density=\"compact\"\n style=\"max-width: 100px\"\n class=\"ml-4\"\n />\n </v-card-actions>\n\n <v-data-table\n v-if=\"columns.length\"\n :headers=\"tableHeaders\"\n :items=\"rows\"\n class=\"monospace\"\n :items-per-page=\"50\"\n density=\"compact\"\n >\n </v-data-table>\n </v-card>\n</template>\n\n<script>\nimport { execSql } from './tsdbApi'\n\nexport default {\n data() {\n return {\n sqlText: '',\n db_shard: '0',\n columns: [],\n rows: [],\n errorMessage: null,\n loading: false,\n }\n },\n computed: {\n tableHeaders() {\n return this.columns.map((col) => ({\n title: col,\n key: col,\n }))\n },\n },\n methods: {\n commandKeydown($event) {\n if (($event.metaKey || $event.ctrlKey) && $event.key === 'Enter') {\n this.executeQuery()\n }\n },\n executeQuery() {\n this.errorMessage = null\n this.columns = []\n this.rows = []\n this.loading = true\n execSql(this.sqlText, this.db_shard)\n .then((response) => {\n this.columns = response.data.columns\n this.rows = response.data.rows.map((row) => {\n const obj = {}\n this.columns.forEach((col, i) => {\n obj[col] = row[i]\n })\n return obj\n })\n })\n .catch((error) => {\n if (error.response && error.response.data) {\n this.errorMessage = error.response.data.message\n } else {\n this.errorMessage = error.message\n }\n })\n .finally(() => {\n this.loading = false\n })\n },\n },\n}\n</script>\n\n<style scoped>\n.monospace {\n font-family: monospace;\n font-size: 14px;\n}\n.text-red {\n color: rgb(var(--v-theme-error));\n}\n</style>\n","<!--\n# Copyright 2026 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <v-tabs v-model=\"activeTab\">\n <v-tab value=\"metrics\" data-test=\"tsdb-metrics-tab\">Metrics</v-tab>\n <v-tab value=\"queries\" data-test=\"tsdb-queries-tab\">Queries</v-tab>\n </v-tabs>\n <v-window v-model=\"activeTab\">\n <v-window-item value=\"metrics\">\n <tsdb-metrics />\n </v-window-item>\n <v-window-item value=\"queries\">\n <tsdb-queries />\n </v-window-item>\n </v-window>\n </div>\n</template>\n\n<script>\nimport TsdbMetrics from './tsdb/TsdbMetrics.vue'\nimport TsdbQueries from './tsdb/TsdbQueries.vue'\n\nexport default {\n components: {\n TsdbMetrics,\n TsdbQueries,\n },\n data() {\n return {\n activeTab: 'metrics',\n }\n },\n}\n</script>\n"],"names":["PHASE_LABELS","_sfc_main","phase","remaining","enabledAt","cooldown","nowSec","enabledSec","open","completed","response","Api","c","error","filenames","key","_hoisted_4","_hoisted_5","_hoisted_9","_hoisted_11","_createBlock","_component_v_dialog","$props","_createVNode","_component_v_card","_component_v_card_title","_toDisplayString","_component_v_card_subtitle","_component_v_card_text","$data","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_component_v_table","_createElementVNode","_cache","$options","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_10","w","idx","_component_v_progress_linear","_hoisted_2","_component_v_progress_circular","_hoisted_3","_component_v_data_table","$event","_component_v_radio_group","_component_v_radio","_component_v_card_actions","_component_v_spacer","_component_v_btn","execSql","sql","db_shard","retries","attempt","url","msg","r","RepairGapDialog","row","items","sum","bytes","units","k","i","cols","obj","col","parts","tableName","target","packet","tableNames","item","nameSet","name","ms","seconds","days","hours","minutes","ts","input","match","interval","bucketMs","rangeResp","rangeCols","rangeRow","rangeObj","firstTs","lastTs","totalMs","gapResp","gapCols","gapRows","gaps","buildGap","startRaw","endRaw","startMs","endMs","gapStart","gapEnd","prev","withGaps","result","gap","parsed","_hoisted_12","_hoisted_13","_component_v_text_field","_renderList","section","_normalizeClass","_withCtx","columns","toggleGroup","isGroupOpen","_component_v_menu","props","_component_v_icon","_mergeProps","_component_v_list","_component_v_list_item","_createTextVNode","_component_repair_gap_dialog","_component_v_textarea","TsdbMetrics","TsdbQueries","_component_v_tabs","_component_v_tab","_component_v_window","_component_v_window_item","_component_tsdb_metrics","_component_tsdb_queries"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { resolveComponent as n, openBlock as m, createBlock as _, withCtx as r, createVNode as e, createElementVNode as t, createElementBlock as C, toDisplayString as b, createCommentVNode as V, createTextVNode as s } from "vue";
2
- import "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-BJxLUZhh.js";
2
+ import "./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-DskbVSHX.js";
3
3
  import { _ as w } from "./CustomIcon-DTR361si.js";
4
4
  const x = {
5
5
  props: {
@@ -95,4 +95,4 @@ const A = /* @__PURE__ */ w(x, [["render", B], ["__scopeId", "data-v-c790a82f"]]
95
95
  export {
96
96
  A as U
97
97
  };
98
- //# sourceMappingURL=UpgradeToEnterpriseDialog-D_S574Zb.js.map
98
+ //# sourceMappingURL=UpgradeToEnterpriseDialog-BUuXsGPY.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeToEnterpriseDialog-D_S574Zb.js","sources":["../src/components/UpgradeToEnterpriseDialog.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"650px\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Upgrade to COSMOS Enterprise </span>\n <v-spacer />\n </v-toolbar>\n <v-card>\n <v-card-text class=\"mt-4\">\n <div class=\"logo\">\n <img :src=\"logo\" alt=\"OpenC3\" />\n <div class=\"cosmos\">COSMOS Enterprise</div>\n </div>\n <div class=\"pb-4\">Thank you for using the COSMOS Core!</div>\n <div v-if=\"reason\">\n <div class=\"pb-4 pl-4 reason\">\n {{ reason }}\n </div>\n </div>\n COSMOS Enterprise removes all restrictions and offers users with role\n based access control, scaling on kubernetes, cloud platform support,\n multiple scopes, Calendar and Autonomic, various integrations with\n common protocols and hardware, commercial licensing, and much more!<br /><br />\n Learn more at\n <a href=\"https://openc3.com/enterprise\">\n https://openc3.com/enterprise\n </a>\n and help support COSMOS Core by supporting our business. Contact us at\n <a href=\"mailto:support@openc3.com\">support@openc3.com</a> for more\n information about COSMOS Enterprise, COSMOS training, COSMOS support,\n and custom COSMOS development.\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"flat\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nexport default {\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n reason: {\n type: String,\n default: null,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n logo: '/img/logo.png',\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n },\n}\n</script>\n\n<style scoped>\n.logo {\n float: right;\n margin: 15px;\n}\n\n.cosmos {\n text-align: center;\n font-size: 18pt;\n}\n\n.reason {\n font-weight: bold;\n}\n</style>\n"],"names":["_sfc_main","value","_hoisted_1","_hoisted_4","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_toolbar","_component_v_spacer","_cache","_createElementVNode","_component_v_card","_component_v_card_text","$data","$props","_createElementBlock","_hoisted_3","_toDisplayString","_component_v_card_actions","_component_v_btn"],"mappings":";;;AAsDA,MAAKA,IAAU;AAAA,EACb,OAAO;AAAA,IACL,YAAY;AAAA;AAAA,IACZ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;;EAGb,OAAO,CAAC,mBAAmB;AAAA,EAC3B,OAAO;AACL,WAAO;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AACJ,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAIC,GAAO;AACT,aAAK,MAAM,qBAAqBA,CAAK;AAAA,MACvC;AAAA;;AAGN,GAxDaC,IAAA,EAAA,OAAM,OAAM,gCAMVC,IAAA,EAAA,OAAM,mBAAkB;;;cAdrCC,EAoCWC,GAAA;AAAA,gBApCQC,EAAA;AAAA,kDAAAA,EAAA,OAAIC;AAAA,IAAE,OAAM;AAAA;eAC7B,MAIY;AAAA,MAJZC,EAIYC,GAAA,EAJD,QAAO,KAAI,GAAA;AAAA,mBACpB,MAAY;AAAA,UAAZD,EAAYE,CAAA;AAAA,UACZC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAA2C,cAArC,kCAA8B,EAAA;AAAA,UACpCJ,EAAYE,CAAA;AAAA;;;MAEdF,EA6BSK,GAAA,MAAA;AAAA,mBA5BP,MAuBc;AAAA,UAvBdL,EAuBcM,GAAA,EAvBD,OAAM,OAAM,GAAA;AAAA,uBACvB,MAGM;AAAA,cAHNF,EAGM,OAHNV,GAGM;AAAA,gBAFJU,EAAgC,OAAA;AAAA,kBAA1B,KAAKG,EAAA;AAAA,kBAAM,KAAI;AAAA;gBACrBJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAA2C,OAAA,EAAtC,OAAM,YAAS,qBAAiB,EAAA;AAAA;cAEvCD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAA4D,OAAA,EAAvD,OAAM,OAAM,GAAC,wCAAoC,EAAA;AAAA,cAC3CI,EAAA,eAAXC,EAIM,OAAAC,GAAA;AAAA,gBAHJN,EAEM,OAFNT,GAEMgB,EADDH,EAAA,MAAM,GAAA,CAAA;AAAA;gCAEP,sRAI6D,EAAA;AAAA,8BAAAJ,EAAM,MAAA,MAAA,MAAA,EAAA;AAAA,8BAAAA,EAAM,MAAA,MAAA,MAAA,EAAA;AAAA,gCAAA,mBAE/E,EAAA;AAAA,cAAAD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAEI,KAAA,EAFD,MAAK,gCAA+B,GAAC,mCAExC,EAAA;AAAA,kCAAI,4EAEJ,EAAA;AAAA,cAAAD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAC,EAA0D,KAAA,EAAvD,MAAK,4BAA2B,GAAC,sBAAkB,EAAA;AAAA,kCAAI,mHAG5D,EAAA;AAAA;;;UACAJ,EAGiBY,GAAA,EAHD,OAAM,OAAM,GAAA;AAAA,uBAC1B,MAAY;AAAA,cAAZZ,EAAYE,CAAA;AAAA,cACZF,EAAwDa,GAAA;AAAA,gBAAjD,SAAQ;AAAA,gBAAQ,SAAKV,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAJ,MAAED,EAAA,OAAI,CAAIA,EAAA;AAAA;2BAAM,MAAI,CAAA,GAAAK,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,oBAAJ,QAAI,EAAA;AAAA;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"UpgradeToEnterpriseDialog-BUuXsGPY.js","sources":["../src/components/UpgradeToEnterpriseDialog.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"650px\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Upgrade to COSMOS Enterprise </span>\n <v-spacer />\n </v-toolbar>\n <v-card>\n <v-card-text class=\"mt-4\">\n <div class=\"logo\">\n <img :src=\"logo\" alt=\"OpenC3\" />\n <div class=\"cosmos\">COSMOS Enterprise</div>\n </div>\n <div class=\"pb-4\">Thank you for using the COSMOS Core!</div>\n <div v-if=\"reason\">\n <div class=\"pb-4 pl-4 reason\">\n {{ reason }}\n </div>\n </div>\n COSMOS Enterprise removes all restrictions and offers users with role\n based access control, scaling on kubernetes, cloud platform support,\n multiple scopes, Calendar and Autonomic, various integrations with\n common protocols and hardware, commercial licensing, and much more!<br /><br />\n Learn more at\n <a href=\"https://openc3.com/enterprise\">\n https://openc3.com/enterprise\n </a>\n and help support COSMOS Core by supporting our business. Contact us at\n <a href=\"mailto:support@openc3.com\">support@openc3.com</a> for more\n information about COSMOS Enterprise, COSMOS training, COSMOS support,\n and custom COSMOS development.\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"flat\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nexport default {\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n reason: {\n type: String,\n default: null,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n logo: '/img/logo.png',\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n },\n}\n</script>\n\n<style scoped>\n.logo {\n float: right;\n margin: 15px;\n}\n\n.cosmos {\n text-align: center;\n font-size: 18pt;\n}\n\n.reason {\n font-weight: bold;\n}\n</style>\n"],"names":["_sfc_main","value","_hoisted_1","_hoisted_4","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_toolbar","_component_v_spacer","_cache","_createElementVNode","_component_v_card","_component_v_card_text","$data","$props","_createElementBlock","_hoisted_3","_toDisplayString","_component_v_card_actions","_component_v_btn"],"mappings":";;;AAsDA,MAAKA,IAAU;AAAA,EACb,OAAO;AAAA,IACL,YAAY;AAAA;AAAA,IACZ,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA;;EAGb,OAAO,CAAC,mBAAmB;AAAA,EAC3B,OAAO;AACL,WAAO;AAAA,MACL,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AACJ,eAAO,KAAK;AAAA,MACd;AAAA,MACA,IAAIC,GAAO;AACT,aAAK,MAAM,qBAAqBA,CAAK;AAAA,MACvC;AAAA;;AAGN,GAxDaC,IAAA,EAAA,OAAM,OAAM,gCAMVC,IAAA,EAAA,OAAM,mBAAkB;;;cAdrCC,EAoCWC,GAAA;AAAA,gBApCQC,EAAA;AAAA,kDAAAA,EAAA,OAAIC;AAAA,IAAE,OAAM;AAAA;eAC7B,MAIY;AAAA,MAJZC,EAIYC,GAAA,EAJD,QAAO,KAAI,GAAA;AAAA,mBACpB,MAAY;AAAA,UAAZD,EAAYE,CAAA;AAAA,UACZC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAA2C,cAArC,kCAA8B,EAAA;AAAA,UACpCJ,EAAYE,CAAA;AAAA;;;MAEdF,EA6BSK,GAAA,MAAA;AAAA,mBA5BP,MAuBc;AAAA,UAvBdL,EAuBcM,GAAA,EAvBD,OAAM,OAAM,GAAA;AAAA,uBACvB,MAGM;AAAA,cAHNF,EAGM,OAHNV,GAGM;AAAA,gBAFJU,EAAgC,OAAA;AAAA,kBAA1B,KAAKG,EAAA;AAAA,kBAAM,KAAI;AAAA;gBACrBJ,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAA2C,OAAA,EAAtC,OAAM,YAAS,qBAAiB,EAAA;AAAA;cAEvCD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAA4D,OAAA,EAAvD,OAAM,OAAM,GAAC,wCAAoC,EAAA;AAAA,cAC3CI,EAAA,eAAXC,EAIM,OAAAC,GAAA;AAAA,gBAHJN,EAEM,OAFNT,GAEMgB,EADDH,EAAA,MAAM,GAAA,CAAA;AAAA;gCAEP,sRAI6D,EAAA;AAAA,8BAAAJ,EAAM,MAAA,MAAA,MAAA,EAAA;AAAA,8BAAAA,EAAM,MAAA,MAAA,MAAA,EAAA;AAAA,gCAAA,mBAE/E,EAAA;AAAA,cAAAD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAEI,KAAA,EAFD,MAAK,gCAA+B,GAAC,mCAExC,EAAA;AAAA,kCAAI,4EAEJ,EAAA;AAAA,cAAAD,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAC,EAA0D,KAAA,EAAvD,MAAK,4BAA2B,GAAC,sBAAkB,EAAA;AAAA,kCAAI,mHAG5D,EAAA;AAAA;;;UACAJ,EAGiBY,GAAA,EAHD,OAAM,OAAM,GAAA;AAAA,uBAC1B,MAAY;AAAA,cAAZZ,EAAYE,CAAA;AAAA,cACZF,EAAwDa,GAAA;AAAA,gBAAjD,SAAQ;AAAA,gBAAQ,SAAKV,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAJ,MAAED,EAAA,OAAI,CAAIA,EAAA;AAAA;2BAAM,MAAI,CAAA,GAAAK,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAA;AAAA,oBAAJ,QAAI,EAAA;AAAA;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";const e=require("vue");require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-eKtA_EtD.cjs");const v=require("./CustomIcon-8F08upeg.cjs"),V={props:{modelValue:Boolean,reason:{type:String,default:null}},emits:["update:modelValue"],data(){return{logo:"/img/logo.png"}},computed:{show:{get(){return this.modelValue},set(r){this.$emit("update:modelValue",r)}}}},C={class:"logo"},g=["src"],N={key:0},f={class:"pb-4 pl-4 reason"};function O(r,o,s,_,a,t){const n=e.resolveComponent("v-spacer"),d=e.resolveComponent("v-toolbar"),p=e.resolveComponent("v-card-text"),i=e.resolveComponent("v-btn"),m=e.resolveComponent("v-card-actions"),u=e.resolveComponent("v-card"),c=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(c,{modelValue:t.show,"onUpdate:modelValue":o[1]||(o[1]=l=>t.show=l),width:"650px"},{default:e.withCtx(()=>[e.createVNode(d,{height:"24"},{default:e.withCtx(()=>[e.createVNode(n),o[2]||(o[2]=e.createElementVNode("span",null," Upgrade to COSMOS Enterprise ",-1)),e.createVNode(n)]),_:1}),e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(p,{class:"mt-4"},{default:e.withCtx(()=>[e.createElementVNode("div",C,[e.createElementVNode("img",{src:a.logo,alt:"OpenC3"},null,8,g),o[3]||(o[3]=e.createElementVNode("div",{class:"cosmos"},"COSMOS Enterprise",-1))]),o[4]||(o[4]=e.createElementVNode("div",{class:"pb-4"},"Thank you for using the COSMOS Core!",-1)),s.reason?(e.openBlock(),e.createElementBlock("div",N,[e.createElementVNode("div",f,e.toDisplayString(s.reason),1)])):e.createCommentVNode("",!0),o[5]||(o[5]=e.createTextVNode(" COSMOS Enterprise removes all restrictions and offers users with role based access control, scaling on kubernetes, cloud platform support, multiple scopes, Calendar and Autonomic, various integrations with common protocols and hardware, commercial licensing, and much more!",-1)),o[6]||(o[6]=e.createElementVNode("br",null,null,-1)),o[7]||(o[7]=e.createElementVNode("br",null,null,-1)),o[8]||(o[8]=e.createTextVNode(" Learn more at ",-1)),o[9]||(o[9]=e.createElementVNode("a",{href:"https://openc3.com/enterprise"}," https://openc3.com/enterprise ",-1)),o[10]||(o[10]=e.createTextVNode(" and help support COSMOS Core by supporting our business. Contact us at ",-1)),o[11]||(o[11]=e.createElementVNode("a",{href:"mailto:support@openc3.com"},"support@openc3.com",-1)),o[12]||(o[12]=e.createTextVNode(" for more information about COSMOS Enterprise, COSMOS training, COSMOS support, and custom COSMOS development. ",-1))]),_:1}),e.createVNode(m,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(n),e.createVNode(i,{variant:"flat",onClick:o[0]||(o[0]=l=>t.show=!t.show)},{default:e.withCtx(()=>[...o[13]||(o[13]=[e.createTextVNode(" Ok ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const S=v._export_sfc(V,[["render",O],["__scopeId","data-v-c790a82f"]]);exports.UpgradeToEnterpriseDialog=S;
2
- //# sourceMappingURL=UpgradeToEnterpriseDialog-XJb6gVCY.cjs.map
1
+ "use strict";const e=require("vue");require("./UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_c790a82f_lang-CTNR19Zt.cjs");const v=require("./CustomIcon-8F08upeg.cjs"),V={props:{modelValue:Boolean,reason:{type:String,default:null}},emits:["update:modelValue"],data(){return{logo:"/img/logo.png"}},computed:{show:{get(){return this.modelValue},set(r){this.$emit("update:modelValue",r)}}}},C={class:"logo"},g=["src"],N={key:0},f={class:"pb-4 pl-4 reason"};function O(r,o,s,_,a,t){const n=e.resolveComponent("v-spacer"),d=e.resolveComponent("v-toolbar"),p=e.resolveComponent("v-card-text"),i=e.resolveComponent("v-btn"),m=e.resolveComponent("v-card-actions"),u=e.resolveComponent("v-card"),c=e.resolveComponent("v-dialog");return e.openBlock(),e.createBlock(c,{modelValue:t.show,"onUpdate:modelValue":o[1]||(o[1]=l=>t.show=l),width:"650px"},{default:e.withCtx(()=>[e.createVNode(d,{height:"24"},{default:e.withCtx(()=>[e.createVNode(n),o[2]||(o[2]=e.createElementVNode("span",null," Upgrade to COSMOS Enterprise ",-1)),e.createVNode(n)]),_:1}),e.createVNode(u,null,{default:e.withCtx(()=>[e.createVNode(p,{class:"mt-4"},{default:e.withCtx(()=>[e.createElementVNode("div",C,[e.createElementVNode("img",{src:a.logo,alt:"OpenC3"},null,8,g),o[3]||(o[3]=e.createElementVNode("div",{class:"cosmos"},"COSMOS Enterprise",-1))]),o[4]||(o[4]=e.createElementVNode("div",{class:"pb-4"},"Thank you for using the COSMOS Core!",-1)),s.reason?(e.openBlock(),e.createElementBlock("div",N,[e.createElementVNode("div",f,e.toDisplayString(s.reason),1)])):e.createCommentVNode("",!0),o[5]||(o[5]=e.createTextVNode(" COSMOS Enterprise removes all restrictions and offers users with role based access control, scaling on kubernetes, cloud platform support, multiple scopes, Calendar and Autonomic, various integrations with common protocols and hardware, commercial licensing, and much more!",-1)),o[6]||(o[6]=e.createElementVNode("br",null,null,-1)),o[7]||(o[7]=e.createElementVNode("br",null,null,-1)),o[8]||(o[8]=e.createTextVNode(" Learn more at ",-1)),o[9]||(o[9]=e.createElementVNode("a",{href:"https://openc3.com/enterprise"}," https://openc3.com/enterprise ",-1)),o[10]||(o[10]=e.createTextVNode(" and help support COSMOS Core by supporting our business. Contact us at ",-1)),o[11]||(o[11]=e.createElementVNode("a",{href:"mailto:support@openc3.com"},"support@openc3.com",-1)),o[12]||(o[12]=e.createTextVNode(" for more information about COSMOS Enterprise, COSMOS training, COSMOS support, and custom COSMOS development. ",-1))]),_:1}),e.createVNode(m,{class:"px-2"},{default:e.withCtx(()=>[e.createVNode(n),e.createVNode(i,{variant:"flat",onClick:o[0]||(o[0]=l=>t.show=!t.show)},{default:e.withCtx(()=>[...o[13]||(o[13]=[e.createTextVNode(" Ok ",-1)])]),_:1})]),_:1})]),_:1})]),_:1},8,["modelValue"])}const S=v._export_sfc(V,[["render",O],["__scopeId","data-v-c790a82f"]]);exports.UpgradeToEnterpriseDialog=S;
2
+ //# sourceMappingURL=UpgradeToEnterpriseDialog-DHLK6v6f.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpgradeToEnterpriseDialog-XJb6gVCY.cjs","sources":["../src/components/UpgradeToEnterpriseDialog.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"650px\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Upgrade to COSMOS Enterprise </span>\n <v-spacer />\n </v-toolbar>\n <v-card>\n <v-card-text class=\"mt-4\">\n <div class=\"logo\">\n <img :src=\"logo\" alt=\"OpenC3\" />\n <div class=\"cosmos\">COSMOS Enterprise</div>\n </div>\n <div class=\"pb-4\">Thank you for using the COSMOS Core!</div>\n <div v-if=\"reason\">\n <div class=\"pb-4 pl-4 reason\">\n {{ reason }}\n </div>\n </div>\n COSMOS Enterprise removes all restrictions and offers users with role\n based access control, scaling on kubernetes, cloud platform support,\n multiple scopes, Calendar and Autonomic, various integrations with\n common protocols and hardware, commercial licensing, and much more!<br /><br />\n Learn more at\n <a href=\"https://openc3.com/enterprise\">\n https://openc3.com/enterprise\n </a>\n and help support COSMOS Core by supporting our business. Contact us at\n <a href=\"mailto:support@openc3.com\">support@openc3.com</a> for more\n information about COSMOS Enterprise, COSMOS training, COSMOS support,\n and custom COSMOS development.\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"flat\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nexport default {\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n reason: {\n type: String,\n default: null,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n logo: '/img/logo.png',\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n },\n}\n</script>\n\n<style scoped>\n.logo {\n float: right;\n margin: 15px;\n}\n\n.cosmos {\n text-align: center;\n font-size: 18pt;\n}\n\n.reason {\n font-weight: bold;\n}\n</style>\n"],"names":["_sfc_main","value","_hoisted_1","_hoisted_4","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_toolbar","_component_v_spacer","_cache","_createElementVNode","_component_v_card","_component_v_card_text","$data","$props","_createElementBlock","_hoisted_3","_toDisplayString","_component_v_card_actions","_component_v_btn"],"mappings":"qLAsDKA,EAAU,CACb,MAAO,CACL,WAAY,QACZ,OAAQ,CACN,KAAM,OACN,QAAS,OAGb,MAAO,CAAC,mBAAmB,EAC3B,MAAO,CACL,MAAO,CACL,KAAM,eACR,CACF,EACA,SAAU,CACR,KAAM,CACJ,KAAM,CACJ,OAAO,KAAK,UACd,EACA,IAAIC,EAAO,CACT,KAAK,MAAM,oBAAqBA,CAAK,CACvC,GAGN,EAxDaC,EAAA,CAAA,MAAM,MAAM,sBAMVC,EAAA,CAAA,MAAM,kBAAkB,iSAdrCC,EAAAA,YAoCWC,EAAA,YApCQC,EAAA,0CAAAA,EAAA,KAAIC,GAAE,MAAM,4BAC7B,IAIY,CAJZC,EAAAA,YAIYC,EAAA,CAJD,OAAO,IAAI,EAAA,mBACpB,IAAY,CAAZD,EAAAA,YAAYE,CAAA,EACZC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,qBAA2C,YAArC,iCAA8B,EAAA,GACpCJ,EAAAA,YAAYE,CAAA,UAEdF,EAAAA,YA6BSK,EAAA,KAAA,mBA5BP,IAuBc,CAvBdL,EAAAA,YAuBcM,EAAA,CAvBD,MAAM,MAAM,EAAA,mBACvB,IAGM,CAHNF,EAAAA,mBAGM,MAHNV,EAGM,CAFJU,EAAAA,mBAAgC,MAAA,CAA1B,IAAKG,EAAA,KAAM,IAAI,oBACrBJ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAAA,mBAA2C,MAAA,CAAtC,MAAM,UAAS,oBAAiB,EAAA,KAEvCD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAAA,mBAA4D,MAAA,CAAvD,MAAM,MAAM,EAAC,uCAAoC,EAAA,GAC3CI,EAAA,sBAAXC,EAAAA,mBAIM,MAAAC,EAAA,CAHJN,EAAAA,mBAEM,MAFNT,EAEMgB,EAAAA,gBADDH,EAAA,MAAM,EAAA,CAAA,+DAEP,qRAI6D,EAAA,eAAAJ,qBAAM,KAAA,KAAA,KAAA,EAAA,eAAAA,qBAAM,KAAA,KAAA,KAAA,EAAA,iCAAA,kBAE/E,EAAA,GAAAD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAAA,mBAEI,IAAA,CAFD,KAAK,+BAA+B,EAAC,kCAExC,EAAA,mCAAI,2EAEJ,EAAA,GAAAD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,EAAAA,mBAA0D,IAAA,CAAvD,KAAK,2BAA2B,EAAC,qBAAkB,EAAA,mCAAI,kHAG5D,EAAA,WACAJ,EAAAA,YAGiBY,EAAA,CAHD,MAAM,MAAM,EAAA,mBAC1B,IAAY,CAAZZ,EAAAA,YAAYE,CAAA,EACZF,EAAAA,YAAwDa,EAAA,CAAjD,QAAQ,OAAQ,QAAKV,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAJ,GAAED,EAAA,KAAI,CAAIA,EAAA,0BAAM,IAAI,CAAA,GAAAK,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAJ,OAAI,EAAA"}
1
+ {"version":3,"file":"UpgradeToEnterpriseDialog-DHLK6v6f.cjs","sources":["../src/components/UpgradeToEnterpriseDialog.vue"],"sourcesContent":["<!--\n# Copyright 2025 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n# See LICENSE.md for more details.\n\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"650px\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Upgrade to COSMOS Enterprise </span>\n <v-spacer />\n </v-toolbar>\n <v-card>\n <v-card-text class=\"mt-4\">\n <div class=\"logo\">\n <img :src=\"logo\" alt=\"OpenC3\" />\n <div class=\"cosmos\">COSMOS Enterprise</div>\n </div>\n <div class=\"pb-4\">Thank you for using the COSMOS Core!</div>\n <div v-if=\"reason\">\n <div class=\"pb-4 pl-4 reason\">\n {{ reason }}\n </div>\n </div>\n COSMOS Enterprise removes all restrictions and offers users with role\n based access control, scaling on kubernetes, cloud platform support,\n multiple scopes, Calendar and Autonomic, various integrations with\n common protocols and hardware, commercial licensing, and much more!<br /><br />\n Learn more at\n <a href=\"https://openc3.com/enterprise\">\n https://openc3.com/enterprise\n </a>\n and help support COSMOS Core by supporting our business. Contact us at\n <a href=\"mailto:support@openc3.com\">support@openc3.com</a> for more\n information about COSMOS Enterprise, COSMOS training, COSMOS support,\n and custom COSMOS development.\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn variant=\"flat\" @click=\"show = !show\"> Ok </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nexport default {\n props: {\n modelValue: Boolean, // modelValue is the default prop when using v-model\n reason: {\n type: String,\n default: null,\n },\n },\n emits: ['update:modelValue'],\n data() {\n return {\n logo: '/img/logo.png',\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value) // update is the default event when using v-model\n },\n },\n },\n}\n</script>\n\n<style scoped>\n.logo {\n float: right;\n margin: 15px;\n}\n\n.cosmos {\n text-align: center;\n font-size: 18pt;\n}\n\n.reason {\n font-weight: bold;\n}\n</style>\n"],"names":["_sfc_main","value","_hoisted_1","_hoisted_4","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_toolbar","_component_v_spacer","_cache","_createElementVNode","_component_v_card","_component_v_card_text","$data","$props","_createElementBlock","_hoisted_3","_toDisplayString","_component_v_card_actions","_component_v_btn"],"mappings":"qLAsDKA,EAAU,CACb,MAAO,CACL,WAAY,QACZ,OAAQ,CACN,KAAM,OACN,QAAS,OAGb,MAAO,CAAC,mBAAmB,EAC3B,MAAO,CACL,MAAO,CACL,KAAM,eACR,CACF,EACA,SAAU,CACR,KAAM,CACJ,KAAM,CACJ,OAAO,KAAK,UACd,EACA,IAAIC,EAAO,CACT,KAAK,MAAM,oBAAqBA,CAAK,CACvC,GAGN,EAxDaC,EAAA,CAAA,MAAM,MAAM,sBAMVC,EAAA,CAAA,MAAM,kBAAkB,iSAdrCC,EAAAA,YAoCWC,EAAA,YApCQC,EAAA,0CAAAA,EAAA,KAAIC,GAAE,MAAM,4BAC7B,IAIY,CAJZC,EAAAA,YAIYC,EAAA,CAJD,OAAO,IAAI,EAAA,mBACpB,IAAY,CAAZD,EAAAA,YAAYE,CAAA,EACZC,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,qBAA2C,YAArC,iCAA8B,EAAA,GACpCJ,EAAAA,YAAYE,CAAA,UAEdF,EAAAA,YA6BSK,EAAA,KAAA,mBA5BP,IAuBc,CAvBdL,EAAAA,YAuBcM,EAAA,CAvBD,MAAM,MAAM,EAAA,mBACvB,IAGM,CAHNF,EAAAA,mBAGM,MAHNV,EAGM,CAFJU,EAAAA,mBAAgC,MAAA,CAA1B,IAAKG,EAAA,KAAM,IAAI,oBACrBJ,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAAA,mBAA2C,MAAA,CAAtC,MAAM,UAAS,oBAAiB,EAAA,KAEvCD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAAA,mBAA4D,MAAA,CAAvD,MAAM,MAAM,EAAC,uCAAoC,EAAA,GAC3CI,EAAA,sBAAXC,EAAAA,mBAIM,MAAAC,EAAA,CAHJN,EAAAA,mBAEM,MAFNT,EAEMgB,EAAAA,gBADDH,EAAA,MAAM,EAAA,CAAA,+DAEP,qRAI6D,EAAA,eAAAJ,qBAAM,KAAA,KAAA,KAAA,EAAA,eAAAA,qBAAM,KAAA,KAAA,KAAA,EAAA,iCAAA,kBAE/E,EAAA,GAAAD,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAC,EAAAA,mBAEI,IAAA,CAFD,KAAK,+BAA+B,EAAC,kCAExC,EAAA,mCAAI,2EAEJ,EAAA,GAAAD,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAAC,EAAAA,mBAA0D,IAAA,CAAvD,KAAK,2BAA2B,EAAC,qBAAkB,EAAA,mCAAI,kHAG5D,EAAA,WACAJ,EAAAA,YAGiBY,EAAA,CAHD,MAAM,MAAM,EAAA,mBAC1B,IAAY,CAAZZ,EAAAA,YAAYE,CAAA,EACZF,EAAAA,YAAwDa,EAAA,CAAjD,QAAQ,OAAQ,QAAKV,EAAA,CAAA,IAAAA,EAAA,CAAA,EAAAJ,GAAED,EAAA,KAAI,CAAIA,EAAA,0BAAM,IAAI,CAAA,GAAAK,EAAA,EAAA,IAAAA,EAAA,EAAA,EAAA,mBAAJ,OAAI,EAAA"}