openc3-cosmos-tool-docs 6.4.1 → 6.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. checksums.yaml +4 -4
  2. data/tools/staticdocs/404.html +4 -1
  3. data/tools/staticdocs/assets/css/styles.1a361da6.css +1 -0
  4. data/tools/staticdocs/assets/images/cmd-processing-f279f2a9798a3000e07540ec5d4eaf095a84b312cd673285b595eebf901f4663.png +0 -0
  5. data/tools/staticdocs/assets/images/docker-security-bb6d4bdd60a5cd7df87a572159c6369b67bee5735be5a501b25786cabdcd4228.png +0 -0
  6. data/tools/staticdocs/assets/images/tlm-processing-ce5d4cc16e4a19d9c4f799cc8af975e93eb1c54ba0d43acbc31cc048667b223d.png +0 -0
  7. data/tools/staticdocs/assets/js/019369f3.5dd06a57.js +1 -0
  8. data/tools/staticdocs/assets/js/058ffc22.ed3ac5fa.js +1 -0
  9. data/tools/staticdocs/assets/js/0686a885.ef66a55c.js +1 -0
  10. data/tools/staticdocs/assets/js/078dbab0.43788fd9.js +1 -0
  11. data/tools/staticdocs/assets/js/0f5d161c.7aacaf90.js +1 -0
  12. data/tools/staticdocs/assets/js/0ff569c9.7aa50138.js +1 -0
  13. data/tools/staticdocs/assets/js/103cc3be.ff33b528.js +1 -0
  14. data/tools/staticdocs/assets/js/13196248.14de6ce1.js +1 -0
  15. data/tools/staticdocs/assets/js/13c1b4e4.2dafa283.js +1 -0
  16. data/tools/staticdocs/assets/js/1602.502ef9b1.js +1 -0
  17. data/tools/staticdocs/assets/js/1e02e6a3.d99a363c.js +1 -0
  18. data/tools/staticdocs/assets/js/2047b354.d91543a5.js +1 -0
  19. data/tools/staticdocs/assets/js/2124.545702e0.js +1 -0
  20. data/tools/staticdocs/assets/js/22b3ac48.5eb8d876.js +1 -0
  21. data/tools/staticdocs/assets/js/2368.fd1bb46a.js +4 -0
  22. data/tools/staticdocs/assets/js/26b8abb2.021651f5.js +1 -0
  23. data/tools/staticdocs/assets/js/2bb7bf90.1eee5bcb.js +1 -0
  24. data/tools/staticdocs/assets/js/2c15ad40.7f30b517.js +1 -0
  25. data/tools/staticdocs/assets/js/35398c5c.4f30c5da.js +1 -0
  26. data/tools/staticdocs/assets/js/3687.8bc61ef3.js +101 -0
  27. data/tools/staticdocs/assets/js/3dd7ef3b.dfbe9bb7.js +1 -0
  28. data/tools/staticdocs/assets/js/40365d27.42b05c12.js +1 -0
  29. data/tools/staticdocs/assets/js/411898ad.e55efd5d.js +1 -0
  30. data/tools/staticdocs/assets/js/42170351.2de491d4.js +1 -0
  31. data/tools/staticdocs/assets/js/43652efd.f7c95691.js +1 -0
  32. data/tools/staticdocs/assets/js/53ca7c5b.2da36c11.js +1 -0
  33. data/tools/staticdocs/assets/js/54d0d530.7cc2c5cc.js +1 -0
  34. data/tools/staticdocs/assets/js/5b233ba7.29533a03.js +1 -0
  35. data/tools/staticdocs/assets/js/5bc719f6.62d9a8b8.js +1 -0
  36. data/tools/staticdocs/assets/js/5c6ce5ec.40e0caf8.js +1 -0
  37. data/tools/staticdocs/assets/js/5e3ed378.64ea5a52.js +1 -0
  38. data/tools/staticdocs/assets/js/5fe211ef.2d29f3fb.js +1 -0
  39. data/tools/staticdocs/assets/js/6831b732.ec0009ac.js +1 -0
  40. data/tools/staticdocs/assets/js/696b4199.1c205c60.js +1 -0
  41. data/tools/staticdocs/assets/js/6b210247.32ded6d5.js +1 -0
  42. data/tools/staticdocs/assets/js/6b65133b.b2a62736.js +1 -0
  43. data/tools/staticdocs/assets/js/6f92e431.7bd2a1f1.js +1 -0
  44. data/tools/staticdocs/assets/js/72c6d8a8.21321ecc.js +1 -0
  45. data/tools/staticdocs/assets/js/75e64983.e0eb7741.js +1 -0
  46. data/tools/staticdocs/assets/js/7690.fc05b8e6.js +1 -0
  47. data/tools/staticdocs/assets/js/7719.0d312792.js +1 -0
  48. data/tools/staticdocs/assets/js/80c97f38.a0dfbdf7.js +1 -0
  49. data/tools/staticdocs/assets/js/867640d5.32ca371f.js +1 -0
  50. data/tools/staticdocs/assets/js/{89e76475.e1b0dbdb.js → 89e76475.20b3a636.js} +1 -1
  51. data/tools/staticdocs/assets/js/8f7843ee.6d7c9cd4.js +1 -0
  52. data/tools/staticdocs/assets/js/9424f0b3.75b12400.js +1 -0
  53. data/tools/staticdocs/assets/js/964eb012.0eee94ba.js +1 -0
  54. data/tools/staticdocs/assets/js/97535711.630cee4d.js +1 -0
  55. data/tools/staticdocs/assets/js/99581c43.73b5cd90.js +1 -0
  56. data/tools/staticdocs/assets/js/9d6e81d0.6b6404ff.js +1 -0
  57. data/tools/staticdocs/assets/js/9fb6059a.715fc441.js +1 -0
  58. data/tools/staticdocs/assets/js/a677c089.76d13f14.js +1 -0
  59. data/tools/staticdocs/assets/js/a9987364.3b3e7379.js +1 -0
  60. data/tools/staticdocs/assets/js/a9b2dc27.da1da6f1.js +1 -0
  61. data/tools/staticdocs/assets/js/aa6b6c1b.bc122746.js +1 -0
  62. data/tools/staticdocs/assets/js/b062d239.4e8142cb.js +1 -0
  63. data/tools/staticdocs/assets/js/b38a6d74.4a10f506.js +1 -0
  64. data/tools/staticdocs/assets/js/b4596165.08749f15.js +1 -0
  65. data/tools/staticdocs/assets/js/b6d70f94.776bc00f.js +1 -0
  66. data/tools/staticdocs/assets/js/b9f60ba6.ce400445.js +1 -0
  67. data/tools/staticdocs/assets/js/bd0034eb.a201a4a7.js +1 -0
  68. data/tools/staticdocs/assets/js/c24eae19.77326c08.js +1 -0
  69. data/tools/staticdocs/assets/js/{c2598f55.812cdcd1.js → c2598f55.85419dc8.js} +1 -1
  70. data/tools/staticdocs/assets/js/cb8c3f08.73cefada.js +1 -0
  71. data/tools/staticdocs/assets/js/cd879be4.dc2adfcc.js +1 -0
  72. data/tools/staticdocs/assets/js/d1b923aa.57f5e162.js +1 -0
  73. data/tools/staticdocs/assets/js/d1bfc316.73bb876f.js +1 -0
  74. data/tools/staticdocs/assets/js/d24bf9b6.e348c06d.js +1 -0
  75. data/tools/staticdocs/assets/js/d57a4b5d.885590b1.js +1 -0
  76. data/tools/staticdocs/assets/js/d5d77c37.1143a9d4.js +1 -0
  77. data/tools/staticdocs/assets/js/d66bf9c0.0ffb9759.js +1 -0
  78. data/tools/staticdocs/assets/js/d8ca4191.fe602968.js +1 -0
  79. data/tools/staticdocs/assets/js/d9b92eba.a115a366.js +1 -0
  80. data/tools/staticdocs/assets/js/db8fa1d0.1aefa4e7.js +1 -0
  81. data/tools/staticdocs/assets/js/dbe31111.9c957b0c.js +1 -0
  82. data/tools/staticdocs/assets/js/dc5f7beb.ddc630ca.js +1 -0
  83. data/tools/staticdocs/assets/js/e501b0d1.f9c2d1fc.js +1 -0
  84. data/tools/staticdocs/assets/js/f15615f1.a4d98d69.js +1 -0
  85. data/tools/staticdocs/assets/js/fd886806.656b4fa3.js +1 -0
  86. data/tools/staticdocs/assets/js/main.ba1fa268.js +38 -0
  87. data/tools/staticdocs/assets/js/runtime~main.ca894d1e.js +1 -0
  88. data/tools/staticdocs/docs/configuration/accessors.html +21 -18
  89. data/tools/staticdocs/docs/configuration/command.html +35 -35
  90. data/tools/staticdocs/docs/configuration/conversions.html +156 -0
  91. data/tools/staticdocs/docs/configuration/format.html +18 -15
  92. data/tools/staticdocs/docs/configuration/interfaces.html +34 -31
  93. data/tools/staticdocs/docs/configuration/plugins.html +39 -36
  94. data/tools/staticdocs/docs/configuration/protocols.html +28 -25
  95. data/tools/staticdocs/docs/configuration/ssl-tls.html +10 -6
  96. data/tools/staticdocs/docs/configuration/table.html +19 -22
  97. data/tools/staticdocs/docs/configuration/target.html +11 -8
  98. data/tools/staticdocs/docs/configuration/telemetry-screens.html +72 -69
  99. data/tools/staticdocs/docs/configuration/telemetry.html +40 -40
  100. data/tools/staticdocs/docs/configuration.html +4 -1
  101. data/tools/staticdocs/docs/development/curl.html +12 -9
  102. data/tools/staticdocs/docs/development/developing.html +15 -12
  103. data/tools/staticdocs/docs/development/json-api.html +8 -5
  104. data/tools/staticdocs/docs/development/log-structure.html +5 -2
  105. data/tools/staticdocs/docs/development/roadmap.html +5 -2
  106. data/tools/staticdocs/docs/development/streaming-api.html +13 -10
  107. data/tools/staticdocs/docs/development/testing.html +15 -12
  108. data/tools/staticdocs/docs/development.html +4 -1
  109. data/tools/staticdocs/docs/getting-started/cli.html +16 -13
  110. data/tools/staticdocs/docs/getting-started/generators.html +19 -16
  111. data/tools/staticdocs/docs/getting-started/gettingstarted.html +15 -12
  112. data/tools/staticdocs/docs/getting-started/installation.html +7 -4
  113. data/tools/staticdocs/docs/getting-started/key-concepts.html +6 -3
  114. data/tools/staticdocs/docs/getting-started/podman.html +19 -16
  115. data/tools/staticdocs/docs/getting-started/requirements.html +7 -4
  116. data/tools/staticdocs/docs/getting-started/upgrading.html +23 -15
  117. data/tools/staticdocs/docs/getting-started.html +4 -1
  118. data/tools/staticdocs/docs/guides/bridges.html +7 -4
  119. data/tools/staticdocs/docs/guides/cfs.html +19 -16
  120. data/tools/staticdocs/docs/guides/custom-widgets.html +54 -16
  121. data/tools/staticdocs/docs/guides/dynamic-packets.html +9 -6
  122. data/tools/staticdocs/docs/guides/exposing-microservices.html +9 -6
  123. data/tools/staticdocs/docs/guides/little-endian-bitfields.html +6 -3
  124. data/tools/staticdocs/docs/guides/local-mode.html +6 -3
  125. data/tools/staticdocs/docs/guides/logging.html +5 -2
  126. data/tools/staticdocs/docs/guides/monitoring.html +11 -8
  127. data/tools/staticdocs/docs/guides/performance.html +6 -3
  128. data/tools/staticdocs/docs/guides/raspberrypi.html +6 -3
  129. data/tools/staticdocs/docs/guides/reference-architectures.html +35 -0
  130. data/tools/staticdocs/docs/guides/script-writing.html +46 -43
  131. data/tools/staticdocs/docs/guides/scripting-api.html +627 -433
  132. data/tools/staticdocs/docs/guides.html +4 -1
  133. data/tools/staticdocs/docs/meta/contributing.html +10 -7
  134. data/tools/staticdocs/docs/meta/licenses.html +6 -3
  135. data/tools/staticdocs/docs/meta/philosophy.html +5 -2
  136. data/tools/staticdocs/docs/meta/xtce.html +7 -4
  137. data/tools/staticdocs/docs/meta.html +4 -1
  138. data/tools/staticdocs/docs/privacy.html +5 -2
  139. data/tools/staticdocs/docs/tools/admin.html +5 -2
  140. data/tools/staticdocs/docs/tools/autonomic.html +5 -2
  141. data/tools/staticdocs/docs/tools/bucket-explorer.html +5 -2
  142. data/tools/staticdocs/docs/tools/calendar.html +5 -2
  143. data/tools/staticdocs/docs/tools/cmd-sender.html +5 -2
  144. data/tools/staticdocs/docs/tools/cmd-tlm-server.html +5 -2
  145. data/tools/staticdocs/docs/tools/command_history.html +5 -2
  146. data/tools/staticdocs/docs/tools/data-extractor.html +5 -2
  147. data/tools/staticdocs/docs/tools/data-viewer.html +5 -2
  148. data/tools/staticdocs/docs/tools/handbooks.html +5 -2
  149. data/tools/staticdocs/docs/tools/limits-monitor.html +5 -2
  150. data/tools/staticdocs/docs/tools/packet-viewer.html +5 -2
  151. data/tools/staticdocs/docs/tools/script-runner.html +9 -6
  152. data/tools/staticdocs/docs/tools/table-manager.html +6 -3
  153. data/tools/staticdocs/docs/tools/tlm-grapher.html +5 -2
  154. data/tools/staticdocs/docs/tools/tlm-viewer.html +5 -2
  155. data/tools/staticdocs/docs/tools.html +4 -1
  156. data/tools/staticdocs/docs.html +6 -8
  157. data/tools/staticdocs/img/cmd-processing.png +0 -0
  158. data/tools/staticdocs/img/docker-local-security.png +0 -0
  159. data/tools/staticdocs/img/docker-security.png +0 -0
  160. data/tools/staticdocs/img/tlm-processing.png +0 -0
  161. data/tools/staticdocs/index.html +4 -1
  162. data/tools/staticdocs/lunr-index-1748640055686.json +1 -0
  163. data/tools/staticdocs/lunr-index.json +1 -1
  164. data/tools/staticdocs/markdown-page.html +5 -2
  165. data/tools/staticdocs/search-doc-1748640055686.json +1 -0
  166. data/tools/staticdocs/search-doc.json +1 -1
  167. data/tools/staticdocs/sitemap.xml +1 -1
  168. metadata +94 -83
  169. data/tools/staticdocs/assets/css/styles.1de6b959.css +0 -1
  170. data/tools/staticdocs/assets/js/019369f3.43fd7635.js +0 -1
  171. data/tools/staticdocs/assets/js/058ffc22.5cfabd67.js +0 -1
  172. data/tools/staticdocs/assets/js/0686a885.0e2ea47d.js +0 -1
  173. data/tools/staticdocs/assets/js/078dbab0.5515d5e3.js +0 -1
  174. data/tools/staticdocs/assets/js/0f5d161c.7697df48.js +0 -1
  175. data/tools/staticdocs/assets/js/0ff569c9.f81b787b.js +0 -1
  176. data/tools/staticdocs/assets/js/103cc3be.e7943c80.js +0 -1
  177. data/tools/staticdocs/assets/js/13196248.ea83002e.js +0 -1
  178. data/tools/staticdocs/assets/js/13c1b4e4.eb5250f4.js +0 -1
  179. data/tools/staticdocs/assets/js/1e02e6a3.12bdc98d.js +0 -1
  180. data/tools/staticdocs/assets/js/2047b354.d91f6c3e.js +0 -1
  181. data/tools/staticdocs/assets/js/22b3ac48.0df9587b.js +0 -1
  182. data/tools/staticdocs/assets/js/26b8abb2.7f8d4cb0.js +0 -1
  183. data/tools/staticdocs/assets/js/2bb7bf90.1772f030.js +0 -1
  184. data/tools/staticdocs/assets/js/35398c5c.fcf47881.js +0 -1
  185. data/tools/staticdocs/assets/js/3969.afdd070b.js +0 -1
  186. data/tools/staticdocs/assets/js/3dd7ef3b.c3455b97.js +0 -1
  187. data/tools/staticdocs/assets/js/40365d27.5ed2e9b5.js +0 -1
  188. data/tools/staticdocs/assets/js/411898ad.f7b3ff17.js +0 -1
  189. data/tools/staticdocs/assets/js/42170351.fbc05869.js +0 -1
  190. data/tools/staticdocs/assets/js/43652efd.60fa883f.js +0 -1
  191. data/tools/staticdocs/assets/js/5205.c6f31e57.js +0 -1
  192. data/tools/staticdocs/assets/js/5328.3e2a53eb.js +0 -1
  193. data/tools/staticdocs/assets/js/53ca7c5b.fe331a71.js +0 -1
  194. data/tools/staticdocs/assets/js/54d0d530.ef91ba12.js +0 -1
  195. data/tools/staticdocs/assets/js/5761.e7fabbc9.js +0 -4
  196. data/tools/staticdocs/assets/js/5b233ba7.9d6ba314.js +0 -1
  197. data/tools/staticdocs/assets/js/5bc719f6.6d27292c.js +0 -1
  198. data/tools/staticdocs/assets/js/5c6ce5ec.652b922b.js +0 -1
  199. data/tools/staticdocs/assets/js/5e3ed378.8b51f7c0.js +0 -1
  200. data/tools/staticdocs/assets/js/5fe211ef.63b46202.js +0 -1
  201. data/tools/staticdocs/assets/js/651.a043d7b1.js +0 -1
  202. data/tools/staticdocs/assets/js/6831b732.1318b398.js +0 -1
  203. data/tools/staticdocs/assets/js/696b4199.1e950fcb.js +0 -1
  204. data/tools/staticdocs/assets/js/6b210247.6a77064a.js +0 -1
  205. data/tools/staticdocs/assets/js/6b65133b.0376a397.js +0 -1
  206. data/tools/staticdocs/assets/js/6f92e431.6439052e.js +0 -1
  207. data/tools/staticdocs/assets/js/72c6d8a8.b6fcfc30.js +0 -1
  208. data/tools/staticdocs/assets/js/75e64983.324643a8.js +0 -1
  209. data/tools/staticdocs/assets/js/80c97f38.607160d3.js +0 -1
  210. data/tools/staticdocs/assets/js/867640d5.27d9d599.js +0 -1
  211. data/tools/staticdocs/assets/js/8f7843ee.abe30983.js +0 -1
  212. data/tools/staticdocs/assets/js/9357.9a7e89b5.js +0 -101
  213. data/tools/staticdocs/assets/js/9424f0b3.3683501c.js +0 -1
  214. data/tools/staticdocs/assets/js/964eb012.0e04c58d.js +0 -1
  215. data/tools/staticdocs/assets/js/97535711.e595488c.js +0 -1
  216. data/tools/staticdocs/assets/js/99581c43.841b4a2e.js +0 -1
  217. data/tools/staticdocs/assets/js/9d6e81d0.36405219.js +0 -1
  218. data/tools/staticdocs/assets/js/9fb6059a.821f7504.js +0 -1
  219. data/tools/staticdocs/assets/js/a677c089.cfa50691.js +0 -1
  220. data/tools/staticdocs/assets/js/a9987364.b418f772.js +0 -1
  221. data/tools/staticdocs/assets/js/a9b2dc27.805dc1ba.js +0 -1
  222. data/tools/staticdocs/assets/js/aa6b6c1b.ef9b0f38.js +0 -1
  223. data/tools/staticdocs/assets/js/b062d239.57d6e194.js +0 -1
  224. data/tools/staticdocs/assets/js/b4596165.c648533a.js +0 -1
  225. data/tools/staticdocs/assets/js/b6d70f94.a9228642.js +0 -1
  226. data/tools/staticdocs/assets/js/b9f60ba6.4c0bb1dd.js +0 -1
  227. data/tools/staticdocs/assets/js/bd0034eb.8ad39448.js +0 -1
  228. data/tools/staticdocs/assets/js/c24eae19.0575c394.js +0 -1
  229. data/tools/staticdocs/assets/js/cb8c3f08.07d1c9e9.js +0 -1
  230. data/tools/staticdocs/assets/js/cd879be4.59af1749.js +0 -1
  231. data/tools/staticdocs/assets/js/d1b923aa.da892cde.js +0 -1
  232. data/tools/staticdocs/assets/js/d1bfc316.a58b9bbd.js +0 -1
  233. data/tools/staticdocs/assets/js/d24bf9b6.9fef8263.js +0 -1
  234. data/tools/staticdocs/assets/js/d57a4b5d.c74b62b1.js +0 -1
  235. data/tools/staticdocs/assets/js/d5d77c37.e812e6e7.js +0 -1
  236. data/tools/staticdocs/assets/js/d66bf9c0.80a50660.js +0 -1
  237. data/tools/staticdocs/assets/js/d8ca4191.8df86c99.js +0 -1
  238. data/tools/staticdocs/assets/js/d9b92eba.5db8667e.js +0 -1
  239. data/tools/staticdocs/assets/js/db8fa1d0.f1eed806.js +0 -1
  240. data/tools/staticdocs/assets/js/dbe31111.75e9fc53.js +0 -1
  241. data/tools/staticdocs/assets/js/dc5f7beb.9e4e6681.js +0 -1
  242. data/tools/staticdocs/assets/js/e501b0d1.d3a1e4bc.js +0 -1
  243. data/tools/staticdocs/assets/js/f15615f1.49804e96.js +0 -1
  244. data/tools/staticdocs/assets/js/fd886806.124ffe26.js +0 -1
  245. data/tools/staticdocs/assets/js/main.b1edeb65.js +0 -36
  246. data/tools/staticdocs/assets/js/runtime~main.3629ffb4.js +0 -1
  247. data/tools/staticdocs/lunr-index-1747245438937.json +0 -1
  248. data/tools/staticdocs/search-doc-1747245438937.json +0 -1
@@ -0,0 +1 @@
1
+ (self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["7719"],{1620:function(e,t,n){"use strict";n.d(t,{Z:()=>w});var r=n(2322),s=n(2784),i=n(7239),a=n(6117),l=n(6460);let o={admonition:"admonition_IZjC",admonitionHeading:"admonitionHeading_uVvU",admonitionIcon:"admonitionIcon_HiR3",admonitionContent:"admonitionContent_bl22"};function c(e){let{type:t,className:n,children:s}=e;return(0,r.jsx)("div",{className:(0,i.Z)(l.k.common.admonition,l.k.common.admonitionType(t),o.admonition,n),children:s})}function d(e){let{icon:t,title:n}=e;return(0,r.jsxs)("div",{className:o.admonitionHeading,children:[(0,r.jsx)("span",{className:o.admonitionIcon,children:t}),n]})}function u(e){let{children:t}=e;return t?(0,r.jsx)("div",{className:o.admonitionContent,children:t}):null}function m(e){let{type:t,icon:n,title:s,children:i,className:a}=e;return(0,r.jsxs)(c,{type:t,className:a,children:[s||n?(0,r.jsx)(d,{title:s,icon:n}):null,(0,r.jsx)(u,{children:i})]})}let h={icon:(0,r.jsx)(function(e){return(0,r.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})},{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function f(e){return(0,r.jsx)(m,{...h,...e,className:(0,i.Z)("alert alert--secondary",e.className),children:e.children})}let p={icon:(0,r.jsx)(function(e){return(0,r.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})},{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function x(e){return(0,r.jsx)(m,{...p,...e,className:(0,i.Z)("alert alert--success",e.className),children:e.children})}let j={icon:(0,r.jsx)(function(e){return(0,r.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})},{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function g(e){return(0,r.jsx)(m,{...j,...e,className:(0,i.Z)("alert alert--info",e.className),children:e.children})}function b(e){return(0,r.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}let v={icon:(0,r.jsx)(b,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})},y={icon:(0,r.jsx)(function(e){return(0,r.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,r.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})},{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})},N={icon:(0,r.jsx)(b,{}),title:(0,r.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})},k={note:f,tip:x,info:g,warning:function(e){return(0,r.jsx)(m,{...v,...e,className:(0,i.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,r.jsx)(m,{...y,...e,className:(0,i.Z)("alert alert--danger",e.className),children:e.children})},secondary:e=>(0,r.jsx)(f,{title:"secondary",...e}),important:e=>(0,r.jsx)(g,{title:"important",...e}),success:e=>(0,r.jsx)(x,{title:"success",...e}),caution:function(e){return(0,r.jsx)(m,{...N,...e,className:(0,i.Z)("alert alert--warning",e.className),children:e.children})}};function w(e){let t=function(e){let{mdxAdmonitionTitle:t,rest:n}=function(e){let t=s.Children.toArray(e),n=t.find(e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type),i=t.filter(e=>e!==n);return{mdxAdmonitionTitle:n?.props.children,rest:i.length>0?(0,r.jsx)(r.Fragment,{children:i}):null}}(e.children),i=e.title??t;return{...e,...i&&{title:i},children:n}}(e),n=function(e){let t=k[e];return t||(console.warn(`No admonition component found for admonition type "${e}". Using Info as fallback.`),k.info)}(t.type);return(0,r.jsx)(n,{...t})}},17:function(e,t,n){"use strict";n.d(t,{Z:()=>a});var r=n(2322);n(2784);var s=n(7239),i=n(231);function a(e){let{className:t,...n}=e;return(0,r.jsx)("div",{className:(0,s.Z)("tableOfContents_TN1Q","thin-scrollbar",t),children:(0,r.jsx)(i.Z,{...n,linkClassName:"table-of-contents__link toc-highlight",linkActiveClassName:"table-of-contents__link--active"})})}},231:function(e,t,n){"use strict";n.d(t,{Z:()=>c});var r=n(2322),s=n(2784),i=n(6092);function a(e){let t=e.getBoundingClientRect();return t.top===t.bottom?a(e.parentNode):t}var l=n(5819);let o=s.memo(function e(t){let{toc:n,className:s,linkClassName:i,isChild:a}=t;return n.length?(0,r.jsx)("ul",{className:a?void 0:s,children:n.map(t=>(0,r.jsxs)("li",{children:[(0,r.jsx)(l.Z,{to:`#${t.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:t.value}}),(0,r.jsx)(e,{isChild:!0,toc:t.children,className:s,linkClassName:i})]},t.id))}):null});function c(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:c,minHeadingLevel:d,maxHeadingLevel:u,...m}=e,h=(0,i.L)(),f=d??h.tableOfContents.minHeadingLevel,p=u??h.tableOfContents.maxHeadingLevel,x=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:r}=e;return(0,s.useMemo)(()=>(function e(t){let{toc:n,minHeadingLevel:r,maxHeadingLevel:s}=t;return n.flatMap(t=>{let n=e({toc:t.children,minHeadingLevel:r,maxHeadingLevel:s});return t.level>=r&&t.level<=s?[{...t,children:n}]:n})})({toc:function(e){let t=e.map(e=>({...e,parentIndex:-1,children:[]})),n=Array(7).fill(-1);t.forEach((e,t)=>{let r=n.slice(2,e.level);e.parentIndex=Math.max(...r),n[e.level]=t});let r=[];return t.forEach(e=>{let{parentIndex:n,...s}=e;n>=0?t[n].children.push(s):r.push(s)}),r}(t),minHeadingLevel:n,maxHeadingLevel:r}),[t,n,r])}({toc:t,minHeadingLevel:f,maxHeadingLevel:p});var j=(0,s.useMemo)(()=>{if(l&&c)return{linkClassName:l,linkActiveClassName:c,minHeadingLevel:f,maxHeadingLevel:p}},[l,c,f,p]);let g=(0,s.useRef)(void 0),b=function(){let e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,i.L)();return(0,s.useEffect)(()=>{e.current=t?0:document.querySelector(".navbar").clientHeight},[t]),e}();return(0,s.useEffect)(()=>{if(!j)return()=>{};let{linkClassName:e,linkActiveClassName:t,minHeadingLevel:n,maxHeadingLevel:r}=j;function s(){let s=Array.from(document.getElementsByClassName(e)),i=function(e,t){let{anchorTopOffset:n}=t,r=e.find(e=>a(e).top>=n);if(r){var s;return(s=a(r)).top>0&&s.bottom<window.innerHeight/2?r:e[e.indexOf(r)-1]??null}return e[e.length-1]??null}(function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e,r=[];for(let e=t;e<=n;e+=1)r.push(`h${e}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:n,maxHeadingLevel:r}),{anchorTopOffset:b.current}),l=s.find(e=>i&&i.id===decodeURIComponent(e.href.substring(e.href.indexOf("#")+1)));s.forEach(e=>{e===l?(g.current&&g.current!==e&&g.current.classList.remove(t),e.classList.add(t),g.current=e):e.classList.remove(t)})}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}},[j,b]),(0,r.jsx)(o,{toc:x,className:n,linkClassName:l,...m})}},2840:function(e,t,n){"use strict";n.d(t,{Z:()=>l,a:()=>a});var r=n(2784);let s={},i=r.createContext(s);function a(e){let t=r.useContext(i);return r.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(i.Provider,{value:t},e.children)}},4501:function(e,t){function n(e){let t,n=[];for(let r of e.split(",").map(e=>e.trim()))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(t=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,r,s,i]=t;if(r&&i){let e=(r=parseInt(r))<(i=parseInt(i))?1:-1;("-"===s||".."===s||"\u2025"===s)&&(i+=e);for(let t=r;t!==i;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},5015:function(e,t,n){"use strict";n.d(t,{Z:()=>j});var r=n(2322);n(2784);var s=n(7239),i=n(6117),a=n(7173);function l(){return(0,r.jsx)(i.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,r.jsx)(i.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,r.jsx)(a.Z,{children:(0,r.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function d(){return(0,r.jsx)(i.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function u(){return(0,r.jsx)(i.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}var m=n(6460),h=n(1620);function f(e){let{className:t}=e;return(0,r.jsx)(h.Z,{type:"caution",title:(0,r.jsx)(d,{}),className:(0,s.Z)(t,m.k.common.draftBanner),children:(0,r.jsx)(u,{})})}function p(e){let{className:t}=e;return(0,r.jsx)(h.Z,{type:"caution",title:(0,r.jsx)(l,{}),className:(0,s.Z)(t,m.k.common.unlistedBanner),children:(0,r.jsx)(o,{})})}function x(e){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c,{}),(0,r.jsx)(p,{...e})]})}function j(e){let{metadata:t}=e,{unlisted:n,frontMatter:s}=t;return(0,r.jsxs)(r.Fragment,{children:[(n||s.unlisted)&&(0,r.jsx)(x,{}),s.draft&&(0,r.jsx)(f,{})]})}},7955:function(e,t,n){"use strict";n.d(t,{Z:()=>f});var r=n(2322);n(2784);var s=n(7239),i=n(6117),a=n(6460),l=n(5819);function o(e){let{className:t,...n}=e;return(0,r.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,s.Z)("iconEdit_UohW",t),"aria-hidden":"true",...n,children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function c(e){let{editUrl:t}=e;return(0,r.jsxs)(l.Z,{to:t,className:a.k.common.editThisPage,children:[(0,r.jsx)(o,{}),(0,r.jsx)(i.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}var d=n(3687);function u(e){let{lastUpdatedAt:t}=e,n=new Date(t),s=(function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{i18n:{currentLocale:t}}=(0,d.Z)(),n=function(){let{i18n:{currentLocale:e,localeConfigs:t}}=(0,d.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})})({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,r.jsx)(i.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,r.jsx)("b",{children:(0,r.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function m(e){let{lastUpdatedBy:t}=e;return(0,r.jsx)(i.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,r.jsx)("b",{children:t})},children:" by {user}"})}function h(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,r.jsxs)("span",{className:a.k.common.lastUpdated,children:[(0,r.jsx)(i.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,r.jsx)(u,{lastUpdatedAt:t}):"",byUser:n?(0,r.jsx)(m,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}function f(e){let{className:t,editUrl:n,lastUpdatedAt:i,lastUpdatedBy:a}=e;return(0,r.jsxs)("div",{className:(0,s.Z)("row",t),children:[(0,r.jsx)("div",{className:"col",children:n&&(0,r.jsx)(c,{editUrl:n})}),(0,r.jsx)("div",{className:(0,s.Z)("col","lastUpdated_g62E"),children:(i||a)&&(0,r.jsx)(h,{lastUpdatedAt:i,lastUpdatedBy:a})})]})}},8093:function(e,t,n){"use strict";n.d(t,{Z:()=>em});var r=n(2322),s=n(2784),i=n(2840),a=n(7173),l=n(9761),o=n(7239),c=n(4877),d=n(6092);function u(){let{prism:e}=(0,d.L)(),{colorMode:t}=(0,c.I)(),n=e.theme,r=e.darkTheme||n;return"dark"===t?r:n}var m=n(6460),h=n(4501),f=n.n(h),p=n(3972);let x=/title=(?<quote>["'])(?<title>.*?)\1/,j=/\{(?<range>[\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},b={...g,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},v=Object.keys(g);function y(e,t){let n=e.map(e=>{let{start:n,end:r}=b[e];return`(?:${n}\\s*(${t.flatMap(e=>[e.line,e.block?.start,e.block?.end].filter(Boolean)).join("|")})\\s*${r})`}).join("|");return RegExp(`^\\s*(?:${n})\\s*$`)}let N=(0,s.createContext)(null);function k(e){let{metadata:t,wordWrap:n,children:i}=e,a=(0,s.useMemo)(()=>({metadata:t,wordWrap:n}),[t,n]);return(0,r.jsx)(N.Provider,{value:a,children:i})}function w(){let e=(0,s.useContext)(N);if(null===e)throw new p.i6("CodeBlockContextProvider");return e}function C(e){let{as:t,...n}=e,s=function(e){let t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach(e=>{let[r,s]=e,i=t[r];i&&"string"==typeof s&&(n[i]=s)}),n}(u());return(0,r.jsx)(t,{...n,style:s,className:(0,o.Z)(n.className,"codeBlockContainer_ZGJx",m.k.common.codeBlock)})}let B={codeBlock:"codeBlock_TAPP",codeBlockStandalone:"codeBlockStandalone_K9VJ",codeBlockLines:"codeBlockLines_AdAo",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_p5De"};function Z(e){let{children:t,className:n}=e;return(0,r.jsx)(C,{as:"pre",tabIndex:0,className:(0,o.Z)(B.codeBlockStandalone,"thin-scrollbar",n),children:(0,r.jsx)("code",{className:B.codeBlockLines,children:t})})}let L={attributes:!0,characterData:!0,childList:!0,subtree:!0};function E(e){let{children:t}=e;return t}var T=n(8370);function _(e){let{line:t,token:n,...s}=e;return(0,r.jsx)("span",{...s})}let I={codeLine:"codeLine_DPDv",codeLineNumber:"codeLineNumber_YxQB",codeLineContent:"codeLineContent_SOIp"};function A(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:i,getTokenProps:a}=e,l=function(e){let t=1===e.length&&"\n"===e[0].content?e[0]:void 0;return t?[{...t,content:""}]:e}(t),c=i({line:l,className:(0,o.Z)(n,s&&I.codeLine)}),d=l.map((e,t)=>{let n=a({token:e});return(0,r.jsx)(_,{...n,line:l,token:e,children:n.children},t)});return(0,r.jsxs)("span",{...c,children:[s?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:I.codeLineNumber}),(0,r.jsx)("span",{className:I.codeLineContent,children:d})]}):d,(0,r.jsx)("br",{})]})}let S=s.forwardRef((e,t)=>(0,r.jsx)("pre",{ref:t,tabIndex:0,...e,className:(0,o.Z)(e.className,B.codeBlock,"thin-scrollbar")}));function H(e){let{metadata:t}=w();return(0,r.jsx)("code",{...e,className:(0,o.Z)(e.className,B.codeBlockLines,void 0!==t.lineNumbersStart&&B.codeBlockLinesWithNumbering),style:{...e.style,counterReset:void 0===t.lineNumbersStart?void 0:`line-count ${t.lineNumbersStart-1}`}})}function M(e){let{className:t}=e,{metadata:n,wordWrap:s}=w(),i=u(),{code:a,language:l,lineNumbersStart:c,lineClassNames:d}=n;return(0,r.jsx)(T.y$,{theme:i,code:a,language:l,children:e=>{let{className:n,style:i,tokens:a,getLineProps:l,getTokenProps:u}=e;return(0,r.jsx)(S,{ref:s.codeBlockRef,className:(0,o.Z)(t,n),style:i,children:(0,r.jsx)(H,{children:a.map((e,t)=>(0,r.jsx)(A,{line:e,getLineProps:l,getTokenProps:u,classNames:d[t],showLineNumbers:void 0!==c},t))})})}})}function z(e){let{children:t,fallback:n}=e;return(0,l.Z)()?(0,r.jsx)(r.Fragment,{children:t?.()}):n??null}var R=n(6117);function U(e){let{className:t,...n}=e;return(0,r.jsx)("button",{type:"button",...n,className:(0,o.Z)("clean-btn",t)})}function V(e){return(0,r.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,r.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function $(e){return(0,r.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,r.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}let D={copyButtonCopied:"copyButtonCopied_TFXo",copyButtonIcons:"copyButtonIcons_akOg",copyButtonIcon:"copyButtonIcon_a21a",copyButtonSuccessIcon:"copyButtonSuccessIcon_v2Tw"};function O(e){let{className:t}=e,{copyCode:n,isCopied:i}=function(){let{metadata:{code:e}}=w(),[t,n]=(0,s.useState)(!1),r=(0,s.useRef)(void 0),i=(0,s.useCallback)(()=>{!function(e){let{target:t=document.body}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"!=typeof e)throw TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);let n=document.createElement("textarea"),r=document.activeElement;n.value=e,n.setAttribute("readonly",""),n.style.contain="strict",n.style.position="absolute",n.style.left="-9999px",n.style.fontSize="12pt";let s=document.getSelection(),i=s.rangeCount>0&&s.getRangeAt(0);t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let a=!1;try{document.execCommand("copy")}catch{}n.remove(),i&&(s.removeAllRanges(),s.addRange(i)),r&&r.focus()}(e),n(!0),r.current=window.setTimeout(()=>{n(!1)},1e3)},[e]);return(0,s.useEffect)(()=>()=>window.clearTimeout(r.current),[]),{copyCode:i,isCopied:t}}();return(0,r.jsx)(U,{"aria-label":i?(0,R.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,R.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,R.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,o.Z)(t,D.copyButton,i&&D.copyButtonCopied),onClick:n,children:(0,r.jsxs)("span",{className:D.copyButtonIcons,"aria-hidden":"true",children:[(0,r.jsx)(V,{className:D.copyButtonIcon}),(0,r.jsx)($,{className:D.copyButtonSuccessIcon})]})})}function W(e){return(0,r.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,r.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}let P={wordWrapButtonIcon:"wordWrapButtonIcon_fUEG",wordWrapButtonEnabled:"wordWrapButtonEnabled_wDKE"};function F(e){let{className:t}=e,{wordWrap:n}=w();if(!(n.isEnabled||n.isCodeScrollable))return!1;let s=(0,R.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,r.jsx)(U,{onClick:()=>n.toggle(),className:(0,o.Z)(t,n.isEnabled&&P.wordWrapButtonEnabled),"aria-label":s,title:s,children:(0,r.jsx)(W,{className:P.wordWrapButtonIcon,"aria-hidden":"true"})})}function q(e){let{className:t}=e;return(0,r.jsx)(z,{children:()=>(0,r.jsxs)("div",{className:(0,o.Z)(t,"buttonGroup_dke2"),children:[(0,r.jsx)(F,{}),(0,r.jsx)(O,{})]})})}let Y={codeBlockContent:"codeBlockContent_kX1v",codeBlockTitle:"codeBlockTitle_L5qy"};function G(e){let{className:t}=e,{metadata:n}=w();return(0,r.jsxs)(C,{as:"div",className:(0,o.Z)(t,n.className),children:[n.title&&(0,r.jsx)("div",{className:Y.codeBlockTitle,children:(0,r.jsx)(E,{children:n.title})}),(0,r.jsxs)("div",{className:Y.codeBlockContent,children:[(0,r.jsx)(M,{}),(0,r.jsx)(q,{})]})]})}function Q(e){let t=function(e){let{prism:t}=(0,d.L)();return function(e){var t,n,r;let s=(n=(t={language:e.language,defaultLanguage:e.defaultLanguage,className:e.className}).language??function(e){if(!e)return;let t=e.split(" ").find(e=>e.startsWith("language-"));return t?.replace(/language-/,"")}(t.className)??t.defaultLanguage,n?.toLowerCase()??"text"),{lineClassNames:i,code:a}=function(e,t){let n=e.replace(/\r?\n$/,"");return function(e,t){let{metastring:n,magicComments:r}=t;if(n&&j.test(n)){let t=n.match(j).groups.range;if(0===r.length)throw Error(`A highlight range has been given in code block's metastring (\`\`\` ${n}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);let s=r[0].className;return{lineClassNames:Object.fromEntries(f()(t).filter(e=>e>0).map(e=>[e-1,[s]])),code:e}}return null}(n,{...t})??function(e,t){let{language:n,magicComments:r}=t;if(void 0===n)return{lineClassNames:{},code:e};let s=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return y(["js","jsBlock"],t);case"jsx":case"tsx":return y(["js","jsBlock","jsx"],t);case"html":return y(["js","jsBlock","html"],t);case"python":case"py":case"bash":return y(["bash"],t);case"markdown":case"md":return y(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return y(["tex"],t);case"lua":case"haskell":return y(["lua"],t);case"sql":return y(["lua","jsBlock"],t);case"wasm":return y(["wasm"],t);case"vb":case"vba":case"visual-basic":return y(["vb","rem"],t);case"vbnet":return y(["vbnet","rem"],t);case"batch":return y(["rem"],t);case"basic":return y(["rem","f90"],t);case"fsharp":return y(["js","ml"],t);case"ocaml":case"sml":return y(["ml"],t);case"fortran":return y(["f90"],t);case"cobol":return y(["cobol"],t);default:return y(v,t)}}(n,r),i=e.split(/\r?\n/),a=Object.fromEntries(r.map(e=>[e.className,{start:0,range:""}])),l=Object.fromEntries(r.filter(e=>e.line).map(e=>{let{className:t,line:n}=e;return[n,t]})),o=Object.fromEntries(r.filter(e=>e.block).map(e=>{let{className:t,block:n}=e;return[n.start,t]})),c=Object.fromEntries(r.filter(e=>e.block).map(e=>{let{className:t,block:n}=e;return[n.end,t]}));for(let e=0;e<i.length;){let t=i[e].match(s);if(!t){e+=1;continue}let n=t.slice(1).find(e=>void 0!==e);l[n]?a[l[n]].range+=`${e},`:o[n]?a[o[n]].start=e:c[n]&&(a[c[n]].range+=`${a[c[n]].start}-${e-1},`),i.splice(e,1)}let d={};return Object.entries(a).forEach(e=>{let[t,{range:n}]=e;f()(n).forEach(e=>{d[e]??=[],d[e].push(t)})}),{code:i.join("\n"),lineClassNames:d}}(n,{...t})}(e.code,{metastring:e.metastring,magicComments:e.magicComments,language:s}),l=function(e){let{className:t,language:n}=e;return(0,o.Z)(t,n&&!t?.includes(`language-${n}`)&&`language-${n}`)}({className:e.className,language:s}),c=(r=e.metastring,(r?.match(x)?.groups.title??"")||e.title),d=function(e){let{showLineNumbers:t,metastring:n}=e;if("boolean"==typeof t)return t?1:void 0;if("number"==typeof t)return t;let r=n?.split(" ").find(e=>e.startsWith("showLineNumbers"));if(r)return r.startsWith("showLineNumbers=")?parseInt(r.replace("showLineNumbers=",""),10):1}({showLineNumbers:e.showLineNumbers,metastring:e.metastring});return{codeInput:e.code,code:a,className:l,language:s,title:c,lineNumbersStart:d,lineClassNames:i}}({code:e.children,className:e.className,metastring:e.metastring,magicComments:t.magicComments,defaultLanguage:t.defaultLanguage,language:e.language,title:e.title,showLineNumbers:e.showLineNumbers})}(e),n=function(){let[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),i=(0,s.useRef)(null),a=(0,s.useCallback)(()=>{let n=i.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t(e=>!e)},[i,e]),l=(0,s.useCallback)(()=>{let{scrollWidth:e,clientWidth:t}=i.current;r(e>t||i.current.querySelector("code").hasAttribute("style"))},[i]),[o,c]=(0,s.useState)(),d=(0,s.useCallback)(()=>{c(i.current?.closest("[role=tabpanel][hidden]"))},[i,c]);return(0,s.useEffect)(()=>{d()},[d]),!function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:L,r=(0,p.zX)(t),i=(0,p.Ql)(n);(0,s.useEffect)(()=>{let t=new MutationObserver(r);return e&&t.observe(e,i),()=>t.disconnect()},[e,r,i])}(o,e=>{e.forEach(e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(l(),d())})},{attributes:!0,characterData:!1,childList:!1,subtree:!1}),(0,s.useEffect)(()=>{l()},[e,l]),(0,s.useEffect)(()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)}),[l]),{codeBlockRef:i,isEnabled:e,isCodeScrollable:n,toggle:a}}();return(0,r.jsx)(k,{metadata:t,wordWrap:n,children:(0,r.jsx)(G,{})})}function X(e){let{children:t,...n}=e,i=(0,l.Z)(),a=s.Children.toArray(t).some(e=>(0,s.isValidElement)(e))?t:Array.isArray(t)?t.join(""):t;return(0,r.jsx)("string"==typeof a?Q:Z,{...n,children:a},String(i))}function J(e){return(0,r.jsx)("code",{...e})}var K=n(5819),ee=n(5232),et=n(8859);let en={details:"details_B4FW",isBrowser:"isBrowser_Cof9",collapsibleContent:"collapsibleContent_VYua"};function er(e){return!!e&&("SUMMARY"===e.tagName||er(e.parentElement))}function es(e){let{summary:t,children:n,...i}=e;(0,ee.Z)().collectAnchor(i.id);let a=(0,l.Z)(),c=(0,s.useRef)(null),{collapsed:d,setCollapsed:u}=(0,et.u)({initialState:!i.open}),[m,h]=(0,s.useState)(i.open),f=s.isValidElement(t)?t:(0,r.jsx)("summary",{children:t??"Details"});return(0,r.jsxs)("details",{...i,ref:c,open:m,"data-collapsed":d,className:(0,o.Z)(en.details,a&&en.isBrowser,i.className),onMouseDown:e=>{er(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();let t=e.target;er(t)&&function e(t,n){return!!t&&(t===n||e(t.parentElement,n))}(t,c.current)&&(e.preventDefault(),d?(u(!1),h(!0)):u(!0))},children:[f,(0,r.jsx)(et.z,{lazy:!1,collapsed:d,onCollapseTransitionEnd:e=>{u(e),h(!e)},children:(0,r.jsx)("div",{className:en.collapsibleContent,children:n})})]})}function ei(e){let{...t}=e;return(0,r.jsx)(es,{...t,className:(0,o.Z)("alert alert--info","details_SZgV",t.className)})}function ea(e){let t=s.Children.toArray(e.children),n=t.find(e=>s.isValidElement(e)&&"summary"===e.type),i=(0,r.jsx)(r.Fragment,{children:t.filter(e=>e!==n)});return(0,r.jsx)(ei,{...e,summary:n,children:i})}var el=n(4126);function eo(e){return(0,r.jsx)(el.Z,{...e})}let ec={containsTaskList:"containsTaskList__YnT"};var ed=n(1620);let eu={Head:a.Z,details:ea,Details:ea,code:function(e){return void 0!==e.children&&s.Children.toArray(e.children).every(e=>"string"==typeof e&&!e.includes("\n"))?(0,r.jsx)(J,{...e}):(0,r.jsx)(X,{...e})},a:function(e){return(0,r.jsx)(K.Z,{...e})},pre:function(e){return(0,r.jsx)(r.Fragment,{children:e.children})},ul:function(e){return(0,r.jsx)("ul",{...e,className:function(e){if(void 0!==e)return(0,o.Z)(e,e?.includes("contains-task-list")&&ec.containsTaskList)}(e.className)})},li:function(e){return(0,ee.Z)().collectAnchor(e.id),(0,r.jsx)("li",{...e})},img:function(e){var t;return(0,r.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,o.Z)(t,"img__Ss2"))})},h1:e=>(0,r.jsx)(eo,{as:"h1",...e}),h2:e=>(0,r.jsx)(eo,{as:"h2",...e}),h3:e=>(0,r.jsx)(eo,{as:"h3",...e}),h4:e=>(0,r.jsx)(eo,{as:"h4",...e}),h5:e=>(0,r.jsx)(eo,{as:"h5",...e}),h6:e=>(0,r.jsx)(eo,{as:"h6",...e}),admonition:ed.Z,mermaid:()=>null};function em(e){let{children:t}=e;return(0,r.jsx)(i.Z,{components:eu,children:t})}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["7072"],{1522:function(e,t,o){o.d(t,{Z:()=>s});let s=o.p+"assets/images/command_history-ecc9b618661ad0aefa0700047a8ab3b094372f2aa427e9fcd270dcd352a30408.png"},2840:function(e,t,o){o.d(t,{Z:()=>c,a:()=>i});var s=o(2784);let n={},a=s.createContext(n);function i(e){let t=s.useContext(a);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(a.Provider,{value:t},e.children)}},8722:function(e,t,o){o.r(t),o.d(t,{frontMatter:()=>i,default:()=>l,contentTitle:()=>c,assets:()=>r,toc:()=>d,metadata:()=>s});var s=JSON.parse('{"id":"tools/command_history","title":"Command History (Enterprise)","description":"See all the commands sent, by whom, and if successful","source":"@site/docs/tools/command_history.md","sourceDirName":"tools","slug":"/tools/command_history","permalink":"/tools/staticdocs/docs/tools/command_history","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/tools/command_history.md","tags":[],"version":"current","frontMatter":{"title":"Command History (Enterprise)","description":"See all the commands sent, by whom, and if successful","sidebar_custom_props":{"myEmoji":"\uD83D\uDEE0\uFE0F"}},"sidebar":"defaultSidebar","previous":{"title":"Command and Telemetry Server","permalink":"/tools/staticdocs/docs/tools/cmd-tlm-server"},"next":{"title":"Data Extractor","permalink":"/tools/staticdocs/docs/tools/data-extractor"}}'),n=o(2322),a=o(2840);let i={title:"Command History (Enterprise)",description:"See all the commands sent, by whom, and if successful",sidebar_custom_props:{myEmoji:"\uD83D\uDEE0\uFE0F"}},c=void 0,r={},d=[{value:"Introduction",id:"introduction",level:2},{value:"Selecting Time",id:"selecting-time",level:3},{value:"Commands Table",id:"commands-table",level:2}];function m(e){let t={a:"a",h2:"h2",h3:"h3",img:"img",p:"p",...(0,a.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,n.jsx)(t.p,{children:"Command History provides the ability to see all the commands sent in COSMOS. Commands are listed in time execution order and include who sent the command and whether they were successful (if validated)."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Command History",src:o(1522).Z+"",width:"2878",height:"1660"})}),"\n",(0,n.jsx)(t.h3,{id:"selecting-time",children:"Selecting Time"}),"\n",(0,n.jsx)(t.p,{children:"By default, Command History displays the last hour of commands and then continues streaming commands as they are sent. You can select a different time range using the start date / time and end date / time choosers."}),"\n",(0,n.jsx)(t.h2,{id:"commands-table",children:"Commands Table"}),"\n",(0,n.jsx)(t.p,{children:"The commands table is sorted by Time and list the User (or process), the Command, the Result and an optional Description."}),"\n",(0,n.jsx)(t.p,{children:"As shown above, the User can be an actual user in the system (admin, operator) or a background process (DEFAULT__MULTI__INST, DEFAULT__DECOM__INST2)."}),"\n",(0,n.jsxs)(t.p,{children:["The Result field is the result of executing Command Validators established by the ",(0,n.jsx)(t.a,{href:"../configuration/command#validator",children:"VALIDATOR"})," keyword. Command Validators are either a Ruby or Python class which is used to validate the command success or failure with both a pre_check and post_check method. Usually when a command fails, a description is given as in the example above."]}),"\n",(0,n.jsxs)(t.p,{children:["For more information read the ",(0,n.jsx)(t.a,{href:"../configuration/command#validator",children:"VALIDATOR"})," documentation and also see the ",(0,n.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos/blob/main/openc3-cosmos-init/plugins/packages/openc3-cosmos-demo/targets/INST/lib/inst_cmd_validator.rb",children:"Ruby Example"})," and the ",(0,n.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos/blob/main/openc3-cosmos-init/plugins/packages/openc3-cosmos-demo/targets/INST2/lib/inst2_cmd_validator.py",children:"Python Example"})," in the ",(0,n.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos/tree/main/openc3-cosmos-init/plugins/packages/openc3-cosmos-demo",children:"COSMOS Demo"}),"."]})]})}function l(e={}){let{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(m,{...e})}):m(e)}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["3649"],{2732:function(e,n,t){t.r(n),t.d(n,{frontMatter:()=>c,default:()=>h,contentTitle:()=>r,assets:()=>a,toc:()=>l,metadata:()=>i});var i=JSON.parse('{"id":"guides/cfs","title":"COSMOS and NASA cFS","description":"Tutorial for integrating with NASA cFS","source":"@site/docs/guides/cfs.md","sourceDirName":"guides","slug":"/guides/cfs","permalink":"/tools/staticdocs/docs/guides/cfs","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/guides/cfs.md","tags":[],"version":"current","frontMatter":{"title":"COSMOS and NASA cFS","description":"Tutorial for integrating with NASA cFS","sidebar_custom_props":{"myEmoji":"\uD83D\uDE80"}},"sidebar":"defaultSidebar","previous":{"title":"Bridges","permalink":"/tools/staticdocs/docs/guides/bridges"},"next":{"title":"Custom Widgets","permalink":"/tools/staticdocs/docs/guides/custom-widgets"}}'),s=t(2322),o=t(2840);let c={title:"COSMOS and NASA cFS",description:"Tutorial for integrating with NASA cFS",sidebar_custom_props:{myEmoji:"\uD83D\uDE80"}},r=void 0,a={},l=[{value:"Working configuration",id:"working-configuration",level:2},{value:"Setting up COSMOS",id:"setting-up-cosmos",level:2},{value:"Configuring COSMOS",id:"configuring-cosmos",level:3},{value:"Setting up cFS",id:"setting-up-cfs",level:2},{value:"Clone cFS",id:"clone-cfs",level:3},{value:"Create Dockerfile in cFS dir",id:"create-dockerfile-in-cfs-dir",level:3},{value:"Build and run cFS",id:"build-and-run-cfs",level:3},{value:"Creating a COSMOS plugin for TM/TC interface with cFS",id:"creating-a-cosmos-plugin-for-tmtc-interface-with-cfs",level:2},{value:"Creating TM/TC definitions",id:"creating-tmtc-definitions",level:2},{value:"Uploading the plugin",id:"uploading-the-plugin",level:2}];function d(e){let n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h2,{id:"working-configuration",children:"Working configuration"}),"\n",(0,s.jsx)(n.p,{children:"This tutorial has been tested using the following components:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["COSMOS v6 release ",(0,s.jsx)(n.a,{href:"https://github.com/OpenC3/cosmos/releases/tag/v6.3.0",children:"6.3.0"})]}),"\n",(0,s.jsx)(n.li,{children:"cFS main-branch commit: 0ba1faa (April 23, 2025)"}),"\n",(0,s.jsx)(n.li,{children:"Docker Desktop 4.40.0 on MacOS"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Replace all ",(0,s.jsx)(n.code,{children:"<xxxxxx>"})," with your matching paths and names. Example: ",(0,s.jsx)(n.code,{children:"<USERNAME>"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"setting-up-cosmos",children:"Setting up COSMOS"}),"\n",(0,s.jsxs)(n.p,{children:["Install COSMOS according to the official ",(0,s.jsx)(n.a,{href:"/tools/staticdocs/docs/getting-started/installation",children:"installation"})," instructions."]}),"\n",(0,s.jsx)(n.h3,{id:"configuring-cosmos",children:"Configuring COSMOS"}),"\n",(0,s.jsxs)(n.p,{children:["Change the Docker configuration for the interoperability with NASA cFS. For\nsubscribing to the telemetry, you have to append a port binding in the file\n",(0,s.jsx)(n.code,{children:"compose.yaml"})," under the section ",(0,s.jsx)(n.code,{children:"openc3-operator"}),". The port number has to\nmatch with the port number cFS is sending the telemetry on."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:'openc3-operator:\n ports:\n - "1235:1235/udp"\n'})}),"\n",(0,s.jsx)(n.p,{children:"Run COSMOS, the first run takes a while (~15 min)."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"openc3.sh start\n"})}),"\n",(0,s.jsxs)(n.p,{children:["When started, connect with a browser to ",(0,s.jsx)(n.a,{href:"http://localhost:2900",children:"http://localhost:2900"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"For shutting down COSMOS:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"openc3.sh stop\n"})}),"\n",(0,s.jsx)(n.h2,{id:"setting-up-cfs",children:"Setting up cFS"}),"\n",(0,s.jsxs)(n.p,{children:["To run ",(0,s.jsx)(n.a,{href:"https://github.com/nasa/cFS",children:"NASA cFS"})," as a Docker container do the following:"]}),"\n",(0,s.jsx)(n.h3,{id:"clone-cfs",children:"Clone cFS"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"git clone --recurse-submodules https://github.com/nasa/cFS.git\n"})}),"\n",(0,s.jsx)(n.h3,{id:"create-dockerfile-in-cfs-dir",children:"Create Dockerfile in cFS dir"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-docker",children:'FROM ubuntu:25.04 AS builder\n\nARG DEBIAN_FRONTEND=noninteractive\nARG SIMULATION=native\nENV SIMULATION=${SIMULATION}\nARG BUILDTYPE=debug\nENV BUILDTYPE=${BUILDTYPE}\nARG OMIT_DEPRECATED=true\nENV OMIT_DEPRECATED=${OMIT_DEPRECATED}\n\nRUN \\\n apt-get update && \\\n apt-get -y upgrade && \\\n apt-get install -y build-essential git cmake && \\\n rm -rf /var/lib/apt/lists/*\n\nWORKDIR /cFS\nCOPY . .\n\nRUN git submodule init \\\n && git submodule update \\\n && cp cfe/cmake/Makefile.sample Makefile \\\n && cp -r cfe/cmake/sample_defs .\n\nRUN make prep\nRUN make\nRUN make install\n\nFROM ubuntu:25.04\nCOPY --from=builder /cFS/build /cFS/build\nWORKDIR /cFS/build/exe/cpu1\nENTRYPOINT [ "./core-cpu1" ]\n'})}),"\n",(0,s.jsx)(n.h3,{id:"build-and-run-cfs",children:"Build and run cFS"}),"\n",(0,s.jsxs)(n.p,{children:["Note we're connecting to the COSMOS network (",(0,s.jsx)(n.code,{children:"docker network ls"}),") and exposing the cFS ports."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"docker build -t cfs .\ndocker run --cap-add CAP_SYS_RESOURCE --net=cosmos-project_default --name cfs -p1234:1234/udp -p1235:1235 cfs\n"})}),"\n",(0,s.jsx)(n.h2,{id:"creating-a-cosmos-plugin-for-tmtc-interface-with-cfs",children:"Creating a COSMOS plugin for TM/TC interface with cFS"}),"\n",(0,s.jsxs)(n.p,{children:["The detailed instructions how to create a plugin, can be found\n",(0,s.jsx)(n.a,{href:"/tools/staticdocs/docs/getting-started/gettingstarted",children:"here"}),', in the chapter "Interfacing with Your Hardware".']}),"\n",(0,s.jsxs)(n.p,{children:["Create a new plugin with the name ",(0,s.jsx)(n.code,{children:"CFS"}),". ",(0,s.jsx)(n.code,{children:"CFS"})," is the name of the plugin and\nmust be in capital letters according to the COSMOS documentation. This command\nshould create the plugin structure. Then cd into the plugin to create the target."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# cd .. to the location of the cfs dir\n$PATH_TO_OPENC3/openc3.sh cli generate plugin CFS\ncd openc3-cosmos-cfs\n$PATH_TO_OPENC3/openc3.sh cli generate target CFS\n"})}),"\n",(0,s.jsxs)(n.p,{children:["In this newly created plugin, change the ",(0,s.jsx)(n.code,{children:"plugin.txt"})," file, so that the\ncommunication happens over UDP. ",(0,s.jsx)(n.code,{children:"port_tm"})," is the port number on which cFS\nsends the telemetry messages. ",(0,s.jsx)(n.code,{children:"port_tc"})," indicates the port on which cFS listens to the\ntelecommands."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ruby",children:"VARIABLE ip 127.0.0.1\nVARIABLE port_tm 1235\nVARIABLE port_tc 1234\nVARIABLE cfs_target_name CFS\n\nTARGET CFS <%= cfs_target_name %>\n# hostname write_dest_port read_port write_src_port interface_address ttl write_timeout read_timeout bind_address\nINTERFACE <%= cfs_target_name %>_INT udp_interface.rb <%= ip %> <%= port_tc %> <%= port_tm %> nil nil 128 nil nil\n MAP_TARGET <%= cfs_target_name %>\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that the two arguments to the ",(0,s.jsx)(n.code,{children:"TARGET"})," parameter are:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["the physical target name that should match the name of the plugin, i.e. ",(0,s.jsx)(n.code,{children:"CFS"}),".\nThis name must match the folder name in the ",(0,s.jsx)(n.code,{children:"targets"})," folder. Example: for the\n",(0,s.jsx)(n.code,{children:"CFS"})," plugin, the target specifications must be under\n",(0,s.jsx)(n.code,{children:"openc3-cosmos-cfs/targets/CFS"}),". If you don't follow this\nconvention, the server will refuse to install your plugin at the following steps."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"the name of your target and how it is shown in the user interface."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["In this example, we keep both names to be ",(0,s.jsx)(n.code,{children:"CFS"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"creating-tmtc-definitions",children:"Creating TM/TC definitions"}),"\n",(0,s.jsx)(n.p,{children:"Change to the target folder and remove the existing files and create own files."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd openc3-cosmos-cfs/targets/CFS/cmd_tlm\nrm *\ntouch cfs_cmds.txt\ntouch cfs_tlm.txt\ntouch to_lab_cmds.txt\n"})}),"\n",(0,s.jsx)(n.p,{children:"Open these newly created files in a text editor and fill them with following\ncontent."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"to_lab_cmds.txt"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ruby",children:'COMMAND CFS TO_LAB_ENABLE BIG_ENDIAN "Enable telemetry"\n # NAME BITS TYPE min VAL max VAL init VAL DESCRIPTION\n APPEND_ID_PARAMETER STREAM_ID 16 UINT 0x1880 0x1880 0x1880 "Stream ID"\n FORMAT_STRING "0x%04X"\n APPEND_PARAMETER SEQUENCE 16 UINT 0xC000 MAX_UINT16 0xC000 ""\n FORMAT_STRING "0x%04X"\n APPEND_PARAMETER PKT_LEN 16 UINT 0x0001 0xFFFF 0x0012 "length of the packet"\n APPEND_PARAMETER CMD_ID 8 UINT 6 6 6 ""\n APPEND_PARAMETER CHECKSUM 8 UINT MIN_UINT8 MAX_UINT8 0x98 ""\n FORMAT_STRING "0x%2X"\n APPEND_PARAMETER DEST_IP 144 STRING "127.0.0.1" "Destination IP, i.e. 172.16.9.112, pc-57"\n'})}),"\n",(0,s.jsx)(n.admonition,{title:"Enabling Telemetry",type:"info",children:(0,s.jsxs)(n.p,{children:["The command ",(0,s.jsx)(n.code,{children:"0x1880"})," is needed to enable telemetry. When the cFS receives\nthis command, it starts sending telemetry to the IP address provided via the\n",(0,s.jsx)(n.code,{children:"DEST_IP"})," field."]})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"cfs_cmds.txt"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ruby",children:'COMMAND CFS NOOP BIG_ENDIAN "NOOP Command"\n # cFS primary header\n APPEND_ID_PARAMETER STREAM_ID 16 UINT 0x1882 0x1882 0x1882 "Packet Identification"\n FORMAT_STRING "0x%04X"\n APPEND_PARAMETER SEQUENCE 16 UINT MIN_UINT16 MAX_UINT16 0xC000 ""\n FORMAT_STRING "0x%04X"\n APPEND_PARAMETER PKT_LEN 16 UINT 0x0001 0x0001 0x0001 "Packet length"\n # cFS CMD secondary header\n APPEND_PARAMETER CMD_ID 8 UINT 0 0 0 ""\n APPEND_PARAMETER CHECKSUM 8 UINT MIN_UINT8 MAX_UINT8 MIN_UINT8 ""\n\nCOMMAND CFS RESET BIG_ENDIAN "Reset Counters Command"\n APPEND_ID_PARAMETER STREAM_ID 16 UINT 0x1882 0x1882 0x1882 "Packet Identification"\n FORMAT_STRING "0x%04X"\n APPEND_PARAMETER SEQUENCE 16 UINT MIN_UINT16 MAX_UINT16 0xC000 ""\n FORMAT_STRING "0x%04X"\n APPEND_PARAMETER PKT_LEN 16 UINT 0x0001 0x0001 0x0001 "Packet length"\n APPEND_PARAMETER CMD_ID 8 UINT 1 1 1 ""\n APPEND_PARAMETER CHECKSUM 8 UINT MIN_UINT8 MAX_UINT8 MIN_UINT8 ""\n\nCOMMAND CFS PROCESS BIG_ENDIAN "Process Command"\n APPEND_ID_PARAMETER STREAM_ID 16 UINT 0x1882 0x1882 0x1882 "Packet Identification"\n FORMAT_STRING "0x%04X"\n APPEND_PARAMETER SEQUENCE 16 UINT MIN_UINT16 MAX_UINT16 0xC000 ""\n FORMAT_STRING "0x%04X"\n APPEND_PARAMETER PKT_LEN 16 UINT 0x0001 0x0001 0x0001 "Packet length"\n APPEND_PARAMETER CMD_ID 8 UINT 2 2 2 ""\n APPEND_PARAMETER CHECKSUM 8 UINT MIN_UINT8 MAX_UINT8 MIN_UINT8 ""\n'})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"cfs_tlm.txt"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-ruby",children:'TELEMETRY CFS HK BIG_ENDIAN "housekeeping telemetry"\n # NAME BITS TYPE ID DESCRIPTION\n APPEND_ID_ITEM STREAM_ID 16 UINT 0x0883 "Stream ID"\n FORMAT_STRING "0x%04X"\n APPEND_ITEM SEQUENCE 16 UINT "Packet Sequence"\n FORMAT_STRING "0x%04X"\n APPEND_ITEM PKT_LEN 16 UINT "Length of the packet"\n # telemetry secondary header\n APPEND_ITEM SECONDS 32 UINT ""\n UNITS Seconds sec\n APPEND_ITEM SUBSECS 16 UINT ""\n UNITS Milliseconds ms\n # some bytes not known for what\n APPEND_ITEM SPARE2ALIGN 32 UINT "Spares"\n # payload\n APPEND_ITEM CMD_ERRS 8 UINT "Command Error Counter"\n APPEND_ITEM CMD_CNT 8 UINT "Command Counter"\n # spare / alignment\n APPEND_ITEM SPARE 16 UINT "Spares"\n'})}),"\n",(0,s.jsx)(n.p,{children:"Build the plugin from the base of your plugin folder:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# cd openc3-cosmos-cfs\n$PATH_TO_OPENC3/openc3.sh cli rake build VERSION=1.0.0\n"})}),"\n",(0,s.jsx)(n.admonition,{title:"Plugin versioning",type:"info",children:(0,s.jsx)(n.p,{children:"Do not forget to change the version number with every build if you want to\nbetter distinguish between the versions of the plugin. When the version is\nseen in the plugin's .gem file name, it is easier to visualize the existing\nversions and the newly uploaded versions."})}),"\n",(0,s.jsx)(n.admonition,{title:"Plugin parameters",type:"info",children:(0,s.jsxs)(n.p,{children:["Multiple parameters are available for the plugin configuration. See the ",(0,s.jsx)(n.a,{href:"/tools/staticdocs/docs/configuration/plugins",children:"plugin"})," page."]})}),"\n",(0,s.jsx)(n.h2,{id:"uploading-the-plugin",children:"Uploading the plugin"}),"\n",(0,s.jsx)(n.p,{children:"After the plugin has been built, you can import the plugin in the admin area of\nthe page."}),"\n",(0,s.jsxs)(n.p,{children:["Connect with a browser to\n",(0,s.jsx)(n.a,{href:"http://localhost:2900/tools/admin",children:"http://localhost:2900/tools/admin"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:['Click on the "Install New Plugin" button and navigate to where your plugin is stored and select\nthe ',(0,s.jsx)(n.code,{children:"openc3-cosmos-cfs-1.0.0.gem"})," file. Right of the selection line click on ",(0,s.jsx)(n.code,{children:"Install"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Determine the IP address the cFS container and COSMOS operator container are running at:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'docker network ls\nNETWORK ID NAME DRIVER SCOPE\nd842f813f1c7 cosmos-project_default bridge local\n\ndocker network inspect cosmos-project_default \n[\n {\n "Name": "cosmos-project_default ",\n ...\n "Containers": {\n "03cb6bf1b27c631fad1366e9342aeaa5b80f458a437195e4a95e674bb5f5983d": {\n "Name": "cfs",\n "IPv4Address": "172.20.0.9/16",\n },\n "ceb9ea99b00849fd8867dcd1646838fef3471f7d64b69014703dbedbcc8147fc": {\n "Name": "openc3_openc3-operator_1",\n "IPv4Address": "172.20.0.8/16",\n }\n }\n ...\n }\n]\n'})}),"\n",(0,s.jsxs)(n.p,{children:["When using this plugin, make sure to change the ",(0,s.jsx)(n.code,{children:"ip"})," variable during uploading\nto match where cFS is running. In the example above you would set it to 172.20.0.9.\n",(0,s.jsx)(n.code,{children:"port_tm"})," is the port number on which cFS is sending the telemetry messages.\n",(0,s.jsx)(n.code,{children:"port_tc"})," indicates the port on cFS is listening for telecommands."]}),"\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.code,{children:"cfs_target_name"})," you can change the target name of this plugin. This\nstep is optional as long as you are fine with your plugin showing up as ",(0,s.jsx)(n.code,{children:"CFS"}),"."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"Plugin Variable Settings",src:t(3191).Z+"",width:"1183",height:"270"})}),"\n",(0,s.jsx)(n.admonition,{title:"Port subscription",type:"warning",children:(0,s.jsx)(n.p,{children:"The last uploaded plugin on COSMOS will subscribe to TM on port 1235.\nOther plugins will not receive any TM anymore."})}),"\n",(0,s.jsx)(n.admonition,{title:"Typo errors",type:"info",children:(0,s.jsx)(n.p,{children:"Presence of typos in one of the plugin files can cause problems when uploading and installing\nthe plugin's .gem file. Make sure your configuration is typo-free."})}),"\n",(0,s.jsxs)(n.p,{children:["In the example above, the operator image is running at 172.20.0.8. To enable telemetry, go to the browser and connect to\n",(0,s.jsx)(n.a,{href:"http://localhost:2900/tools/cmdsender/CFS/TO_LAB_ENABLE",children:"http://localhost:2900/tools/cmdsender/CFS/TO_LAB_ENABLE"}),". Change the ",(0,s.jsx)(n.code,{children:"DEST_IP"})," to the IP address of the operator image (172.20.0.8) and send the command."]}),"\n",(0,s.jsxs)(n.p,{children:["Under ",(0,s.jsx)(n.a,{href:"http://localhost:2900/tools/cmdtlmserver/tlm-packets",children:"http://localhost:2900/tools/cmdtlmserver/tlm-packets"}),", you should see the incoming packets. Note in the CmdTlmServer you will also see CFS_INT UNKNOWN packets because we did not define the full cFS packet set. That exercise is left to the reader."]})]})}function h(e={}){let{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},2840:function(e,n,t){t.d(n,{Z:()=>r,a:()=>c});var i=t(2784);let s={},o=i.createContext(s);function c(e){let n=i.useContext(o);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:c(e.components),i.createElement(o.Provider,{value:n},e.children)}},3191:function(e,n,t){t.d(n,{Z:()=>i});let i=t.p+"assets/images/plugin_variables-6904e1d9003a6c8c530bd1f738f7966217beca7d3064b40670e7a4ab7e200927.png"}}]);
@@ -1 +1 @@
1
- "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["4456"],{9779:function(e,t,o){o.r(t),o.d(t,{default:()=>u,frontMatter:()=>l,metadata:()=>s,assets:()=>c,toc:()=>a,contentTitle:()=>r});var s=JSON.parse('{"id":"tools/bucket-explorer","title":"Bucket Explorer","description":"File browser to the COSMOS backend bucket storage system","source":"@site/docs/tools/bucket-explorer.md","sourceDirName":"tools","slug":"/tools/bucket-explorer","permalink":"/tools/staticdocs/docs/tools/bucket-explorer","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/tools/bucket-explorer.md","tags":[],"version":"current","frontMatter":{"title":"Bucket Explorer","description":"File browser to the COSMOS backend bucket storage system","sidebar_custom_props":{"myEmoji":"\uD83D\uDEE0\uFE0F"}},"sidebar":"defaultSidebar","previous":{"title":"Autonomic (Enterprise)","permalink":"/tools/staticdocs/docs/tools/autonomic"},"next":{"title":"Calendar (Enterprise)","permalink":"/tools/staticdocs/docs/tools/calendar"}}'),n=o("2322"),i=o("2840");let l={title:"Bucket Explorer",description:"File browser to the COSMOS backend bucket storage system",sidebar_custom_props:{myEmoji:"\uD83D\uDEE0\uFE0F"}},r=void 0,c={},a=[{value:"Introduction",id:"introduction",level:2},{value:"Browsing Files",id:"browsing-files",level:2},{value:"Upload",id:"upload",level:3},{value:"Download",id:"download",level:3},{value:"Delete",id:"delete",level:3}];function d(e){let t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,n.jsx)(t.p,{children:"Bucket Explorer is a file browser to the COSMOS backend bucket storage system. It allows you to view files in an intuitive file browser hierarchy and download them. Bucket Explorer works both with local installations of COSMOS as well as cloud deployments which utilize cloud storage such as AWS S3 and GCP Cloud Storage."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Bucket Explorer",src:o(909).Z+"",width:"1271",height:"543"})}),"\n",(0,n.jsx)(t.h2,{id:"browsing-files",children:"Browsing Files"}),"\n",(0,n.jsxs)(t.p,{children:["At the top are the three standard COSMOS buckets: ",(0,n.jsx)(t.code,{children:"config"}),", ",(0,n.jsx)(t.code,{children:"logs"}),", and ",(0,n.jsx)(t.code,{children:"tools"}),". Each bucket contains top level folders named after the scope. In COSMOS Core the only scope is ",(0,n.jsx)(t.code,{children:"DEFAULT"}),". The ",(0,n.jsx)(t.code,{children:"config"})," bucket holds the COSMOS configuration which is populated as plugins are installed. The ",(0,n.jsx)(t.code,{children:"logs"})," bucket holds the COSMOS logs which are generated by the various COSMOS microservices (See ",(0,n.jsx)(t.a,{href:"/tools/staticdocs/docs/guides/logging",children:"Logging"})," for more info). These logs are gzipped to save storage space. The ",(0,n.jsx)(t.code,{children:"tools"})," bucket holds the source code for the built-in COSMOS tools as well as user created tools installed as plugins. Note that the search box only searches the current screen worth of files, e.g. it does not search the entire bucket."]}),"\n",(0,n.jsx)(t.admonition,{title:"Tools as Static Website",type:"note",children:(0,n.jsx)(t.p,{children:"Using bucket storage allows COSMOS to directly serve the tools as a static website and thus it must be a public bucket in cloud technology like S3"})}),"\n",(0,n.jsx)(t.h3,{id:"upload",children:"Upload"}),"\n",(0,n.jsxs)(t.p,{children:["Click the Upload icon to bring up a file browser to select a file to upload into the current bucket and path. Note that in ",(0,n.jsx)(t.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," you can only upload files to the config/DEFAULT/targets_modified folder unless you're an Admin."]}),"\n",(0,n.jsx)(t.h3,{id:"download",children:"Download"}),"\n",(0,n.jsx)(t.p,{children:"Click the Download icon to download any of the individual files from any bucket and path."}),"\n",(0,n.jsx)(t.h3,{id:"delete",children:"Delete"}),"\n",(0,n.jsxs)(t.p,{children:["Click the Trash icon to delete an individual file. Note that in ",(0,n.jsx)(t.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," you can only delete files in the config/DEFAULT/targets_modified folder unless you're an Admin."]})]})}function u(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},909:function(e,t,o){o.d(t,{Z:function(){return s}});let s=o.p+"assets/images/bucket_explorer-ba88a20121198c3441a6af5302ab1a6ad62a171661037e9e3bfd312ca8bdb5ef.png"},2840:function(e,t,o){o.d(t,{Z:function(){return r},a:function(){return l}});var s=o(2784);let n={},i=s.createContext(n);function l(e){let t=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]);
1
+ "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["4456"],{2840:function(e,t,o){o.d(t,{Z:()=>r,a:()=>l});var s=o(2784);let n={},i=s.createContext(n);function l(e){let t=s.useContext(i);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:l(e.components),s.createElement(i.Provider,{value:t},e.children)}},827:function(e,t,o){o.r(t),o.d(t,{frontMatter:()=>l,default:()=>h,contentTitle:()=>r,assets:()=>c,toc:()=>a,metadata:()=>s});var s=JSON.parse('{"id":"tools/bucket-explorer","title":"Bucket Explorer","description":"File browser to the COSMOS backend bucket storage system","source":"@site/docs/tools/bucket-explorer.md","sourceDirName":"tools","slug":"/tools/bucket-explorer","permalink":"/tools/staticdocs/docs/tools/bucket-explorer","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/tools/bucket-explorer.md","tags":[],"version":"current","frontMatter":{"title":"Bucket Explorer","description":"File browser to the COSMOS backend bucket storage system","sidebar_custom_props":{"myEmoji":"\uD83D\uDEE0\uFE0F"}},"sidebar":"defaultSidebar","previous":{"title":"Autonomic (Enterprise)","permalink":"/tools/staticdocs/docs/tools/autonomic"},"next":{"title":"Calendar (Enterprise)","permalink":"/tools/staticdocs/docs/tools/calendar"}}'),n=o(2322),i=o(2840);let l={title:"Bucket Explorer",description:"File browser to the COSMOS backend bucket storage system",sidebar_custom_props:{myEmoji:"\uD83D\uDEE0\uFE0F"}},r=void 0,c={},a=[{value:"Introduction",id:"introduction",level:2},{value:"Browsing Files",id:"browsing-files",level:2},{value:"Upload",id:"upload",level:3},{value:"Download",id:"download",level:3},{value:"Delete",id:"delete",level:3}];function d(e){let t={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,n.jsx)(t.p,{children:"Bucket Explorer is a file browser to the COSMOS backend bucket storage system. It allows you to view files in an intuitive file browser hierarchy and download them. Bucket Explorer works both with local installations of COSMOS as well as cloud deployments which utilize cloud storage such as AWS S3 and GCP Cloud Storage."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"Bucket Explorer",src:o(909).Z+"",width:"1271",height:"543"})}),"\n",(0,n.jsx)(t.h2,{id:"browsing-files",children:"Browsing Files"}),"\n",(0,n.jsxs)(t.p,{children:["At the top are the three standard COSMOS buckets: ",(0,n.jsx)(t.code,{children:"config"}),", ",(0,n.jsx)(t.code,{children:"logs"}),", and ",(0,n.jsx)(t.code,{children:"tools"}),". Each bucket contains top level folders named after the scope. In COSMOS Core the only scope is ",(0,n.jsx)(t.code,{children:"DEFAULT"}),". The ",(0,n.jsx)(t.code,{children:"config"})," bucket holds the COSMOS configuration which is populated as plugins are installed. The ",(0,n.jsx)(t.code,{children:"logs"})," bucket holds the COSMOS logs which are generated by the various COSMOS microservices (See ",(0,n.jsx)(t.a,{href:"/tools/staticdocs/docs/guides/logging",children:"Logging"})," for more info). These logs are gzipped to save storage space. The ",(0,n.jsx)(t.code,{children:"tools"})," bucket holds the source code for the built-in COSMOS tools as well as user created tools installed as plugins. Note that the search box only searches the current screen worth of files, e.g. it does not search the entire bucket."]}),"\n",(0,n.jsx)(t.admonition,{title:"Tools as Static Website",type:"note",children:(0,n.jsx)(t.p,{children:"Using bucket storage allows COSMOS to directly serve the tools as a static website and thus it must be a public bucket in cloud technology like S3"})}),"\n",(0,n.jsx)(t.h3,{id:"upload",children:"Upload"}),"\n",(0,n.jsxs)(t.p,{children:["Click the Upload icon to bring up a file browser to select a file to upload into the current bucket and path. Note that in ",(0,n.jsx)(t.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," you can only upload files to the config/DEFAULT/targets_modified folder unless you're an Admin."]}),"\n",(0,n.jsx)(t.h3,{id:"download",children:"Download"}),"\n",(0,n.jsx)(t.p,{children:"Click the Download icon to download any of the individual files from any bucket and path."}),"\n",(0,n.jsx)(t.h3,{id:"delete",children:"Delete"}),"\n",(0,n.jsxs)(t.p,{children:["Click the Trash icon to delete an individual file. Note that in ",(0,n.jsx)(t.a,{href:"https://openc3.com/enterprise",children:"COSMOS Enterprise"})," you can only delete files in the config/DEFAULT/targets_modified folder unless you're an Admin."]})]})}function h(e={}){let{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},909:function(e,t,o){o.d(t,{Z:()=>s});let s=o.p+"assets/images/bucket_explorer-ba88a20121198c3441a6af5302ab1a6ad62a171661037e9e3bfd312ca8bdb5ef.png"}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["6449"],{2840:function(e,t,o){o.d(t,{Z:()=>a,a:()=>r});var s=o(2784);let i={},n=s.createContext(i);function r(e){let t=s.useContext(n);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(n.Provider,{value:t},e.children)}},4353:function(e,t,o){o.r(t),o.d(t,{frontMatter:()=>r,default:()=>g,contentTitle:()=>a,assets:()=>l,toc:()=>c,metadata:()=>s});var s=JSON.parse('{"id":"guides/logging","title":"Logging","description":"The log files in COSMOS","source":"@site/docs/guides/logging.md","sourceDirName":"guides","slug":"/guides/logging","permalink":"/tools/staticdocs/docs/guides/logging","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/guides/logging.md","tags":[],"version":"current","frontMatter":{"title":"Logging","description":"The log files in COSMOS","sidebar_custom_props":{"myEmoji":"\uD83E\uDEB5"}},"sidebar":"defaultSidebar","previous":{"title":"Local Mode","permalink":"/tools/staticdocs/docs/guides/local-mode"},"next":{"title":"Monitoring","permalink":"/tools/staticdocs/docs/guides/monitoring"}}'),i=o(2322),n=o(2840);let r={title:"Logging",description:"The log files in COSMOS",sidebar_custom_props:{myEmoji:"\uD83E\uDEB5"}},a=void 0,l={},c=[{value:"decom_logs &amp; raw_logs",id:"decom_logs--raw_logs",level:3},{value:"text_logs",id:"text_logs",level:3},{value:"tool_logs",id:"tool_logs",level:3}];function d(e){let t={a:"a",h3:"h3",img:"img",p:"p",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["The COSMOS ",(0,i.jsx)(t.a,{href:"/tools/staticdocs/docs/tools/bucket-explorer",children:"Bucket Explorer"})," tool provides a way to browse the COSMOS bucket storage backend whether you are running locally or in a cloud environment. Browse to ",(0,i.jsx)(t.a,{href:"http://localhost:2900/tools/bucketexplorer",children:"http://localhost:2900/tools/bucketexplorer"})," and you should see the list of buckets at the top:"]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"Bucket Explorer",src:o(8016).Z+"",width:"1272",height:"570"})}),"\n",(0,i.jsx)(t.p,{children:"Note the config and logs buckets are organized by scopes of which there initially is just one: DEFAULT. Clicking the DEFAULT folder in the logs bucket shows the decom_logs, raw_logs, reduced_xxx_logs, text_logs and tool_logs."}),"\n",(0,i.jsx)(t.h3,{id:"decom_logs--raw_logs",children:"decom_logs & raw_logs"}),"\n",(0,i.jsx)(t.p,{children:"The decom_logs and raw_logs folders contain the decommutated and raw command and telemetry data. Both are further broken down by target, packet, then date. For example, browsing into the DEFAULT/raw_logs/tlm/INST2/<YYYYMMDD>/ directory:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"raw_tlm_logs",src:o(608).Z+"",width:"1272",height:"557"})}),"\n",(0,i.jsxs)(t.p,{children:["Note the presence of the gzipped .bin files which contain the raw binary data. For more information about the structure of these files see the ",(0,i.jsx)(t.a,{href:"/tools/staticdocs/docs/development/log-structure",children:"Log Structure"})," developer documentation."]}),"\n",(0,i.jsx)(t.p,{children:"The default settings for the Logging microservice is to start a new log file every 10 minutes or 50MB, which ever comes first. In the case of the low data rate demo, the 10 minute mark is hit first."}),"\n",(0,i.jsxs)(t.p,{children:["To change the logging settings add the various CYCLE_TIME ",(0,i.jsx)(t.a,{href:"/tools/staticdocs/docs/configuration/plugins#target-modifiers",children:"Target Modifiers"})," under the declared ",(0,i.jsx)(t.a,{href:"/tools/staticdocs/docs/configuration/plugins#target-1",children:"TARGET"})," name in your plugin.txt."]}),"\n",(0,i.jsx)(t.h3,{id:"text_logs",children:"text_logs"}),"\n",(0,i.jsx)(t.p,{children:"The text_logs folder contains openc3_log_messages which contains text files that are again sorted by date and timestamped. These log messages come from the various microservices including the server and the target microservices. Thus these logs contain all the commands sent (in plain text) and telemetry checked. These log messages files are long term records of the messages in the CmdTlmServer Log Messages window:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"log_messages",src:o(780).Z+"",width:"1266",height:"469"})}),"\n",(0,i.jsx)(t.h3,{id:"tool_logs",children:"tool_logs"}),"\n",(0,i.jsx)(t.p,{children:"The tool_logs directory contains logs from the various COSMOS tools. Note that if you have not yet run any tools you may not see this directory as it is created on demand. Tool sub-directories are also created on demand. For example, after running a script in Script Runner a new 'sr' subdirectory appears which contains the script runner log resulting from running the script. In some cases logs in this directory may also be directly available from the tool itself. In the Script Runner case, the Script Messages pane below the script holds the output messages from the last script. Clicking the Download link allows you to download these messages as a file."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"log_messages",src:o(6430).Z+"",width:"1266",height:"599"})})]})}function g(e={}){let{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},608:function(e,t,o){o.d(t,{Z:()=>s});let s=o.p+"assets/images/raw_tlm_logs-b293435cebbd5d4f04ab8a469ce2b4eb66f4cfd046d7b18ee417893336816b85.png"},6430:function(e,t,o){o.d(t,{Z:()=>s});let s=o.p+"assets/images/script_messages-5c30dab8202ae3d18fa1f12cdd43f409967b1d4ac84a4a0e96bf027041ab9a07.png"},780:function(e,t,o){o.d(t,{Z:()=>s});let s=o.p+"assets/images/log_messages-6dd20c27f64fc00c8e61ee1062193fd6cb31efa4701130385c9853abfeed8495.png"},8016:function(e,t,o){o.d(t,{Z:()=>s});let s=o.p+"assets/images/logs-bfc2ef93f6e60cb3bdf409aaaf0b4315b6e98dc1b9c17bdc171e67b416d884cc.png"}}]);