openc3-cosmos-tool-docs 6.2.1 → 6.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/tools/staticdocs/404.html +1 -1
  3. data/tools/staticdocs/assets/images/cosmos-containers-7ecd745840fcff307f0fec01ac4d88a8fa76d531abeae407fee0e508f50a487c.png +0 -0
  4. data/tools/staticdocs/assets/images/cosmos-images-8e15c197653ac3a1f39e8c5eaa56155f364e67d87d66647cff1355b960093af1.png +0 -0
  5. data/tools/staticdocs/assets/images/horizontalbox-085c91cebe26fdd5f85b467556607dd4631da5bccabd84fb164d1f46e45e60c9.png +0 -0
  6. data/tools/staticdocs/assets/images/verticalbox-75738427d398302986b52afb373acef11abf3a24f60d20b8cca442688054b22b.png +0 -0
  7. data/tools/staticdocs/assets/js/1e02e6a3.12bdc98d.js +1 -0
  8. data/tools/staticdocs/assets/js/2bb7bf90.1772f030.js +1 -0
  9. data/tools/staticdocs/assets/js/35398c5c.fcf47881.js +1 -0
  10. data/tools/staticdocs/assets/js/411898ad.f7b3ff17.js +1 -0
  11. data/tools/staticdocs/assets/js/5b233ba7.9d6ba314.js +1 -0
  12. data/tools/staticdocs/assets/js/5bc719f6.6d27292c.js +1 -0
  13. data/tools/staticdocs/assets/js/5c6ce5ec.652b922b.js +1 -0
  14. data/tools/staticdocs/assets/js/6831b732.1318b398.js +1 -0
  15. data/tools/staticdocs/assets/js/696b4199.1e950fcb.js +1 -0
  16. data/tools/staticdocs/assets/js/6b210247.6a77064a.js +1 -0
  17. data/tools/staticdocs/assets/js/6f92e431.6439052e.js +1 -0
  18. data/tools/staticdocs/assets/js/75e64983.324643a8.js +1 -0
  19. data/tools/staticdocs/assets/js/{7f5b2696.72e3b019.js → 7f5b2696.a3dc640e.js} +1 -1
  20. data/tools/staticdocs/assets/js/867640d5.27d9d599.js +1 -0
  21. data/tools/staticdocs/assets/js/89e76475.e1b0dbdb.js +1 -0
  22. data/tools/staticdocs/assets/js/{9424f0b3.96e6dac4.js → 9424f0b3.3683501c.js} +1 -1
  23. data/tools/staticdocs/assets/js/964eb012.0e04c58d.js +1 -0
  24. data/tools/staticdocs/assets/js/97535711.e595488c.js +1 -0
  25. data/tools/staticdocs/assets/js/99581c43.841b4a2e.js +1 -0
  26. data/tools/staticdocs/assets/js/9d6e81d0.36405219.js +1 -0
  27. data/tools/staticdocs/assets/js/a677c089.cfa50691.js +1 -0
  28. data/tools/staticdocs/assets/js/a9987364.b418f772.js +1 -0
  29. data/tools/staticdocs/assets/js/a9b2dc27.805dc1ba.js +1 -0
  30. data/tools/staticdocs/assets/js/aa6b6c1b.ef9b0f38.js +1 -0
  31. data/tools/staticdocs/assets/js/b062d239.57d6e194.js +1 -0
  32. data/tools/staticdocs/assets/js/b6d70f94.a9228642.js +1 -0
  33. data/tools/staticdocs/assets/js/c24eae19.0575c394.js +1 -0
  34. data/tools/staticdocs/assets/js/ce89ef36.6b89b0fe.js +1 -0
  35. data/tools/staticdocs/assets/js/d1b923aa.da892cde.js +1 -0
  36. data/tools/staticdocs/assets/js/d66bf9c0.80a50660.js +1 -0
  37. data/tools/staticdocs/assets/js/{d8ca4191.f5da7c6d.js → d8ca4191.8df86c99.js} +1 -1
  38. data/tools/staticdocs/assets/js/d9b92eba.5db8667e.js +1 -0
  39. data/tools/staticdocs/assets/js/db8fa1d0.f1eed806.js +1 -0
  40. data/tools/staticdocs/assets/js/main.a8e2c06c.js +36 -0
  41. data/tools/staticdocs/assets/js/runtime~main.7102cb65.js +1 -0
  42. data/tools/staticdocs/docs/configuration/accessors.html +4 -3
  43. data/tools/staticdocs/docs/configuration/command.html +1 -1
  44. data/tools/staticdocs/docs/configuration/format.html +1 -1
  45. data/tools/staticdocs/docs/configuration/interfaces.html +15 -4
  46. data/tools/staticdocs/docs/configuration/plugins.html +5 -5
  47. data/tools/staticdocs/docs/configuration/protocols.html +7 -6
  48. data/tools/staticdocs/docs/configuration/ssl-tls.html +115 -76
  49. data/tools/staticdocs/docs/configuration/table.html +1 -1
  50. data/tools/staticdocs/docs/configuration/target.html +1 -1
  51. data/tools/staticdocs/docs/configuration/telemetry-screens.html +5 -5
  52. data/tools/staticdocs/docs/configuration/telemetry.html +1 -1
  53. data/tools/staticdocs/docs/configuration.html +1 -1
  54. data/tools/staticdocs/docs/development/curl.html +4 -4
  55. data/tools/staticdocs/docs/development/developing.html +2 -2
  56. data/tools/staticdocs/docs/development/json-api.html +1 -1
  57. data/tools/staticdocs/docs/development/log-structure.html +1 -1
  58. data/tools/staticdocs/docs/development/roadmap.html +20 -29
  59. data/tools/staticdocs/docs/development/streaming-api.html +88 -2
  60. data/tools/staticdocs/docs/development/testing.html +5 -2
  61. data/tools/staticdocs/docs/development.html +1 -1
  62. data/tools/staticdocs/docs/getting-started/cli.html +47 -0
  63. data/tools/staticdocs/docs/getting-started/generators.html +3 -3
  64. data/tools/staticdocs/docs/getting-started/gettingstarted.html +2 -2
  65. data/tools/staticdocs/docs/getting-started/installation.html +3 -3
  66. data/tools/staticdocs/docs/getting-started/{key_concepts.html → key-concepts.html} +10 -6
  67. data/tools/staticdocs/docs/getting-started/podman.html +2 -2
  68. data/tools/staticdocs/docs/getting-started/requirements.html +2 -2
  69. data/tools/staticdocs/docs/getting-started/upgrading.html +3 -3
  70. data/tools/staticdocs/docs/getting-started.html +1 -1
  71. data/tools/staticdocs/docs/guides/bridges.html +1 -1
  72. data/tools/staticdocs/docs/guides/cfs.html +12 -12
  73. data/tools/staticdocs/docs/guides/custom-widgets.html +2 -2
  74. data/tools/staticdocs/docs/guides/dynamic-packets.html +17 -0
  75. data/tools/staticdocs/docs/guides/{exposing_microservices.html → exposing-microservices.html} +5 -5
  76. data/tools/staticdocs/docs/guides/little-endian-bitfields.html +2 -2
  77. data/tools/staticdocs/docs/guides/local-mode.html +1 -1
  78. data/tools/staticdocs/docs/guides/logging.html +1 -1
  79. data/tools/staticdocs/docs/guides/monitoring.html +1 -1
  80. data/tools/staticdocs/docs/guides/performance.html +6 -6
  81. data/tools/staticdocs/docs/guides/raspberrypi.html +1 -1
  82. data/tools/staticdocs/docs/guides/script-writing.html +1 -1
  83. data/tools/staticdocs/docs/guides/scripting-api.html +86 -17
  84. data/tools/staticdocs/docs/guides.html +1 -1
  85. data/tools/staticdocs/docs/meta/contributing.html +1 -1
  86. data/tools/staticdocs/docs/meta/licenses.html +8 -8
  87. data/tools/staticdocs/docs/meta/philosophy.html +2 -2
  88. data/tools/staticdocs/docs/meta/xtce.html +1 -1
  89. data/tools/staticdocs/docs/meta.html +1 -1
  90. data/tools/staticdocs/docs/privacy.html +1 -1
  91. data/tools/staticdocs/docs/tools/admin.html +1 -1
  92. data/tools/staticdocs/docs/tools/autonomic.html +1 -1
  93. data/tools/staticdocs/docs/tools/bucket-explorer.html +2 -2
  94. data/tools/staticdocs/docs/tools/calendar.html +1 -1
  95. data/tools/staticdocs/docs/tools/cmd-sender.html +1 -1
  96. data/tools/staticdocs/docs/tools/cmd-tlm-server.html +1 -1
  97. data/tools/staticdocs/docs/tools/command_history.html +1 -1
  98. data/tools/staticdocs/docs/tools/data-extractor.html +1 -1
  99. data/tools/staticdocs/docs/tools/data-viewer.html +1 -1
  100. data/tools/staticdocs/docs/tools/handbooks.html +1 -1
  101. data/tools/staticdocs/docs/tools/limits-monitor.html +1 -1
  102. data/tools/staticdocs/docs/tools/packet-viewer.html +1 -1
  103. data/tools/staticdocs/docs/tools/script-runner.html +1 -1
  104. data/tools/staticdocs/docs/tools/table-manager.html +1 -1
  105. data/tools/staticdocs/docs/tools/tlm-grapher.html +1 -1
  106. data/tools/staticdocs/docs/tools/tlm-viewer.html +1 -1
  107. data/tools/staticdocs/docs/tools.html +1 -1
  108. data/tools/staticdocs/docs.html +1 -1
  109. data/tools/staticdocs/img/cosmos-containers.png +0 -0
  110. data/tools/staticdocs/img/cosmos-images.png +0 -0
  111. data/tools/staticdocs/img/telemetry_viewer/widgets/horizontalbox.png +0 -0
  112. data/tools/staticdocs/img/telemetry_viewer/widgets/verticalbox.png +0 -0
  113. data/tools/staticdocs/index.html +1 -1
  114. data/tools/staticdocs/lunr-index-1746647301890.json +1 -0
  115. data/tools/staticdocs/lunr-index.json +1 -1
  116. data/tools/staticdocs/markdown-page.html +1 -1
  117. data/tools/staticdocs/search-doc-1746647301890.json +1 -0
  118. data/tools/staticdocs/search-doc.json +1 -1
  119. data/tools/staticdocs/sitemap.xml +1 -1
  120. metadata +50 -45
  121. data/tools/staticdocs/assets/images/horizontalbox-ddf82f64de700286a742a71e0c1adebbc7e9822a0dff41139f41bc476e4fc4ce.png +0 -0
  122. data/tools/staticdocs/assets/images/verticalbox-28fdba6f2c051a499b7f08a1be97edf0297ac9a9ce0dba44f02a7fe1c2616d91.png +0 -0
  123. data/tools/staticdocs/assets/js/1e02e6a3.f477eca7.js +0 -1
  124. data/tools/staticdocs/assets/js/2bb7bf90.4051cf46.js +0 -1
  125. data/tools/staticdocs/assets/js/31436304.a6b2eb4a.js +0 -1
  126. data/tools/staticdocs/assets/js/411898ad.f7fc4d80.js +0 -1
  127. data/tools/staticdocs/assets/js/5b233ba7.2ea0179c.js +0 -1
  128. data/tools/staticdocs/assets/js/5bc719f6.b84c55e3.js +0 -1
  129. data/tools/staticdocs/assets/js/5c6ce5ec.67d1d92e.js +0 -1
  130. data/tools/staticdocs/assets/js/6831b732.0a867cbc.js +0 -1
  131. data/tools/staticdocs/assets/js/696b4199.2a7ff897.js +0 -1
  132. data/tools/staticdocs/assets/js/6b210247.ef28d4e5.js +0 -1
  133. data/tools/staticdocs/assets/js/6f92e431.d2ce2753.js +0 -1
  134. data/tools/staticdocs/assets/js/75e64983.81988bef.js +0 -1
  135. data/tools/staticdocs/assets/js/867640d5.2c0fa6d9.js +0 -1
  136. data/tools/staticdocs/assets/js/89e76475.a76d0072.js +0 -1
  137. data/tools/staticdocs/assets/js/97535711.78660098.js +0 -1
  138. data/tools/staticdocs/assets/js/99581c43.5e55992d.js +0 -1
  139. data/tools/staticdocs/assets/js/9d6e81d0.44e2d544.js +0 -1
  140. data/tools/staticdocs/assets/js/a677c089.18f98b70.js +0 -1
  141. data/tools/staticdocs/assets/js/a9987364.81e9c91d.js +0 -1
  142. data/tools/staticdocs/assets/js/aa6b6c1b.08f58887.js +0 -1
  143. data/tools/staticdocs/assets/js/b6d70f94.7813125e.js +0 -1
  144. data/tools/staticdocs/assets/js/c24eae19.aaae7796.js +0 -1
  145. data/tools/staticdocs/assets/js/ce89ef36.1d76e86a.js +0 -1
  146. data/tools/staticdocs/assets/js/d1b923aa.a73e7e79.js +0 -1
  147. data/tools/staticdocs/assets/js/d66bf9c0.842d2efa.js +0 -1
  148. data/tools/staticdocs/assets/js/d9b92eba.34e63ba6.js +0 -1
  149. data/tools/staticdocs/assets/js/db8fa1d0.94b76b52.js +0 -1
  150. data/tools/staticdocs/assets/js/ebec1ccb.f938ebaa.js +0 -1
  151. data/tools/staticdocs/assets/js/main.485b7747.js +0 -36
  152. data/tools/staticdocs/assets/js/runtime~main.61a578da.js +0 -1
  153. data/tools/staticdocs/lunr-index-1741317069195.json +0 -1
  154. data/tools/staticdocs/search-doc-1741317069195.json +0 -1
@@ -1 +1 @@
1
- <?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://docs.openc3.com/tools/staticdocs/markdown-page</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/command</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/format</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/interfaces</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/plugins</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/protocols</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/ssl-tls</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/table</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/target</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/telemetry</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/telemetry-screens</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/curl</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/developing</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/json-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/log-structure</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/roadmap</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/streaming-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/testing</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/generators</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/gettingstarted</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/installation</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/key_concepts</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/podman</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/requirements</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/upgrading</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/bridges</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/cfs</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/custom-widgets</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/exposing_microservices</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/little-endian-bitfields</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/local-mode</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/logging</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/monitoring</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/performance</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/raspberrypi</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/script-writing</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/scripting-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta/contributing</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta/licenses</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta/philosophy</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta/xtce</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/privacy</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/admin</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/autonomic</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/bucket-explorer</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/calendar</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/cmd-sender</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/cmd-tlm-server</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/command_history</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/data-extractor</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/data-viewer</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/handbooks</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/limits-monitor</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/packet-viewer</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/script-runner</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/table-manager</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/tlm-grapher</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/tlm-viewer</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/</loc><changefreq>weekly</changefreq><priority>0.5</priority></url></urlset>
1
+ <?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://docs.openc3.com/tools/staticdocs/markdown-page</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/accessors</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/command</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/format</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/interfaces</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/plugins</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/protocols</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/ssl-tls</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/table</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/target</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/telemetry</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/configuration/telemetry-screens</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/curl</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/developing</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/json-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/log-structure</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/roadmap</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/streaming-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/development/testing</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/cli</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/generators</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/gettingstarted</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/installation</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/key-concepts</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/podman</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/requirements</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/getting-started/upgrading</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/bridges</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/cfs</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/custom-widgets</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/dynamic-packets</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/exposing-microservices</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/little-endian-bitfields</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/local-mode</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/logging</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/monitoring</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/performance</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/raspberrypi</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/script-writing</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/guides/scripting-api</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta/contributing</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta/licenses</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta/philosophy</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/meta/xtce</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/privacy</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/admin</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/autonomic</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/bucket-explorer</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/calendar</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/cmd-sender</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/cmd-tlm-server</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/command_history</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/data-extractor</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/data-viewer</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/handbooks</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/limits-monitor</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/packet-viewer</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/script-runner</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/table-manager</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/tlm-grapher</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/docs/tools/tlm-viewer</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://docs.openc3.com/tools/staticdocs/</loc><changefreq>weekly</changefreq><priority>0.5</priority></url></urlset>
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openc3-cosmos-tool-docs
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.2.1
4
+ version: 6.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Melton
8
8
  - Jason Thomas
9
- autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2025-03-07 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: " This plugin makes the OpenC3 documentation website available as
15
14
  a tool\n"
@@ -62,6 +61,8 @@ files:
62
61
  - tools/staticdocs/assets/images/command_history-ecc9b618661ad0aefa0700047a8ab3b094372f2aa427e9fcd270dcd352a30408.png
63
62
  - tools/staticdocs/assets/images/command_sender-83cf2e2343133c2883c405abd0b322f6d3d4a095c6ee800158a04c8eefe474ed.png
64
63
  - tools/staticdocs/assets/images/connecting-0f804651a891ef6112a51ba8b2e4d8dcb46e3462dcbc94e7b3c75bff20fc04e7.png
64
+ - tools/staticdocs/assets/images/cosmos-containers-7ecd745840fcff307f0fec01ac4d88a8fa76d531abeae407fee0e508f50a487c.png
65
+ - tools/staticdocs/assets/images/cosmos-images-8e15c197653ac3a1f39e8c5eaa56155f364e67d87d66647cff1355b960093af1.png
65
66
  - tools/staticdocs/assets/images/create_activity1-c05ffc03af2df852aeb3ad246f53f259af504e0e6c64cdac21f9126947c49f95.png
66
67
  - tools/staticdocs/assets/images/create_activity2-58c7da6f79dd510701148c0c54fae02c830b9ca4af662a7b132987ed3410a8f7.png
67
68
  - tools/staticdocs/assets/images/create_metadata1-a331ba8f0bd19bf5f8d7f2e083c3c7164e9b7b9936f5a7f83c4141c62a6c46f6.png
@@ -109,7 +110,7 @@ files:
109
110
  - tools/staticdocs/assets/images/height-67268e562da2f9b2d0b9adc38d8fb2ba629504b09d798d8c26be9cfbfdad672a.png
110
111
  - tools/staticdocs/assets/images/history-04aebef1a0fdaaacc5042e5b835f850b48ea04f4fe50271d9bb57803b442d6cd.png
111
112
  - tools/staticdocs/assets/images/horizontal-11de51b6fc8baf057ca4f38a7f54a5302b58f30099331c22a074f012e53497aa.png
112
- - tools/staticdocs/assets/images/horizontalbox-ddf82f64de700286a742a71e0c1adebbc7e9822a0dff41139f41bc476e4fc4ce.png
113
+ - tools/staticdocs/assets/images/horizontalbox-085c91cebe26fdd5f85b467556607dd4631da5bccabd84fb164d1f46e45e60c9.png
113
114
  - tools/staticdocs/assets/images/horizontalline-0805762eadcc125ed6584a29a60e7cf8e2d76d13c6243e18eecbaba7a3803128.png
114
115
  - tools/staticdocs/assets/images/iframe-30d5a4104336b84d18ba538d668978a7986679431a7fe1fd0e3179fea08c074f.png
115
116
  - tools/staticdocs/assets/images/ignored-0917bd9f41f4e93704daa45cc0a7b70809bdbba03615d6de254336141b598992.png
@@ -210,7 +211,7 @@ files:
210
211
  - tools/staticdocs/assets/images/valuelimitscolumn-aecfce9016c27e500eb506675bd372f77df1d671fd8fb0f30debe18c5cfee46c.png
211
212
  - tools/staticdocs/assets/images/valuerangebar-3a860f1fb4af1beeeb846c389c60f08eb633cc15cbb6f1c09509b5f5c0116d56.png
212
213
  - tools/staticdocs/assets/images/vertical-d4ea61f78a2cfc2cacc725f0a5dea194ab75278f0cb676e4a749f55d58a632f3.png
213
- - tools/staticdocs/assets/images/verticalbox-28fdba6f2c051a499b7f08a1be97edf0297ac9a9ce0dba44f02a7fe1c2616d91.png
214
+ - tools/staticdocs/assets/images/verticalbox-75738427d398302986b52afb373acef11abf3a24f60d20b8cca442688054b22b.png
214
215
  - tools/staticdocs/assets/images/view_menu-a02cfbd5e6fafa5d3b4f1ae76bfbd63f49388939b4732bf91709f48e44498d19.png
215
216
  - tools/staticdocs/assets/images/width-1a69354459761ea23e4824436ef364124236f9bb96d46a28c97d8ff20d07ab81.png
216
217
  - tools/staticdocs/assets/js/019369f3.43fd7635.js
@@ -222,16 +223,16 @@ files:
222
223
  - tools/staticdocs/assets/js/103cc3be.e7943c80.js
223
224
  - tools/staticdocs/assets/js/13196248.ea83002e.js
224
225
  - tools/staticdocs/assets/js/13c1b4e4.eb5250f4.js
225
- - tools/staticdocs/assets/js/1e02e6a3.f477eca7.js
226
+ - tools/staticdocs/assets/js/1e02e6a3.12bdc98d.js
226
227
  - tools/staticdocs/assets/js/2047b354.d91f6c3e.js
227
228
  - tools/staticdocs/assets/js/22b3ac48.0df9587b.js
228
229
  - tools/staticdocs/assets/js/26b8abb2.7f8d4cb0.js
229
- - tools/staticdocs/assets/js/2bb7bf90.4051cf46.js
230
- - tools/staticdocs/assets/js/31436304.a6b2eb4a.js
230
+ - tools/staticdocs/assets/js/2bb7bf90.1772f030.js
231
+ - tools/staticdocs/assets/js/35398c5c.fcf47881.js
231
232
  - tools/staticdocs/assets/js/3969.afdd070b.js
232
233
  - tools/staticdocs/assets/js/3dd7ef3b.c3455b97.js
233
234
  - tools/staticdocs/assets/js/40365d27.5ed2e9b5.js
234
- - tools/staticdocs/assets/js/411898ad.f7fc4d80.js
235
+ - tools/staticdocs/assets/js/411898ad.f7b3ff17.js
235
236
  - tools/staticdocs/assets/js/42170351.fbc05869.js
236
237
  - tools/staticdocs/assets/js/43652efd.60fa883f.js
237
238
  - tools/staticdocs/assets/js/5205.c6f31e57.js
@@ -239,64 +240,66 @@ files:
239
240
  - tools/staticdocs/assets/js/53ca7c5b.fe331a71.js
240
241
  - tools/staticdocs/assets/js/54d0d530.ef91ba12.js
241
242
  - tools/staticdocs/assets/js/5761.e7fabbc9.js
242
- - tools/staticdocs/assets/js/5b233ba7.2ea0179c.js
243
- - tools/staticdocs/assets/js/5bc719f6.b84c55e3.js
244
- - tools/staticdocs/assets/js/5c6ce5ec.67d1d92e.js
243
+ - tools/staticdocs/assets/js/5b233ba7.9d6ba314.js
244
+ - tools/staticdocs/assets/js/5bc719f6.6d27292c.js
245
+ - tools/staticdocs/assets/js/5c6ce5ec.652b922b.js
245
246
  - tools/staticdocs/assets/js/5e3ed378.8b51f7c0.js
246
247
  - tools/staticdocs/assets/js/5fe211ef.63b46202.js
247
248
  - tools/staticdocs/assets/js/62df909c.dd5f3a0c.js
248
249
  - tools/staticdocs/assets/js/630e5448.699a9dec.js
249
250
  - tools/staticdocs/assets/js/651.a043d7b1.js
250
- - tools/staticdocs/assets/js/6831b732.0a867cbc.js
251
- - tools/staticdocs/assets/js/696b4199.2a7ff897.js
252
- - tools/staticdocs/assets/js/6b210247.ef28d4e5.js
251
+ - tools/staticdocs/assets/js/6831b732.1318b398.js
252
+ - tools/staticdocs/assets/js/696b4199.1e950fcb.js
253
+ - tools/staticdocs/assets/js/6b210247.6a77064a.js
253
254
  - tools/staticdocs/assets/js/6b65133b.0376a397.js
254
- - tools/staticdocs/assets/js/6f92e431.d2ce2753.js
255
+ - tools/staticdocs/assets/js/6f92e431.6439052e.js
255
256
  - tools/staticdocs/assets/js/72c6d8a8.b6fcfc30.js
256
257
  - tools/staticdocs/assets/js/75897369.522ccdd7.js
257
- - tools/staticdocs/assets/js/75e64983.81988bef.js
258
- - tools/staticdocs/assets/js/7f5b2696.72e3b019.js
258
+ - tools/staticdocs/assets/js/75e64983.324643a8.js
259
+ - tools/staticdocs/assets/js/7f5b2696.a3dc640e.js
259
260
  - tools/staticdocs/assets/js/80c97f38.607160d3.js
260
- - tools/staticdocs/assets/js/867640d5.2c0fa6d9.js
261
- - tools/staticdocs/assets/js/89e76475.a76d0072.js
261
+ - tools/staticdocs/assets/js/867640d5.27d9d599.js
262
+ - tools/staticdocs/assets/js/89e76475.e1b0dbdb.js
262
263
  - tools/staticdocs/assets/js/8f7843ee.abe30983.js
263
264
  - tools/staticdocs/assets/js/9357.9a7e89b5.js
264
- - tools/staticdocs/assets/js/9424f0b3.96e6dac4.js
265
- - tools/staticdocs/assets/js/97535711.78660098.js
266
- - tools/staticdocs/assets/js/99581c43.5e55992d.js
267
- - tools/staticdocs/assets/js/9d6e81d0.44e2d544.js
265
+ - tools/staticdocs/assets/js/9424f0b3.3683501c.js
266
+ - tools/staticdocs/assets/js/964eb012.0e04c58d.js
267
+ - tools/staticdocs/assets/js/97535711.e595488c.js
268
+ - tools/staticdocs/assets/js/99581c43.841b4a2e.js
269
+ - tools/staticdocs/assets/js/9d6e81d0.36405219.js
268
270
  - tools/staticdocs/assets/js/9fb6059a.821f7504.js
269
- - tools/staticdocs/assets/js/a677c089.18f98b70.js
270
- - tools/staticdocs/assets/js/a9987364.81e9c91d.js
271
- - tools/staticdocs/assets/js/aa6b6c1b.08f58887.js
271
+ - tools/staticdocs/assets/js/a677c089.cfa50691.js
272
+ - tools/staticdocs/assets/js/a9987364.b418f772.js
273
+ - tools/staticdocs/assets/js/a9b2dc27.805dc1ba.js
274
+ - tools/staticdocs/assets/js/aa6b6c1b.ef9b0f38.js
275
+ - tools/staticdocs/assets/js/b062d239.57d6e194.js
272
276
  - tools/staticdocs/assets/js/b4596165.c648533a.js
273
- - tools/staticdocs/assets/js/b6d70f94.7813125e.js
277
+ - tools/staticdocs/assets/js/b6d70f94.a9228642.js
274
278
  - tools/staticdocs/assets/js/b9f60ba6.4c0bb1dd.js
275
279
  - tools/staticdocs/assets/js/bd0034eb.8ad39448.js
276
- - tools/staticdocs/assets/js/c24eae19.aaae7796.js
280
+ - tools/staticdocs/assets/js/c24eae19.0575c394.js
277
281
  - tools/staticdocs/assets/js/c2598f55.812cdcd1.js
278
282
  - tools/staticdocs/assets/js/c5388ca4.32f8f561.js
279
283
  - tools/staticdocs/assets/js/cb8c3f08.07d1c9e9.js
280
284
  - tools/staticdocs/assets/js/cd879be4.59af1749.js
281
- - tools/staticdocs/assets/js/ce89ef36.1d76e86a.js
282
- - tools/staticdocs/assets/js/d1b923aa.a73e7e79.js
285
+ - tools/staticdocs/assets/js/ce89ef36.6b89b0fe.js
286
+ - tools/staticdocs/assets/js/d1b923aa.da892cde.js
283
287
  - tools/staticdocs/assets/js/d1bfc316.a58b9bbd.js
284
288
  - tools/staticdocs/assets/js/d24bf9b6.9fef8263.js
285
289
  - tools/staticdocs/assets/js/d57a4b5d.c74b62b1.js
286
290
  - tools/staticdocs/assets/js/d5d77c37.e812e6e7.js
287
- - tools/staticdocs/assets/js/d66bf9c0.842d2efa.js
288
- - tools/staticdocs/assets/js/d8ca4191.f5da7c6d.js
289
- - tools/staticdocs/assets/js/d9b92eba.34e63ba6.js
290
- - tools/staticdocs/assets/js/db8fa1d0.94b76b52.js
291
+ - tools/staticdocs/assets/js/d66bf9c0.80a50660.js
292
+ - tools/staticdocs/assets/js/d8ca4191.8df86c99.js
293
+ - tools/staticdocs/assets/js/d9b92eba.5db8667e.js
294
+ - tools/staticdocs/assets/js/db8fa1d0.f1eed806.js
291
295
  - tools/staticdocs/assets/js/dbe31111.75e9fc53.js
292
296
  - tools/staticdocs/assets/js/dc5f7beb.9e4e6681.js
293
297
  - tools/staticdocs/assets/js/dfbae5fd.3959d626.js
294
298
  - tools/staticdocs/assets/js/e501b0d1.d3a1e4bc.js
295
- - tools/staticdocs/assets/js/ebec1ccb.f938ebaa.js
296
299
  - tools/staticdocs/assets/js/f15615f1.49804e96.js
297
300
  - tools/staticdocs/assets/js/fd886806.124ffe26.js
298
- - tools/staticdocs/assets/js/main.485b7747.js
299
- - tools/staticdocs/assets/js/runtime~main.61a578da.js
301
+ - tools/staticdocs/assets/js/main.a8e2c06c.js
302
+ - tools/staticdocs/assets/js/runtime~main.7102cb65.js
300
303
  - tools/staticdocs/docs.html
301
304
  - tools/staticdocs/docs/configuration.html
302
305
  - tools/staticdocs/docs/configuration/accessors.html
@@ -319,10 +322,11 @@ files:
319
322
  - tools/staticdocs/docs/development/streaming-api.html
320
323
  - tools/staticdocs/docs/development/testing.html
321
324
  - tools/staticdocs/docs/getting-started.html
325
+ - tools/staticdocs/docs/getting-started/cli.html
322
326
  - tools/staticdocs/docs/getting-started/generators.html
323
327
  - tools/staticdocs/docs/getting-started/gettingstarted.html
324
328
  - tools/staticdocs/docs/getting-started/installation.html
325
- - tools/staticdocs/docs/getting-started/key_concepts.html
329
+ - tools/staticdocs/docs/getting-started/key-concepts.html
326
330
  - tools/staticdocs/docs/getting-started/podman.html
327
331
  - tools/staticdocs/docs/getting-started/requirements.html
328
332
  - tools/staticdocs/docs/getting-started/upgrading.html
@@ -330,7 +334,8 @@ files:
330
334
  - tools/staticdocs/docs/guides/bridges.html
331
335
  - tools/staticdocs/docs/guides/cfs.html
332
336
  - tools/staticdocs/docs/guides/custom-widgets.html
333
- - tools/staticdocs/docs/guides/exposing_microservices.html
337
+ - tools/staticdocs/docs/guides/dynamic-packets.html
338
+ - tools/staticdocs/docs/guides/exposing-microservices.html
334
339
  - tools/staticdocs/docs/guides/little-endian-bitfields.html
335
340
  - tools/staticdocs/docs/guides/local-mode.html
336
341
  - tools/staticdocs/docs/guides/logging.html
@@ -478,6 +483,8 @@ files:
478
483
  - tools/staticdocs/img/command_sender/mode_menu.png
479
484
  - tools/staticdocs/img/contact/jason.png
480
485
  - tools/staticdocs/img/contact/ryan.jpeg
486
+ - tools/staticdocs/img/cosmos-containers.png
487
+ - tools/staticdocs/img/cosmos-images.png
481
488
  - tools/staticdocs/img/data_extractor/add_item.png
482
489
  - tools/staticdocs/img/data_extractor/add_packet.png
483
490
  - tools/staticdocs/img/data_extractor/add_target.png
@@ -627,10 +634,10 @@ files:
627
634
  - tools/staticdocs/img/telemetry_viewer/widgets/verticalbox.png
628
635
  - tools/staticdocs/img/telemetry_viewer/widgets/width.png
629
636
  - tools/staticdocs/index.html
630
- - tools/staticdocs/lunr-index-1741317069195.json
637
+ - tools/staticdocs/lunr-index-1746647301890.json
631
638
  - tools/staticdocs/lunr-index.json
632
639
  - tools/staticdocs/markdown-page.html
633
- - tools/staticdocs/search-doc-1741317069195.json
640
+ - tools/staticdocs/search-doc-1746647301890.json
634
641
  - tools/staticdocs/search-doc.json
635
642
  - tools/staticdocs/sitemap.xml
636
643
  homepage: https://github.com/OpenC3/cosmos
@@ -638,7 +645,6 @@ licenses:
638
645
  - AGPL-3.0-only
639
646
  - Nonstandard
640
647
  metadata: {}
641
- post_install_message:
642
648
  rdoc_options: []
643
649
  require_paths:
644
650
  - lib
@@ -653,8 +659,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
653
659
  - !ruby/object:Gem::Version
654
660
  version: '0'
655
661
  requirements: []
656
- rubygems_version: 3.3.14
657
- signing_key:
662
+ rubygems_version: 3.6.8
658
663
  specification_version: 4
659
664
  summary: OpenC3 COSMOS Documentation
660
665
  test_files: []
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["5996"],{7015:function(e){e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Introduction","href":"/tools/staticdocs/docs/","docId":"introduction","unlisted":false},{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Installation","href":"/tools/staticdocs/docs/getting-started/installation","customProps":{"myEmoji":"\uD83D\uDCBE"},"docId":"getting-started/installation","unlisted":false},{"type":"link","label":"Getting Started","href":"/tools/staticdocs/docs/getting-started/gettingstarted","customProps":{"myEmoji":"\uD83E\uDDD1\u200D\uD83D\uDCBB"},"docId":"getting-started/gettingstarted","unlisted":false},{"type":"link","label":"Code Generators","href":"/tools/staticdocs/docs/getting-started/generators","customProps":{"myEmoji":"\uD83C\uDFED"},"docId":"getting-started/generators","unlisted":false},{"type":"link","label":"Upgrading","href":"/tools/staticdocs/docs/getting-started/upgrading","customProps":{"myEmoji":"\u2B06\uFE0F"},"docId":"getting-started/upgrading","unlisted":false},{"type":"link","label":"Key Concepts","href":"/tools/staticdocs/docs/getting-started/key_concepts","customProps":{"myEmoji":"\uD83D\uDCA1"},"docId":"getting-started/key_concepts","unlisted":false},{"type":"link","label":"Requirements and Design","href":"/tools/staticdocs/docs/getting-started/requirements","customProps":{"myEmoji":"\uD83D\uDCD1"},"docId":"getting-started/requirements","unlisted":false},{"type":"link","label":"Podman","href":"/tools/staticdocs/docs/getting-started/podman","customProps":{"myEmoji":"\uD83E\uDEDB"},"docId":"getting-started/podman","unlisted":false}],"href":"/tools/staticdocs/docs/getting-started"},{"type":"category","label":"Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"File Format","href":"/tools/staticdocs/docs/configuration/format","docId":"configuration/format","unlisted":false},{"type":"link","label":"Plugins","href":"/tools/staticdocs/docs/configuration/plugins","customProps":{"myEmoji":"\uD83D\uDD0C"},"docId":"configuration/plugins","unlisted":false},{"type":"link","label":"Targets","href":"/tools/staticdocs/docs/configuration/target","customProps":{"myEmoji":"\uD83D\uDEF0\uFE0F"},"docId":"configuration/target","unlisted":false},{"type":"link","label":"Commands","href":"/tools/staticdocs/docs/configuration/command","customProps":{"myEmoji":"\uD83D\uDCE1"},"docId":"configuration/command","unlisted":false},{"type":"link","label":"Telemetry","href":"/tools/staticdocs/docs/configuration/telemetry","customProps":{"myEmoji":"\uD83D\uDCE1"},"docId":"configuration/telemetry","unlisted":false},{"type":"link","label":"Interfaces","href":"/tools/staticdocs/docs/configuration/interfaces","customProps":{"myEmoji":"\uD83D\uDCA1"},"docId":"configuration/interfaces","unlisted":false},{"type":"link","label":"Protocols","href":"/tools/staticdocs/docs/configuration/protocols","customProps":{"myEmoji":"\uD83D\uDCA1"},"docId":"configuration/protocols","unlisted":false},{"type":"link","label":"Accessors","href":"/tools/staticdocs/docs/configuration/accessors","customProps":{"myEmoji":"\u270F\uFE0F"},"docId":"configuration/accessors","unlisted":false},{"type":"link","label":"Tables","href":"/tools/staticdocs/docs/configuration/table","docId":"configuration/table","unlisted":false},{"type":"link","label":"Screens","href":"/tools/staticdocs/docs/configuration/telemetry-screens","customProps":{"myEmoji":"\uD83D\uDDA5\uFE0F"},"docId":"configuration/telemetry-screens","unlisted":false},{"type":"link","label":"SSL-TLS","href":"/tools/staticdocs/docs/configuration/ssl-tls","customProps":{"myEmoji":"\uD83D\uDD10"},"docId":"configuration/ssl-tls","unlisted":false}],"href":"/tools/staticdocs/docs/configuration"},{"type":"category","label":"Tools","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Admin","href":"/tools/staticdocs/docs/tools/admin","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/admin","unlisted":false},{"type":"link","label":"Autonomic (Enterprise)","href":"/tools/staticdocs/docs/tools/autonomic","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/autonomic","unlisted":false},{"type":"link","label":"Bucket Explorer","href":"/tools/staticdocs/docs/tools/bucket-explorer","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/bucket-explorer","unlisted":false},{"type":"link","label":"Calendar (Enterprise)","href":"/tools/staticdocs/docs/tools/calendar","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/calendar","unlisted":false},{"type":"link","label":"Command Sender","href":"/tools/staticdocs/docs/tools/cmd-sender","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/cmd-sender","unlisted":false},{"type":"link","label":"Command and Telemetry Server","href":"/tools/staticdocs/docs/tools/cmd-tlm-server","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/cmd-tlm-server","unlisted":false},{"type":"link","label":"Command History (Enterprise)","href":"/tools/staticdocs/docs/tools/command_history","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/command_history","unlisted":false},{"type":"link","label":"Data Extractor","href":"/tools/staticdocs/docs/tools/data-extractor","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/data-extractor","unlisted":false},{"type":"link","label":"Data Viewer","href":"/tools/staticdocs/docs/tools/data-viewer","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/data-viewer","unlisted":false},{"type":"link","label":"Handbooks","href":"/tools/staticdocs/docs/tools/handbooks","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/handbooks","unlisted":false},{"type":"link","label":"Limits Monitor","href":"/tools/staticdocs/docs/tools/limits-monitor","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/limits-monitor","unlisted":false},{"type":"link","label":"Packet Viewer","href":"/tools/staticdocs/docs/tools/packet-viewer","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/packet-viewer","unlisted":false},{"type":"link","label":"Script Runner","href":"/tools/staticdocs/docs/tools/script-runner","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/script-runner","unlisted":false},{"type":"link","label":"Table Manager","href":"/tools/staticdocs/docs/tools/table-manager","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/table-manager","unlisted":false},{"type":"link","label":"Telemetry Grapher","href":"/tools/staticdocs/docs/tools/tlm-grapher","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/tlm-grapher","unlisted":false},{"type":"link","label":"Telemetry Viewer","href":"/tools/staticdocs/docs/tools/tlm-viewer","customProps":{"myEmoji":"\uD83D\uDEE0\uFE0F"},"docId":"tools/tlm-viewer","unlisted":false}],"href":"/tools/staticdocs/docs/tools"},{"type":"category","label":"Guides","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Bridges","href":"/tools/staticdocs/docs/guides/bridges","customProps":{"myEmoji":"\uD83C\uDF09"},"docId":"guides/bridges","unlisted":false},{"type":"link","label":"COSMOS and NASA cFS","href":"/tools/staticdocs/docs/guides/cfs","customProps":{"myEmoji":"\uD83D\uDE80"},"docId":"guides/cfs","unlisted":false},{"type":"link","label":"Custom Widgets","href":"/tools/staticdocs/docs/guides/custom-widgets","customProps":{"myEmoji":"\uD83D\uDD28"},"docId":"guides/custom-widgets","unlisted":false},{"type":"link","label":"Exposing Microservices","href":"/tools/staticdocs/docs/guides/exposing_microservices","customProps":{"myEmoji":"\uD83D\uDEAA"},"docId":"guides/exposing_microservices","unlisted":false},{"type":"link","label":"Little Endian Bitfields","href":"/tools/staticdocs/docs/guides/little-endian-bitfields","customProps":{"myEmoji":"\uD83D\uDCBB"},"docId":"guides/little-endian-bitfields","unlisted":false},{"type":"link","label":"Local Mode","href":"/tools/staticdocs/docs/guides/local-mode","customProps":{"myEmoji":"\uD83E\uDDED"},"docId":"guides/local-mode","unlisted":false},{"type":"link","label":"Logging","href":"/tools/staticdocs/docs/guides/logging","customProps":{"myEmoji":"\uD83E\uDEB5"},"docId":"guides/logging","unlisted":false},{"type":"link","label":"Monitoring","href":"/tools/staticdocs/docs/guides/monitoring","customProps":{"myEmoji":"\uD83D\uDDA5\uFE0F"},"docId":"guides/monitoring","unlisted":false},{"type":"link","label":"Performance","href":"/tools/staticdocs/docs/guides/performance","customProps":{"myEmoji":"\uD83D\uDCCA"},"docId":"guides/performance","unlisted":false},{"type":"link","label":"Raspberry Pi","href":"/tools/staticdocs/docs/guides/raspberrypi","customProps":{"myEmoji":"\uD83C\uDF53"},"docId":"guides/raspberrypi","unlisted":false},{"type":"link","label":"Script Writing Guide","href":"/tools/staticdocs/docs/guides/script-writing","customProps":{"myEmoji":"\uD83C\uDFC3\u200D\u27A1\uFE0F"},"docId":"guides/script-writing","unlisted":false},{"type":"link","label":"Scripting API Guide","href":"/tools/staticdocs/docs/guides/scripting-api","customProps":{"myEmoji":"\uD83D\uDCDD"},"docId":"guides/scripting-api","unlisted":false}],"href":"/tools/staticdocs/docs/guides"},{"type":"category","label":"Development","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Testing with Curl","href":"/tools/staticdocs/docs/development/curl","customProps":{"myEmoji":"\uD83C\uDF0A"},"docId":"development/curl","unlisted":false},{"type":"link","label":"Developing COSMOS","href":"/tools/staticdocs/docs/development/developing","customProps":{"myEmoji":"\uD83D\uDCBB"},"docId":"development/developing","unlisted":false},{"type":"link","label":"JSON API","href":"/tools/staticdocs/docs/development/json-api","customProps":{"myEmoji":"\uD83D\uDDA5\uFE0F"},"docId":"development/json-api","unlisted":false},{"type":"link","label":"Log Structure","href":"/tools/staticdocs/docs/development/log-structure","customProps":{"myEmoji":"\uD83E\uDEB5"},"docId":"development/log-structure","unlisted":false},{"type":"link","label":"Roadmap","href":"/tools/staticdocs/docs/development/roadmap","customProps":{"myEmoji":"\uD83D\uDDFA\uFE0F"},"docId":"development/roadmap","unlisted":false},{"type":"link","label":"Streaming API","href":"/tools/staticdocs/docs/development/streaming-api","customProps":{"myEmoji":"\uD83D\uDCDD"},"docId":"development/streaming-api","unlisted":false},{"type":"link","label":"Testing COSMOS","href":"/tools/staticdocs/docs/development/testing","customProps":{"myEmoji":"\uD83D\uDCCB"},"docId":"development/testing","unlisted":false}],"href":"/tools/staticdocs/docs/development"},{"type":"category","label":"Meta","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Contributing","href":"/tools/staticdocs/docs/meta/contributing","customProps":{"myEmoji":"\uD83D\uDE42"},"docId":"meta/contributing","unlisted":false},{"type":"link","label":"Licenses","href":"/tools/staticdocs/docs/meta/licenses","customProps":{"myEmoji":"\uD83D\uDD75\uFE0F"},"docId":"meta/licenses","unlisted":false},{"type":"link","label":"Philosophy","href":"/tools/staticdocs/docs/meta/philosophy","customProps":{"myEmoji":"\uD83E\uDD14"},"docId":"meta/philosophy","unlisted":false},{"type":"link","label":"XTCE Support","href":"/tools/staticdocs/docs/meta/xtce","customProps":{"myEmoji":"\uD83D\uDE35"},"docId":"meta/xtce","unlisted":false}],"href":"/tools/staticdocs/docs/meta"},{"type":"link","label":"OpenC3, Inc. Privacy Policy","href":"/tools/staticdocs/docs/privacy","docId":"privacy","unlisted":false}]},"docs":{"configuration/accessors":{"id":"configuration/accessors","title":"Accessors","description":"Responsible for reading and writing data to a buffer","sidebar":"defaultSidebar"},"configuration/command":{"id":"configuration/command","title":"Commands","description":"Command definition file format and keywords","sidebar":"defaultSidebar"},"configuration/format":{"id":"configuration/format","title":"File Format","description":"Structure of a COSMOS file, including using ERB","sidebar":"defaultSidebar"},"configuration/interfaces":{"id":"configuration/interfaces","title":"Interfaces","description":"Built-in COSMOS interfaces including how to create one","sidebar":"defaultSidebar"},"configuration/plugins":{"id":"configuration/plugins","title":"Plugins","description":"Plugin definition file format and keywords","sidebar":"defaultSidebar"},"configuration/protocols":{"id":"configuration/protocols","title":"Protocols","description":"Built-in COSMOS protocols including how to create one","sidebar":"defaultSidebar"},"configuration/ssl-tls":{"id":"configuration/ssl-tls","title":"SSL-TLS","description":"How to configure SSL and TLS","sidebar":"defaultSidebar"},"configuration/table":{"id":"configuration/table","title":"Tables","description":"Table definition file format and keywords","sidebar":"defaultSidebar"},"configuration/target":{"id":"configuration/target","title":"Targets","description":"Target definition file format and keywords","sidebar":"defaultSidebar"},"configuration/telemetry":{"id":"configuration/telemetry","title":"Telemetry","description":"Telemetry definition file format and keywords","sidebar":"defaultSidebar"},"configuration/telemetry-screens":{"id":"configuration/telemetry-screens","title":"Screens","description":"Telemetry Viewer screen definition and widget documentation","sidebar":"defaultSidebar"},"development/curl":{"id":"development/curl","title":"Testing with Curl","description":"How to use Curl to hit the COSMOS APIs","sidebar":"defaultSidebar"},"development/developing":{"id":"development/developing","title":"Developing COSMOS","description":"Building COSMOS and developing the frontend and backend","sidebar":"defaultSidebar"},"development/json-api":{"id":"development/json-api","title":"JSON API","description":"Interfacing to the COSMOS APIs using JSON-RPC","sidebar":"defaultSidebar"},"development/log-structure":{"id":"development/log-structure","title":"Log Structure","description":"Structure of the COSMOS log file","sidebar":"defaultSidebar"},"development/roadmap":{"id":"development/roadmap","title":"Roadmap","description":"COSMOS roadmap now and into the future","sidebar":"defaultSidebar"},"development/streaming-api":{"id":"development/streaming-api","title":"Streaming API","description":"Using the websocket streaming API to retrieve data","sidebar":"defaultSidebar"},"development/testing":{"id":"development/testing","title":"Testing COSMOS","description":"Running the Playwright integration tests and unit tests","sidebar":"defaultSidebar"},"getting-started/generators":{"id":"getting-started/generators","title":"Code Generators","description":"Using openc3.sh to generate code","sidebar":"defaultSidebar"},"getting-started/gettingstarted":{"id":"getting-started/gettingstarted","title":"Getting Started","description":"Getting starting with COSMOS","sidebar":"defaultSidebar"},"getting-started/installation":{"id":"getting-started/installation","title":"Installation","description":"Installing OpenC3 COSMOS","sidebar":"defaultSidebar"},"getting-started/key_concepts":{"id":"getting-started/key_concepts","title":"Key Concepts","description":"Projects, Containerization, Frontend, Backend","sidebar":"defaultSidebar"},"getting-started/podman":{"id":"getting-started/podman","title":"Podman","description":"Installing and running COSMOS with Podman","sidebar":"defaultSidebar"},"getting-started/requirements":{"id":"getting-started/requirements","title":"Requirements and Design","description":"COSMOS Requirements and Design","sidebar":"defaultSidebar"},"getting-started/upgrading":{"id":"getting-started/upgrading","title":"Upgrading","description":"How to upgrade and migrate COSMOS","sidebar":"defaultSidebar"},"guides/bridges":{"id":"guides/bridges","title":"Bridges","description":"Bridge data into COSMOS from serial ports, PCI, etc","sidebar":"defaultSidebar"},"guides/cfs":{"id":"guides/cfs","title":"COSMOS and NASA cFS","description":"Tutorial for integrating with NASA cFS","sidebar":"defaultSidebar"},"guides/custom-widgets":{"id":"guides/custom-widgets","title":"Custom Widgets","description":"How to build custom widgets for use in Telemetry Viewer","sidebar":"defaultSidebar"},"guides/exposing_microservices":{"id":"guides/exposing_microservices","title":"Exposing Microservices","description":"Provide external accessibility to microservices","sidebar":"defaultSidebar"},"guides/little-endian-bitfields":{"id":"guides/little-endian-bitfields","title":"Little Endian Bitfields","description":"Defining little endian bitfields","sidebar":"defaultSidebar"},"guides/local-mode":{"id":"guides/local-mode","title":"Local Mode","description":"Edit scripts and screens directly on the host file system","sidebar":"defaultSidebar"},"guides/logging":{"id":"guides/logging","title":"Logging","description":"The log files in COSMOS","sidebar":"defaultSidebar"},"guides/monitoring":{"id":"guides/monitoring","title":"Monitoring","description":"Various ways to monitor COSMOS internals","sidebar":"defaultSidebar"},"guides/performance":{"id":"guides/performance","title":"Performance","description":"Hardware requirements like memory and CPU","sidebar":"defaultSidebar"},"guides/raspberrypi":{"id":"guides/raspberrypi","title":"Raspberry Pi","description":"Running COSMOS on a Raspberry Pi","sidebar":"defaultSidebar"},"guides/script-writing":{"id":"guides/script-writing","title":"Script Writing Guide","description":"Key concepts and best practices for script writing","sidebar":"defaultSidebar"},"guides/scripting-api":{"id":"guides/scripting-api","title":"Scripting API Guide","description":"Scripting API methods, deprecations and migrations","sidebar":"defaultSidebar"},"introduction":{"id":"introduction","title":"Introduction","description":"This site aims to be a comprehensive guide to OpenC3 COSMOS. We\'ll cover topics such","sidebar":"defaultSidebar"},"meta/contributing":{"id":"meta/contributing","title":"Contributing","description":"Contributing to COSMOS using the github workflow","sidebar":"defaultSidebar"},"meta/licenses":{"id":"meta/licenses","title":"Licenses","description":"COSMOS licenses including the AGPLv3 vs Commercial","sidebar":"defaultSidebar"},"meta/philosophy":{"id":"meta/philosophy","title":"Philosophy","description":"COSMOS goals and philosophy","sidebar":"defaultSidebar"},"meta/xtce":{"id":"meta/xtce","title":"XTCE Support","description":"XTCE Command and Telemetry Definition Standard","sidebar":"defaultSidebar"},"privacy":{"id":"privacy","title":"OpenC3, Inc. Privacy Policy","description":"OpenC3 Inc. is strongly committed to protecting your privacy and complying with your choices. Both personal and non-personal information collected is safeguarded according to the highest privacy and data protection standards adopted worldwide. We have always had a robust and effective data protection program in place which complies with existing law and abides by the data protection principles. However, we recognise our obligations in updating and expanding this program to meet the demands of the GDPR.","sidebar":"defaultSidebar"},"tools/admin":{"id":"tools/admin","title":"Admin","description":"Administer COSMOS, install plugins, change settings","sidebar":"defaultSidebar"},"tools/autonomic":{"id":"tools/autonomic","title":"Autonomic (Enterprise)","description":"Automated execution of commands and scripts","sidebar":"defaultSidebar"},"tools/bucket-explorer":{"id":"tools/bucket-explorer","title":"Bucket Explorer","description":"File browser to the COSMOS backend bucket storage system","sidebar":"defaultSidebar"},"tools/calendar":{"id":"tools/calendar","title":"Calendar (Enterprise)","description":"Calendar visualization of metadata, notes, and timelines","sidebar":"defaultSidebar"},"tools/cmd-sender":{"id":"tools/cmd-sender","title":"Command Sender","description":"Send individual commands","sidebar":"defaultSidebar"},"tools/cmd-tlm-server":{"id":"tools/cmd-tlm-server","title":"Command and Telemetry Server","description":"Status about interfaces, targets and log messages","sidebar":"defaultSidebar"},"tools/command_history":{"id":"tools/command_history","title":"Command History (Enterprise)","description":"See all the commands sent, by whom, and if successful","sidebar":"defaultSidebar"},"tools/data-extractor":{"id":"tools/data-extractor","title":"Data Extractor","description":"Extract command or telemetry data into files","sidebar":"defaultSidebar"},"tools/data-viewer":{"id":"tools/data-viewer","title":"Data Viewer","description":"View packet or item data","sidebar":"defaultSidebar"},"tools/handbooks":{"id":"tools/handbooks","title":"Handbooks","description":"Format the command and telemetry definition into a webpage","sidebar":"defaultSidebar"},"tools/limits-monitor":{"id":"tools/limits-monitor","title":"Limits Monitor","description":"View out of limit items and log messages","sidebar":"defaultSidebar"},"tools/packet-viewer":{"id":"tools/packet-viewer","title":"Packet Viewer","description":"Displays all packets with their items","sidebar":"defaultSidebar"},"tools/script-runner":{"id":"tools/script-runner","title":"Script Runner","description":"Run Python or Ruby scripts to send commands and check telemetry","sidebar":"defaultSidebar"},"tools/table-manager":{"id":"tools/table-manager","title":"Table Manager","description":"Binary file editor with upload / download","sidebar":"defaultSidebar"},"tools/tlm-grapher":{"id":"tools/tlm-grapher","title":"Telemetry Grapher","description":"Graph real time or historical data","sidebar":"defaultSidebar"},"tools/tlm-viewer":{"id":"tools/tlm-viewer","title":"Telemetry Viewer","description":"Build custom screens using built-in widgets","sidebar":"defaultSidebar"}}}}')}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["7637"],{2695:function(e,t,n){n.r(t),n.d(t,{default:()=>h,frontMatter:()=>o,metadata:()=>s,assets:()=>l,toc:()=>c,contentTitle:()=>a});var s=JSON.parse('{"id":"getting-started/generators","title":"Code Generators","description":"Using openc3.sh to generate code","source":"@site/docs/getting-started/generators.md","sourceDirName":"getting-started","slug":"/getting-started/generators","permalink":"/tools/staticdocs/docs/getting-started/generators","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/getting-started/generators.md","tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"sidebar_position":3,"title":"Code Generators","description":"Using openc3.sh to generate code","sidebar_custom_props":{"myEmoji":"\uD83C\uDFED"}},"sidebar":"defaultSidebar","previous":{"title":"Getting Started","permalink":"/tools/staticdocs/docs/getting-started/gettingstarted"},"next":{"title":"Upgrading","permalink":"/tools/staticdocs/docs/getting-started/upgrading"}}'),i=n("2322"),r=n("2840");let o={sidebar_position:3,title:"Code Generators",description:"Using openc3.sh to generate code",sidebar_custom_props:{myEmoji:"\uD83C\uDFED"}},a=void 0,l={},c=[{value:"Plugin Generator",id:"plugin-generator",level:2},{value:"Target Generator",id:"target-generator",level:2},{value:"Microservice Generator",id:"microservice-generator",level:2},{value:"Conversion Generator",id:"conversion-generator",level:2},{value:"Limits Response Generator",id:"limits-response-generator",level:2},{value:"Widget Generator",id:"widget-generator",level:2},{value:"Tool Generator",id:"tool-generator",level:2}];function d(e){let t={a:"a",admonition:"admonition",code:"code",h2:"h2",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsxs)(t.p,{children:["The COSMOS Code Generators are built into the scripts ",(0,i.jsx)(t.code,{children:"openc3.sh"})," and ",(0,i.jsx)(t.code,{children:"openc3.bat"})," that are included in the COSMOS ",(0,i.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos-project",children:"project"})," (more about ",(0,i.jsx)(t.a,{href:"key_concepts#projects",children:"projects"}),")."]}),"\n",(0,i.jsxs)(t.p,{children:["If you followed the ",(0,i.jsx)(t.a,{href:"/tools/staticdocs/docs/getting-started/installation",children:"Installation Guide"})," you should already be inside a cloned ",(0,i.jsx)(t.a,{href:"https://github.com/OpenC3/cosmos-project",children:"openc3-project"})," which is in your PATH (necessary for openc3.bat / openc3.sh to be resolved). To see all the available code generators type the following:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"% openc3.sh cli generate\nUnknown generator ''. Valid generators: plugin, target, microservice, widget, conversion,\nlimits_response, tool, tool_vue, tool_angular, tool_react, tool_svelte\n"})}),"\n",(0,i.jsx)(t.admonition,{title:"Training Available",type:"note",children:(0,i.jsxs)(t.p,{children:["If any of this gets confusing, contact us at ",(0,i.jsx)("a",{href:"mailto:support@openc3.com",children:(0,i.jsx)(t.a,{href:"mailto:support@openc3.com",children:"support@openc3.com"})}),". We have training classes available!"]})}),"\n",(0,i.jsx)(t.h2,{id:"plugin-generator",children:"Plugin Generator"}),"\n",(0,i.jsxs)(t.p,{children:["The plugin generator creates the scaffolding for a new COSMOS Plugin. It requires a plugin name and will create a new directory called ",(0,i.jsx)(t.code,{children:"openc3-cosmos-<name>"}),". For example:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"% openc3.sh cli generate plugin\nUsage: cli generate plugin <NAME>\n\n% openc3.sh cli generate plugin GSE\nPlugin openc3-cosmos-gse successfully generated!\n"})}),"\n",(0,i.jsx)(t.p,{children:"This creates the following files:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Name"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:".gitignore"}),(0,i.jsx)(t.td,{children:"Tells git to ignore any node_modules directory (for tool development)"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"LICENSE.txt"}),(0,i.jsx)(t.td,{children:"License for the plugin. COSMOS Plugins should be licensed in a manner compatible with the AGPLv3, unless they are designed only for use with COSMOS Enterprise Edition."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"openc3-cosmos-gse.gemspec"}),(0,i.jsxs)(t.td,{children:["Gemspec file which should be edited to add user specific information like description, authors, emails, homepage, etc. The name of this file is used in compiling the plugin contents into the final corresponding gem file: e.g. openc3-cosmos-gse-1.0.0.gem. COSMOS plugins should always begin with the openc3-cosmos prefix to make them easily identifiable in the Rubygems repository. The file is formatted as documented at: ",(0,i.jsx)(t.a,{href:"https://guides.rubygems.org/specification-reference/",children:"https://guides.rubygems.org/specification-reference/"})]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"plugin.txt"}),(0,i.jsxs)(t.td,{children:["COSMOS specific file for Plugin creation. Learn more ",(0,i.jsx)(t.a,{href:"../configuration/plugins",children:"here"}),"."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"Rakefile"}),(0,i.jsx)(t.td,{children:'Ruby Rakefile configured to support building the plugin by running "openc3.sh cli rake build VERSION=X.X.X" where X.X.X is the plugin version number'})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"README.md"}),(0,i.jsx)(t.td,{children:"Markdown file used to document the plugin"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"requirements.txt"}),(0,i.jsx)(t.td,{children:"Python dependencies file (only for Python plugins)"})]})]})]}),"\n",(0,i.jsx)(t.p,{children:"While this structure is required, it is not very useful by itself. The plugin generator just creates the framework for other generators to use."}),"\n",(0,i.jsx)(t.h2,{id:"target-generator",children:"Target Generator"}),"\n",(0,i.jsx)(t.p,{children:"The target generator creates the scaffolding for a new COSMOS Target. It must operate inside an existing COSMOS plugin and requires a target name. For example:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate target\nUsage: cli generate target <NAME> (--ruby or --python)\n\nopenc3-cosmos-gse % openc3.sh cli generate target GSE\nTarget GSE successfully generated!\n"})}),"\n",(0,i.jsx)(t.p,{children:"This creates the following files and directories:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Name"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE"}),(0,i.jsx)(t.td,{children:"Contains the configuration for the GSE target. The target name is always defined in all caps. This is typically the default name of the target, but well-designed targets will allow themselves to be renamed at installation."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/cmd_tlm"}),(0,i.jsx)(t.td,{children:"Contains the command and telemetry definition files for the GSE target. These files capture the format of the commands that can be sent to the target, and the telemetry packets that are expected to be received by COSMOS from the target. Note that the files in this folder are processed in alphabetical order by default. That can matter if you reference a packet in another file (it must already have been defined)."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/cmd_tlm/cmd.txt"}),(0,i.jsxs)(t.td,{children:["Example ",(0,i.jsx)(t.a,{href:"../configuration/command",children:"command"})," configuration. Will need to be edited for the target specific commands."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/cmd_tlm/tlm.txt"}),(0,i.jsxs)(t.td,{children:["Example ",(0,i.jsx)(t.a,{href:"../configuration/telemetry",children:"telemetry"})," configuration. Will need to be edited for the target specific telemetry."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/lib"}),(0,i.jsxs)(t.td,{children:["Contains any custom code required by the target. Good examples of custom code are library files, custom ",(0,i.jsx)(t.a,{href:"../configuration/interfaces",children:"interface"})," classes and ",(0,i.jsx)(t.a,{href:"../configuration/protocols",children:"protocols"}),"."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/lib/gse.rb/py"}),(0,i.jsx)(t.td,{children:"Example library file which can be expanded as the target is developed. COSMOS recommends building up library methods to avoid code duplication and ease reuse."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/procedures"}),(0,i.jsxs)(t.td,{children:["This folder contains target specific procedures and helper methods which exercise functionality of the target. These procedures should be kept simple and only use the command and telemetry definitions associated with this target. See the ",(0,i.jsx)(t.a,{href:"../guides/script-writing#script-organization",children:"Scripting Guide"})," for more information."]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/procedures/procedure.rb/py"}),(0,i.jsx)(t.td,{children:"Procedure with an example of sending a command and checking telemetry"})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/public"}),(0,i.jsxs)(t.td,{children:["Put image files here for use in Telemetry Viewer Canvas Image widgets such as ",(0,i.jsx)(t.a,{href:"/tools/staticdocs/docs/configuration/telemetry-screens#canvasimage",children:"CANVASIMAGE"})," and ",(0,i.jsx)(t.a,{href:"/tools/staticdocs/docs/configuration/telemetry-screens#canvasimagevalue",children:"CANVASIMAGEVALUE"})]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/screens"}),(0,i.jsxs)(t.td,{children:["Contains telemetry ",(0,i.jsx)(t.a,{href:"/tools/staticdocs/docs/configuration/telemetry-screens",children:"screens"})," for the target"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/screens/status.txt"}),(0,i.jsxs)(t.td,{children:["Example ",(0,i.jsx)(t.a,{href:"/tools/staticdocs/docs/configuration/telemetry-screens",children:"screen"})," to display telemetry values"]})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/target.txt"}),(0,i.jsxs)(t.td,{children:[(0,i.jsx)(t.a,{href:"../configuration/target",children:"Target"})," configuration such as ignoring command and telemetry items and how to process the cmd/tlm files"]})]})]})]}),"\n",(0,i.jsx)(t.p,{children:"It also updates the plugin.txt file to add the new target:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ruby",children:"VARIABLE gse_target_name GSE\n\nTARGET GSE <%= gse_target_name %>\nINTERFACE <%= gse_target_name %>_INT tcpip_client_interface.rb host.docker.internal 8080 8081 10.0 nil BURST\n MAP_TARGET <%= gse_target_name %>\n"})}),"\n",(0,i.jsx)(t.h2,{id:"microservice-generator",children:"Microservice Generator"}),"\n",(0,i.jsx)(t.p,{children:"The microservice generator creates the scaffolding for a new COSMOS Microservice. It must operate inside an existing COSMOS plugin and requires a target name. For example:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate microservice\nUsage: cli generate microservice <NAME> (--ruby or --python)\n\nopenc3-cosmos-gse % openc3.sh cli generate microservice background\nMicroservice BACKGROUND successfully generated!\n"})}),"\n",(0,i.jsx)(t.p,{children:"This creates the following files and directories:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Name"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"microservices/BACKGROUND"}),(0,i.jsx)(t.td,{children:"Contains the code and any necessary configuration for the BACKGROUND microservice. The name is always defined in all caps. This is typically the default name of the microservice, but well-designed microservices will allow themselves to be renamed at installation."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"microservices/BACKGROUND/background.rb"}),(0,i.jsx)(t.td,{children:"Fully functional microservice which will run every minute and log a message. Edit to implement any custom logic that you want to run in the background. Potential uses are safety microservices which can check and autonomously respond to complex events and take action (NOTE: Simple actions might just require a Limits Response)."})]})]})]}),"\n",(0,i.jsx)(t.p,{children:"It also updates the plugin.txt file to add the new microservice:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ruby",children:"MICROSERVICE BACKGROUND background-microservice\n CMD ruby background.rb\n"})}),"\n",(0,i.jsx)(t.h2,{id:"conversion-generator",children:"Conversion Generator"}),"\n",(0,i.jsxs)(t.p,{children:["The conversion generator creates the scaffolding for a new COSMOS ",(0,i.jsx)(t.a,{href:"../configuration/telemetry#read_conversion",children:"Conversion"}),". It must operate inside an existing COSMOS plugin and requires both a target name and conversion name. For example:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate conversion\nUsage: cli generate conversion <TARGET> <NAME> (--ruby or --python)\n\nopenc3-cosmos-gse % openc3.sh cli generate limits_response GSE double\nConversion targets/GSE/lib/double_conversion.rb successfully generated!\nTo use the conversion add the following to a telemetry item:\n READ_CONVERSION double_conversion.rb\n"})}),"\n",(0,i.jsx)(t.p,{children:"This creates the following files and directories:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Name"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/lib/double_conversion.rb"}),(0,i.jsx)(t.td,{children:"Fully functional Conversion which has an example implementation of the call() method to convert any existing COSMOS values."})]})})]}),"\n",(0,i.jsx)(t.p,{children:"As the generator states, to use this conversion code you must add it to a telemetry item. For example:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ruby",children:'TELEMETRY GSE STATUS BIG_ENDIAN "Telemetry description"\n # Keyword Name BitSize Type ID Description\n APPEND_ID_ITEM ID 16 INT 1 "Identifier"\n APPEND_ITEM VALUE 32 FLOAT "Value"\n READ_CONVERSION double_conversion.rb\n APPEND_ITEM BOOL 8 UINT "Boolean"\n STATE FALSE 0\n STATE TRUE 1\n APPEND_ITEM LABEL 0 STRING "The label to apply"\n'})}),"\n",(0,i.jsx)(t.h2,{id:"limits-response-generator",children:"Limits Response Generator"}),"\n",(0,i.jsxs)(t.p,{children:["The limits_response generator creates the scaffolding for a new COSMOS ",(0,i.jsx)(t.a,{href:"../configuration/telemetry#limits_response",children:"Limits Response"}),". It must operate inside an existing COSMOS plugin and requires both a target name and limits response name. For example:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate limits_response\nUsage: cli generate limits_response <TARGET> <NAME> (--ruby or --python)\n\nopenc3-cosmos-gse % openc3.sh cli generate limits_response GSE safe\nLimits response targets/GSE/lib/safe_limits_response.rb successfully generated!\nTo use the limits response add the following to a telemetry item:\n LIMITS_RESPONSE safe_limits_response.rb\n"})}),"\n",(0,i.jsx)(t.p,{children:"This creates the following files and directories:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Name"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"targets/GSE/lib/safe_limits_response.rb"}),(0,i.jsx)(t.td,{children:"Fully functional Limits Response which has an example implementation of the call() method and taking action based on the current limits state of the particular item"})]})})]}),"\n",(0,i.jsx)(t.p,{children:"As the generator states, to use this limits code you must add it to a telemetry item which has limits defined. In the generated GSE target, none of the items have limits defined so you first need to add limits and then add the response."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ruby",children:'TELEMETRY GSE STATUS BIG_ENDIAN "Telemetry description"\n # Keyword Name BitSize Type ID Description\n APPEND_ID_ITEM ID 16 INT 1 "Identifier"\n APPEND_ITEM VALUE 32 FLOAT "Value"\n LIMITS DEFAULT 1 ENABLED -80.0 -70.0 60.0 80.0 -20.0 20.0\n LIMITS_RESPONSE safe_limits_response.rb\n APPEND_ITEM BOOL 8 UINT "Boolean"\n STATE FALSE 0\n STATE TRUE 1\n APPEND_ITEM LABEL 0 STRING "The label to apply"\n'})}),"\n",(0,i.jsx)(t.h2,{id:"widget-generator",children:"Widget Generator"}),"\n",(0,i.jsxs)(t.p,{children:["The conversion generator creates the scaffolding for a new COSMOS Widget for use in ",(0,i.jsx)(t.a,{href:"../configuration/telemetry-screens",children:"Telemetry Viewer Screens"}),". For more information see the ",(0,i.jsx)(t.a,{href:"../guides/custom-widgets",children:"Custom Widget"})," guide. It must operate inside an existing COSMOS plugin and requires a widget name. For example:"]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate widget\nUsage: cli generate widget <SuperdataWidget>\n\nopenc3-cosmos-gse % openc3.sh cli generate widget HelloworldWidget\nWidget HelloworldWidget successfully generated!\nPlease be sure HelloworldWidget does not overlap an existing widget: https://docs.openc3.com/docs/configuration/telemetry-screens\n"})}),"\n",(0,i.jsx)(t.p,{children:"This creates the following files and directories:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Name"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsx)(t.tbody,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"src/HelloworldWidget.vue"}),(0,i.jsx)(t.td,{children:"Fully functional widget which displays a simple value. This can be expanded using existing COSMOS Vue.js code to create any data visualization imaginable."})]})})]}),"\n",(0,i.jsx)(t.p,{children:"It also updates the plugin.txt file to add the new widget:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ruby",children:"WIDGET Helloworld\n"})}),"\n",(0,i.jsx)(t.h2,{id:"tool-generator",children:"Tool Generator"}),"\n",(0,i.jsxs)(t.p,{children:["The tool generator creates the scaffolding for a new COSMOS Tool. It's It must operate inside an existing COSMOS plugin and requires a tool name. Developing a custom tool requires intensive knowledge of a Javascript framework such as Vue.js, Angular, React, or Svelte. Since all the COSMOS tools are built in Vue.js, that is the recommended framework for new tool development. For additional help on frontend development, see ",(0,i.jsx)(t.a,{href:"../development/developing#running-a-frontend-application",children:"Running a Frontend Application"}),"."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-bash",children:"openc3-cosmos-gse % openc3.sh cli generate tool\nUsage: cli generate tool 'Tool Name'\n\nopenc3-cosmos-gse % openc3.sh cli generate widget DataVis\nTool datavis successfully generated!\nPlease be sure datavis does not conflict with any other tools\n"})}),"\n",(0,i.jsx)(t.p,{children:"This creates the following files and directories:"}),"\n",(0,i.jsxs)(t.table,{children:[(0,i.jsx)(t.thead,{children:(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.th,{children:"Name"}),(0,i.jsx)(t.th,{children:"Description"})]})}),(0,i.jsxs)(t.tbody,{children:[(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"src/App.vue"}),(0,i.jsx)(t.td,{children:"Basic Vue template to render the application."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"src/main.js"}),(0,i.jsx)(t.td,{children:"Entry point for the new tool which loads Vue, Vuetify, and other libraries."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"src/router.js"}),(0,i.jsx)(t.td,{children:"Vue component router."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"src/tools/datavis"}),(0,i.jsx)(t.td,{children:"Contains all the files necessary to serve a web-based tool named datavis. The name is always defined in all lowercase. Due to technical limitations, the toolname must be unique and cannot be renamed at installation."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"src/tools/datavis/datavis.vue"}),(0,i.jsx)(t.td,{children:"Fully functional tool which displays a simple button. This can be expanded using existing COSMOS Vue.js code to create any tool imaginable."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"package.json"}),(0,i.jsx)(t.td,{children:"Build and dependency definition file. Used by npm or yarn to build the tool."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"vue.config.js"}),(0,i.jsx)(t.td,{children:"Vue configuration file used to serve the application in development and build the application."})]}),(0,i.jsxs)(t.tr,{children:[(0,i.jsx)(t.td,{children:"<dotfiles>"}),(0,i.jsx)(t.td,{children:"Various dotfiles which help configure formatters and tools for Javascript frontend development"})]})]})]}),"\n",(0,i.jsxs)(t.p,{children:["It also updates the plugin.txt file to add the new tool. The icon can be changed to any of the material design icons found ",(0,i.jsx)(t.a,{href:"https://pictogrammers.com/library/mdi/",children:"here"}),"."]}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-ruby",children:'TOOL datavis "DataVis"\n INLINE_URL main.js\n ICON mdi-file-cad-box\n'})})]})}function h(e={}){let{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},2840:function(e,t,n){n.d(t,{Z:function(){return a},a:function(){return o}});var s=n(2784);let i={},r=s.createContext(i);function o(e){let t=s.useContext(r);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:o(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["5162"],{8351:function(e,n,i){i.r(n),i.d(n,{default:()=>h,frontMatter:()=>s,metadata:()=>r,assets:()=>a,toc:()=>l,contentTitle:()=>c});var r=JSON.parse('{"id":"guides/exposing_microservices","title":"Exposing Microservices","description":"Provide external accessibility to microservices","source":"@site/docs/guides/exposing_microservices.md","sourceDirName":"guides","slug":"/guides/exposing_microservices","permalink":"/tools/staticdocs/docs/guides/exposing_microservices","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/guides/exposing_microservices.md","tags":[],"version":"current","frontMatter":{"title":"Exposing Microservices","description":"Provide external accessibility to microservices","sidebar_custom_props":{"myEmoji":"\uD83D\uDEAA"}},"sidebar":"defaultSidebar","previous":{"title":"Custom Widgets","permalink":"/tools/staticdocs/docs/guides/custom-widgets"},"next":{"title":"Little Endian Bitfields","permalink":"/tools/staticdocs/docs/guides/little-endian-bitfields"}}'),t=i("2322"),o=i("2840");let s={title:"Exposing Microservices",description:"Provide external accessibility to microservices",sidebar_custom_props:{myEmoji:"\uD83D\uDEAA"}},c=void 0,a={},l=[{value:"Expose microservices using the PORT and ROUTE_PREFIX keywords",id:"expose-microservices-using-the-port-and-route_prefix-keywords",level:2},{value:"Connecting to microservices from a different INTERFACE in plugin.txt",id:"connecting-to-microservices-from-a-different-interface-in-plugintxt",level:2}];function d(e){let n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"COSMOS provides a simple method to add new APIs and make custom microservices and interfaces accessible to the network."}),"\n",(0,t.jsx)(n.admonition,{title:"Make sure anything you expose is secure",type:"warning",children:(0,t.jsx)(n.p,{children:"Make sure that any new apis you expose check for user credentials and authorize actions appropriately."})}),"\n",(0,t.jsx)(n.h2,{id:"expose-microservices-using-the-port-and-route_prefix-keywords",children:"Expose microservices using the PORT and ROUTE_PREFIX keywords"}),"\n",(0,t.jsxs)(n.p,{children:["In your plugin.txt file, both ",(0,t.jsx)(n.a,{href:"../configuration/plugins#interface-1",children:"INTERFACE"})," and ",(0,t.jsx)(n.a,{href:"../configuration/plugins#microservice-1",children:"MICROSERVICE"})," support the keywords ",(0,t.jsx)(n.a,{href:"../configuration/plugins#port-1",children:"PORT"})," and ",(0,t.jsx)(n.a,{href:"../configuration/plugins#route_prefix-1",children:"ROUTE_PREFIX"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"../configuration/plugins#port-1",children:"PORT"})," is used to declare the port(s) that your microservice is listening for connections on. This is used in combination with ",(0,t.jsx)(n.a,{href:"../configuration/plugins#route_prefix-1",children:"ROUTE_PREFIX"})," to create a dynamic traefik route to your microservice."]}),"\n",(0,t.jsx)(n.p,{children:"The following code is used internally to let traefik know where to connect to your microservice internally:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-ruby",children:"if ENV['OPENC3_OPERATOR_HOSTNAME']\n url = \"http://#{ENV['OPENC3_OPERATOR_HOSTNAME']}:#{port}\"\nelse\n if ENV['KUBERNETES_SERVICE_HOST']\n url = \"http://#{microservice_name.downcase.gsub('__', '-').gsub('_', '-')}-service:#{port}\"\n else\n url = \"http://openc3-operator:#{port}\"\n end\nend\n"})}),"\n",(0,t.jsx)(n.p,{children:"Note that this is the internal route to your microservice. Determining this route checks two different environment variables."}),"\n",(0,t.jsx)(n.p,{children:'OPENC3_OPERATOR_HOSTNAME is used to override the default service name for our regular docker compose operator of "openc3-operator". Usually this is not set.'}),"\n",(0,t.jsx)(n.p,{children:"In OpenC3 Enterprise, KUBERNETES_SERVICE_HOST is used to detect if we are running in a Kubernetes environment (it will be set by Kubernetes), in which case the service is expected to have a Kubernetes service named scope-user-microservicename-service. For example, if you are using the DEFAULT scope and have a microservice named MYMICROSERVICE the service would be found at the hostname: default-user-mymicroservice-service. Double underscores or single underscores are replaced by a dash and the name is all lower case."}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"../configuration/plugins#route_prefix-1",children:"ROUTE_PREFIX"})," is used to define the external route. The external route will take the form of http(s)://YOURCOSMOSDOMAIN",":PORT","/ROUTE_PREFIX. So for example, if you set the ",(0,t.jsx)(n.a,{href:"../configuration/plugins#route_prefix-1",children:"ROUTE_PREFIX"})," to /mymicroservice then on a default local installation, it could be reached at ",(0,t.jsx)(n.code,{children:"http://localhost:2900/mymicroservice"}),". The ",(0,t.jsx)(n.code,{children:"http://localhost:2900"})," part should be substituted by whatever domain you are accessing COSMOS at."]}),"\n",(0,t.jsxs)(n.p,{children:["Here is a snippet of code showing ",(0,t.jsx)(n.a,{href:"../configuration/plugins#port-1",children:"PORT"})," and ",(0,t.jsx)(n.a,{href:"../configuration/plugins#route_prefix-1",children:"ROUTE_PREFIX"})," in use within a plugin.txt file:"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"VARIABLE cfdp_microservice_name CFDP\nVARIABLE cfdp_route_prefix /cfdp\nVARIABLE cfdp_port 2905\n\nMICROSERVICE CFDP <%= cfdp_microservice_name %>\n WORK_DIR .\n ROUTE_PREFIX <%= cfdp_route_prefix %>\n PORT <%= cfdp_port %>\n"})}),"\n",(0,t.jsx)(n.p,{children:"Leaving the variables at their default values the following will occur:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The microservice will be exposed internally to Docker (Open Source or Enterprise) at: ",(0,t.jsx)(n.code,{children:"http://openc3-operator:2905"})]}),"\n",(0,t.jsxs)(n.li,{children:["The microservice will be exposed internally to Kubernetes (Enterprise) at: ",(0,t.jsx)(n.code,{children:"http://default-user-cfdp-service:2905"})]}),"\n",(0,t.jsxs)(n.li,{children:["The microservice will be exposed externally to the network at: ",(0,t.jsx)(n.code,{children:"http://localhost:2900/cfdp"})]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The same can be done for ",(0,t.jsx)(n.a,{href:"../configuration/plugins#interface-1",children:"INTERFACE"})," but note that the Kubernetes service name will use the microservice name of the interface which takes the form of ",(0,t.jsx)(n.code,{children:"SCOPE__INTERFACE__INTERFACENAME"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["Here is an example using ",(0,t.jsx)(n.a,{href:"../configuration/plugins#port",children:"PORT"})," and ",(0,t.jsx)(n.a,{href:"../configuration/plugins#route_prefix",children:"ROUTE_PREFIX"})," with ",(0,t.jsx)(n.a,{href:"../configuration/plugins#interface-1",children:"INTERFACE"}),":"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"VARIABLE my_interface_name MY_INT\nVARIABLE my_route_prefix /myint\nVARIABLE my_port 2910\n\nINTERFACE <%= my_interface_name %> http_server_interface.rb <%= my_port %>\n ROUTE_PREFIX <%= my_route_prefix %>\n PORT <%= my_port %>\n"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The interface will be exposed internally to Docker (Open Source or Enterprise) at: ",(0,t.jsx)(n.code,{children:"http://openc3-operator:2910"})]}),"\n",(0,t.jsxs)(n.li,{children:["The interface will be exposed internally to Kubernetes (Enterprise) at: ",(0,t.jsx)(n.code,{children:"http://default-interface-my-int-service:2905"})]}),"\n",(0,t.jsxs)(n.li,{children:["The interface will be exposed externally to the network at: ",(0,t.jsx)(n.code,{children:"http://localhost:2900/myint"})]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Sharded Operator on Kubernetes (Enterprise)",type:"warning",children:(0,t.jsx)(n.p,{children:"The sharded operator is expected to be used on Kubernetes whenever the Kubernetes Operator is not used. Typically this will be because the user does not have permission to use the Kubernetes API directly to spawn containers which is required for use of the Kubernetes Operator. In this case, Kubernetes services will NOT be automatically created, and will have to be manually created by a user with permissions in Kubernetes, or through some other authorized method (like a custom framework dashboard or config file)."})}),"\n",(0,t.jsx)(n.h2,{id:"connecting-to-microservices-from-a-different-interface-in-plugintxt",children:"Connecting to microservices from a different INTERFACE in plugin.txt"}),"\n",(0,t.jsx)(n.p,{children:"Sometimes you might want to have an INTERFACE connect to a microservice you are running. For this case, only the PORT keyword is required on the INTERFACE or MICROSERVICE because we are only connecting internally and ROUTE_PREFIX isn't used."}),"\n",(0,t.jsx)(n.p,{children:"The following code taken from our demo plugin provides an example of how to calculate the correct hostname across both Open Source and Enterprise versions of COSMOS in a plugin.txt file:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:" <% example_host = ENV['KUBERNETES_SERVICE_HOST'] ? \"#{scope}-user-#{example_microservice_name.downcase.gsub('__', '-').gsub('_', '-')}-service\" : \"openc3-operator\" %>\n INTERFACE <%= example_int_name %> example_interface.rb <%= example_host %> <%= example_port %>\n MAP_TARGET <%= example_target_name %>\n"})}),"\n",(0,t.jsx)(n.p,{children:"Note that the above code does not handle the OPENC3_OPERATOR_HOSTNAME environment variable which might change the default name of openc3-operator. Update as needed."})]})}function h(e={}){let{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},2840:function(e,n,i){i.d(n,{Z:function(){return c},a:function(){return s}});var r=i(2784);let t={},o=r.createContext(t);function s(e){let n=r.useContext(o);return r.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["602"],{8747:function(e,n,i){i.r(n),i.d(n,{default:()=>d,frontMatter:()=>r,metadata:()=>t,assets:()=>l,toc:()=>a,contentTitle:()=>c});var t=JSON.parse('{"id":"development/curl","title":"Testing with Curl","description":"How to use Curl to hit the COSMOS APIs","source":"@site/docs/development/curl.md","sourceDirName":"development","slug":"/development/curl","permalink":"/tools/staticdocs/docs/development/curl","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/development/curl.md","tags":[],"version":"current","frontMatter":{"title":"Testing with Curl","description":"How to use Curl to hit the COSMOS APIs","sidebar_custom_props":{"myEmoji":"\uD83C\uDF0A"}},"sidebar":"defaultSidebar","previous":{"title":"Development","permalink":"/tools/staticdocs/docs/development"},"next":{"title":"Developing COSMOS","permalink":"/tools/staticdocs/docs/development/developing"}}'),s=i("2322"),o=i("2840");let r={title:"Testing with Curl",description:"How to use Curl to hit the COSMOS APIs",sidebar_custom_props:{myEmoji:"\uD83C\uDF0A"}},c=void 0,l={},a=[{value:"Curl Example with OpenC3 COSMOS Open Source",id:"curl-example-with-openc3-cosmos-open-source",level:2},{value:"Curl Example with OpenC3 COSMOS Enterprise",id:"curl-example-with-openc3-cosmos-enterprise",level:2},{value:"Suite Runner Example",id:"suite-runner-example",level:2}];function p(e){let n={admonition:"admonition",code:"code",h2:"h2",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.admonition,{title:"This documentation is for COSMOS Developers",type:"note",children:(0,s.jsx)(n.p,{children:"This information is just generally used behind the scenes in COSMOS tools"})}),"\n",(0,s.jsx)(n.p,{children:"The COSMOS APIs are all served over HTTP, which means you can use curl to experiment with them. Curl is a great tool for seeing exactly how the API responds to any given request."}),"\n",(0,s.jsx)(n.h2,{id:"curl-example-with-openc3-cosmos-open-source",children:"Curl Example with OpenC3 COSMOS Open Source"}),"\n",(0,s.jsx)(n.p,{children:"OpenC3 COSMOS Open Source just has a single user account, so all you need to do is pass the single password as the token with your requests like this."}),"\n",(0,s.jsx)(n.p,{children:"Request:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'curl -i -H "Content-Type: application/json-rpc" -H "Authorization: password" -d \'{"jsonrpc": "2.0", "method": "tlm", "params": ["INST HEALTH_STATUS TEMP1"], "keyword_params": {"scope": "DEFAULT"}, "id": 8}\' -X POST http://127.0.0.1:2900/openc3-api/api\n'})}),"\n",(0,s.jsx)(n.p,{children:"Response:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'HTTP/1.1 200 OK\nCache-Control: max-age=0, private, must-revalidate\nContent-Length: 51\nContent-Type: application/json-rpc\nEtag: W/"e806aacfdbed0b325e7a5928e3bb5cf4"\nVary: Origin\nX-Request-Id: bbad6c6b-6d22-4374-a86f-b5b0b95e6939\nX-Runtime: 0.059044\nDate: Sat, 04 Nov 2023 21:34:47 GMT\n\n{"jsonrpc":"2.0","id":8,"result":53.26555000000001}\n'})}),"\n",(0,s.jsx)(n.h2,{id:"curl-example-with-openc3-cosmos-enterprise",children:"Curl Example with OpenC3 COSMOS Enterprise"}),"\n",(0,s.jsx)(n.p,{children:"OpenC3 COSMOS Enterprise uses the Keycloak Single Sign-on system, so you must first request a token from Keycloak using a username and password pair, before you make requests. By default this token will expire in 5 minutes, and will need to be refreshed if it expires before your next request."}),"\n",(0,s.jsx)(n.p,{children:"Keycloak Request:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Get tokens from Keycloak - You will need to update the username and password with your account\ncurl -i -H \"Content-Type: application/x-www-form-urlencoded\" -d 'username=operator&password=operator&client_id=api&grant_type=password&scope=openid' -X POST http://127.0.0.1:2900/auth/realms/openc3/protocol/openid-connect/token\n"})}),"\n",(0,s.jsx)(n.p,{children:"Keycloak Response:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'HTTP/1.1 200 OK\nCache-Control: no-store\nContent-Length: 3207\nContent-Type: application/json\nPragma: no-cache\nReferrer-Policy: no-referrer\nSet-Cookie: KEYCLOAK_LOCALE=; Version=1; Comment=Expiring cookie; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/auth/realms/openc3/; HttpOnly\nSet-Cookie: KC_RESTART=; Version=1; Expires=Thu, 01-Jan-1970 00:00:10 GMT; Max-Age=0; Path=/auth/realms/openc3/; HttpOnly\nStrict-Transport-Security: max-age=31536000; includeSubDomains\nX-Content-Type-Options: nosniff\nX-Frame-Options: SAMEORIGIN\nX-Xss-Protection: 1; mode=block\nDate: Wed, 10 May 2023 00:40:40 GMT\n\n{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ0cDlERmpNZGFXMy16WXptdlBqVTZnNTVqMVNhWGhkZHJqU0szQVNvaDhVIn0.eyJleHAiOjE2ODM2Nzk1NDAsImlhdCI6MTY4MzY3OTI0MCwianRpIjoiZmVlOTQwYWYtZDY3Ny00MWUyLWIzNWYtZDI5ODhiM2RhZGQ2IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDoyOTAwL2F1dGgvcmVhbG1zL29wZW5jMyIsInN1YiI6ImFjZTFlNmExLTkzMTktNDc2ZS1iZjQzLTZmM2NhYjllZTJkZSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFwaSIsInNlc3Npb25fc3RhdGUiOiJmMzc4NTk2Ny0yYTQ2LTRjMTItYWQwYy1jZmY3ZmM0NzdkZjkiLCJhY3IiOiIxIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtb3BlbmMzIiwiQUxMU0NPUEVTX19vcGVyYXRvciIsIm9mZmxpbmVfYWNjZXNzIiwiQUxMU0NPUEVTX192aWV3ZXIiXX0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiJmMzc4NTk2Ny0yYTQ2LTRjMTItYWQwYy1jZmY3ZmM0NzdkZjkiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiJUaGUgT3BlcmF0b3IiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJvcGVyYXRvciIsImdpdmVuX25hbWUiOiJUaGUiLCJmYW1pbHlfbmFtZSI6Ik9wZXJhdG9yIn0.eSqSeZrmCTahwltz5jsu5r3w6W15T5h0BvIdqKWQBDcnxAcxKuT-Nwziw_ewySSgHeC172CIWJUpHVp8ACDQG-dfW4KkvA6AcGfSF_f8TBH_rZrVQwlvwwzdA_egGKzhZWcnAC8TDjXRxuaWmnOgWT0aaHZAoW8EvwmKp-1IVz2l0B-hqzfC7dkjMrCI1udLfDvDBza9OtuR-FnKGt8h4nYnRzr8pO2jwebPFyZlR00gVsyK-b411XqprpT-qpRObYZwH5womA-8xIiwRZj9dsfQ1TaHGFkp1LNzxcj_r6pfwVO263bohbeU7ImezQdbvGLJ9NHaglzVNroTui4BXA","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI5NjNlMjJiMS0wZmYwLTRmZjktYTg0Zi1hOGI4MzcxOWFiMDEifQ.eyJleHAiOjE2ODM2ODEwNDAsImlhdCI6MTY4MzY3OTI0MCwianRpIjoiMmQyYjIyNmItNjJkOS00YjRjLWI3YTYtMGEwYjk4MGQyMjMwIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDoyOTAwL2F1dGgvcmVhbG1zL29wZW5jMyIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6MjkwMC9hdXRoL3JlYWxtcy9vcGVuYzMiLCJzdWIiOiJhY2UxZTZhMS05MzE5LTQ3NmUtYmY0My02ZjNjYWI5ZWUyZGUiLCJ0eXAiOiJSZWZyZXNoIiwiYXpwIjoiYXBpIiwic2Vzc2lvbl9zdGF0ZSI6ImYzNzg1OTY3LTJhNDYtNGMxMi1hZDBjLWNmZjdmYzQ3N2RmOSIsInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiJmMzc4NTk2Ny0yYTQ2LTRjMTItYWQwYy1jZmY3ZmM0NzdkZjkifQ.1HlKdxQkaL5tYuHTXsOceLZFmNNLl9BjoA4oUl70x9M","token_type":"Bearer","id_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ0cDlERmpNZGFXMy16WXptdlBqVTZnNTVqMVNhWGhkZHJqU0szQVNvaDhVIn0.eyJleHAiOjE2ODM2Nzk1NDAsImlhdCI6MTY4MzY3OTI0MCwiYXV0aF90aW1lIjowLCJqdGkiOiJhNDJkOTY1ZS1lMzU0LTRiM2QtOTIyYS1hOWE0ZDgwZWYxMTkiLCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjI5MDAvYXV0aC9yZWFsbXMvb3BlbmMzIiwiYXVkIjoiYXBpIiwic3ViIjoiYWNlMWU2YTEtOTMxOS00NzZlLWJmNDMtNmYzY2FiOWVlMmRlIiwidHlwIjoiSUQiLCJhenAiOiJhcGkiLCJzZXNzaW9uX3N0YXRlIjoiZjM3ODU5NjctMmE0Ni00YzEyLWFkMGMtY2ZmN2ZjNDc3ZGY5IiwiYXRfaGFzaCI6IjNBWE9ISkFKYzFPVldLd2Y0a0Q4TkEiLCJhY3IiOiIxIiwic2lkIjoiZjM3ODU5NjctMmE0Ni00YzEyLWFkMGMtY2ZmN2ZjNDc3ZGY5IiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoiVGhlIE9wZXJhdG9yIiwicHJlZmVycmVkX3VzZXJuYW1lIjoib3BlcmF0b3IiLCJnaXZlbl9uYW1lIjoiVGhlIiwiZmFtaWx5X25hbWUiOiJPcGVyYXRvciJ9.gdLl6KOKIIAdl6jYEuAXQrGCNvuwLQb3RDnwrHJdqyFXshiwofBiLMFreRsIE-33xXWNBU6pnSLQHPVlQU5Vmzlk0IOfk-b4yNq0dNa1TV1kmnxRl8w1ulTQYVZjdsN-oyLNwe0v3aJcYtbvIA3DP8rgO6bVv0ogkjWtlda6MbkyZN-har8x3raUVSlUPRP2Basy1xSMNNA1jvB-nEM-aubrUZE6r0PjI6PE1hbLPmuPbcX3uuIwXu2-UoXepkB8H7omUuMm-S98aHpRarwszC0mmHD5b_wiXusMVw4xYw8eavFue4zfw-T2IKuTVtxbMTygXIah6iqi4gkpL8Mx1w","not-before-policy":0,"session_state":"f3785967-2a46-4c12-ad0c-cff7fc477df9","scope":"openid profile email"}\n'})}),"\n",(0,s.jsx)(n.p,{children:"COSMOS Request:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# COSMOS Request now looks like this:\n\ncurl -i -H "Content-Type: application/json-rpc" -H "Authorization: eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ0cDlERmpNZGFXMy16WXptdlBqVTZnNTVqMVNhWGhkZHJqU0szQVNvaDhVIn0.eyJleHAiOjE2ODM2Nzk1NDAsImlhdCI6MTY4MzY3OTI0MCwianRpIjoiZmVlOTQwYWYtZDY3Ny00MWUyLWIzNWYtZDI5ODhiM2RhZGQ2IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDoyOTAwL2F1dGgvcmVhbG1zL29wZW5jMyIsInN1YiI6ImFjZTFlNmExLTkzMTktNDc2ZS1iZjQzLTZmM2NhYjllZTJkZSIsInR5cCI6IkJlYXJlciIsImF6cCI6ImFwaSIsInNlc3Npb25fc3RhdGUiOiJmMzc4NTk2Ny0yYTQ2LTRjMTItYWQwYy1jZmY3ZmM0NzdkZjkiLCJhY3IiOiIxIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbImRlZmF1bHQtcm9sZXMtb3BlbmMzIiwiQUxMU0NPUEVTX19vcGVyYXRvciIsIm9mZmxpbmVfYWNjZXNzIiwiQUxMU0NPUEVTX192aWV3ZXIiXX0sInNjb3BlIjoib3BlbmlkIHByb2ZpbGUgZW1haWwiLCJzaWQiOiJmMzc4NTk2Ny0yYTQ2LTRjMTItYWQwYy1jZmY3ZmM0NzdkZjkiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsIm5hbWUiOiJUaGUgT3BlcmF0b3IiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJvcGVyYXRvciIsImdpdmVuX25hbWUiOiJUaGUiLCJmYW1pbHlfbmFtZSI6Ik9wZXJhdG9yIn0.eSqSeZrmCTahwltz5jsu5r3w6W15T5h0BvIdqKWQBDcnxAcxKuT-Nwziw_ewySSgHeC172CIWJUpHVp8ACDQG-dfW4KkvA6AcGfSF_f8TBH_rZrVQwlvwwzdA_egGKzhZWcnAC8TDjXRxuaWmnOgWT0aaHZAoW8EvwmKp-1IVz2l0B-hqzfC7dkjMrCI1udLfDvDBza9OtuR-FnKGt8h4nYnRzr8pO2jwebPFyZlR00gVsyK-b411XqprpT-qpRObYZwH5womA-8xIiwRZj9dsfQ1TaHGFkp1LNzxcj_r6pfwVO263bohbeU7ImezQdbvGLJ9NHaglzVNroTui4BXA" -d \'{"jsonrpc": "2.0", "method": "tlm", "params": ["INST HEALTH_STATUS TEMP1"], "keyword_params": {"scope": "DEFAULT"}, "id": 8}\' -X POST http://127.0.0.1:2900/openc3-api/api\n'})}),"\n",(0,s.jsx)(n.p,{children:"COSMOS Response:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'HTTP/1.1 200 OK\nCache-Control: max-age=0, private, must-revalidate\nContent-Type: application/json-rpc\nEtag: W/"1e44c0878528687014e1e60a1cbebdae"\nVary: Origin\nX-Request-Id: 47a8dd26-1348-4693-8df1-5375f60abc6c\nX-Runtime: 0.046477\nDate: Wed, 10 May 2023 00:41:33 GMT\nTransfer-Encoding: chunked\n\n{"jsonrpc":"2.0","id":8,"result":29.204100000000007}\n'})}),"\n",(0,s.jsx)(n.h2,{id:"suite-runner-example",children:"Suite Runner Example"}),"\n",(0,s.jsxs)(n.p,{children:["It can be very useful to run the a suite or script remotely from a continuous testing server. COSMOS' REST API allows for this. To figure out what is required to run a certain task on the web GUI you can open up your browser's developer tools to monitor the network traffic. You will see all the requests and responses required to run a command and you can reformat them yourself to suit your own purposes. Below is an example of running a test script from a Chromium-based browser:\n",(0,s.jsx)(n.img,{src:"https://github.com/OpenC3/cosmos/assets/55999897/df642d42-43e0-47f9-9b52-d42746d9746b",alt:"Network Traffic in browser developer tools"})]}),"\n",(0,s.jsxs)(n.p,{children:['You can see that there are 5 transactions total. To investigate just right-click on the network transaction and click "copy as ',(0,s.jsx)(n.code,{children:"curl"}),'" (depends on the browser). Here is an example of the second one:']}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"curl 'http://localhost:2900/script-api/scripts/TARGET/procedures/cmd_tlm_test.rb/lock?scope=DEFAULT' \\\n -X 'POST' \\\n -H 'Accept: application/json' \\\n -H 'Accept-Language: en-US,en;q=0.9' \\\n -H 'Authorization: pass' \\\n -H 'Connection: keep-alive' \\\n -H 'Content-Length: 0' \\\n -H 'Origin: http://ascportal:2900' \\\n -H 'Referer: http://localhost:2900/tools/scriptrunner/?file=TARGET%2Fprocedures%2Fcmd_tlm_test.rb' \\\n -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0' \\\n --insecure\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Many of the browser-specific headers are not required. The important thing to notice here is the URL and the request (in this case ",(0,s.jsx)(n.code,{children:"POST"}),"). If we inspect all of these we'll find out what each one does:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Set the script contents","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"this updates any local changes)"}),"\n",(0,s.jsxs)(n.li,{children:["Note that this is a different request to ",(0,s.jsx)(n.code,{children:"GET"})," the script contents. This is done on the page load."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:"Lock the script (so other users can't edit it during execution)"}),"\n",(0,s.jsx)(n.li,{children:"Run script (this takes a JSON with options)"}),"\n",(0,s.jsx)(n.li,{children:"Open Websocket for logs"}),"\n",(0,s.jsx)(n.li,{children:"Request Result (this URL is a little different because the results are saved in redis)"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Below is a bash script which does all the above given some options. It requires ",(0,s.jsx)(n.code,{children:"curl"})," for the web requests and ",(0,s.jsx)(n.code,{children:"jq"})," for JSON parsing and formatting. It locks and runs the script, continually checks its status, then requests the result."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'#!/bin/bash\nset -e\nTARGET=${1:-\'TARGET\'}\nSCRIPT=${2:-\'procedures/cmd_tlm_test.rb\'}\nSUITE=${3:-\'TestSuite\'}\nCOSMOS_HOST=\'http://localhost:2900\'\nSCRIPT_API="$COSMOS_HOST/script-api"\nSCRIPT_PATH="scripts/$TARGET/$SCRIPT"\nCURL_ARGS=(\n -H \'Accept: application/json\'\n -H \'Authorization: password\'\n -H \'Accept-Language: en-US,en;q=0.9\'\n -H \'Connection: keep-alive\'\n -H \'Content-Type: application/json\'\n --insecure\n --silent )\n\n# Lock script #\ncurl "$SCRIPT_API/$SCRIPT_PATH/lock?scope=DEFAULT" -X "POST" "${CURL_ARGS[@]}"\n\n# Run script #\nRUN_OPTS=$(cat <<-json\n{\n "environment": [],\n "suiteRunner": {\n "method": "start",\n "suite": "$SUITE",\n "options": [\n "continueAfterError"\n ]\n }\n}\njson\n)\nRUN_OPTS=$(<<<"$RUN_OPTS" jq -rc .)\nID=$(curl "$SCRIPT_API/$SCRIPT_PATH/run?scope=DEFAULT" --data-raw "$RUN_OPTS" "${CURL_ARGS[@]}")\n\necho "Starting Script \'$SCRIPT_PATH\' at $(date) (may take up to 15 minutes)" > /dev/stderr\necho "You can monitor it in Script Runner here: $COSMOS_HOST/tools/scriptrunner/$ID" > /dev/stderr\n# Loop while Script ID is still running #\nwhile true; do\n SCRIPT_STATUS="$(curl "$SCRIPT_API/running-script?scope=DEFAULT" "${CURL_ARGS[@]}" | jq ".[]|select(.id==$ID)")"\n if [[ -z $SCRIPT_STATUS ]]; then\n break;\n fi\n sleep 2\ndone\n\n# Request results #\nBUCKET_FILE_URI="$(curl "$SCRIPT_API/completed-scripts?scope=DEFAULT" "${CURL_ARGS[@]}" |\\\n jq \'[.[]|select(.name | test("\'"${SCRIPT_PATH#scripts/}"\' "))][0] | .log | @uri\' -r)"\n\nURL="$(curl "$COSMOS_HOST/openc3-api/storage/download/$BUCKET_FILE_URI?bucket=OPENC3_LOGS_BUCKET&scope=DEFAULT" "${CURL_ARGS[@]}" |jq .url -r)"\n\ncurl "$COSMOS_HOST$URL" "${CURL_ARGS[@]}"\n'})})]})}function d(e={}){let{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},2840:function(e,n,i){i.d(n,{Z:function(){return c},a:function(){return r}});var t=i(2784);let s={},o=t.createContext(s);function r(e){let n=t.useContext(o);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["3522"],{5865:function(e,n,s){s.r(n),s.d(n,{default:()=>d,frontMatter:()=>l,metadata:()=>i,assets:()=>a,toc:()=>c,contentTitle:()=>r});var i=JSON.parse('{"id":"meta/licenses","title":"Licenses","description":"COSMOS licenses including the AGPLv3 vs Commercial","source":"@site/docs/meta/licenses.md","sourceDirName":"meta","slug":"/meta/licenses","permalink":"/tools/staticdocs/docs/meta/licenses","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/meta/licenses.md","tags":[],"version":"current","frontMatter":{"title":"Licenses","description":"COSMOS licenses including the AGPLv3 vs Commercial","sidebar_custom_props":{"myEmoji":"\uD83D\uDD75\uFE0F"}},"sidebar":"defaultSidebar","previous":{"title":"Contributing","permalink":"/tools/staticdocs/docs/meta/contributing"},"next":{"title":"Philosophy","permalink":"/tools/staticdocs/docs/meta/philosophy"}}'),o=s("2322"),t=s("2840");let l={title:"Licenses",description:"COSMOS licenses including the AGPLv3 vs Commercial",sidebar_custom_props:{myEmoji:"\uD83D\uDD75\uFE0F"}},r=void 0,a={},c=[{value:"AGPLv3",id:"agplv3",level:2},{value:"Evaluation and Education Use Only",id:"evaluation-and-education-use-only",level:2},{value:"Commercial License",id:"commercial-license",level:2},{value:"Why you should buy a Commercial License",id:"why-you-should-buy-a-commercial-license",level:3},{value:"FAQs",id:"faqs",level:2}];function h(e){let n={a:"a",code:"code",em:"em",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.p,{children:"OpenC3 COSMOS is offered under a tri-licensing model allowing users to choose between the following three options:"}),"\n",(0,o.jsx)(n.h2,{id:"agplv3",children:"AGPLv3"}),"\n",(0,o.jsxs)(n.p,{children:["This is our default open source license and the license that most free users use. The AGPLv3 is a modification of the GPLv3 which is what is known as a copy-left license or a viral license. You can read the whole thing here: ",(0,o.jsx)(n.a,{href:"https://github.com/OpenC3/cosmos/blob/main/LICENSE.txt",children:"OpenC3 AGPLv3"})]}),"\n",(0,o.jsx)(n.p,{children:"Obviously, the actual license text applies, but here is a short summary:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"The AGPL allows users to use the code however they want: For business, personal, etc., as long as they follow the other terms:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Users are anyone who could access the web-app. On the public internet, that is the whole world. On a private network, it is anyone with access to that network."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"The software is provided as-is, no warranty"}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Users must be given access to all the source code and are also allowed to use it however they want under the same terms of the AGPLv3. This includes any modifications made, anything added, and all plugins."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"For web applications (like COSMOS), a link must be provided to all of the source code."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"There are some key implications of the above:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"You cannot keep anything proprietary from your users. They have the rights to take the code (and configuration) and do anything they want with it. You CANNOT impede these rights or you are violating the AGPLv3 and YOU lose the rights to use our software."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"You must provide a digital link to all source code for your users, including plugins."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"All plugins must be licensed in an AGPLv3 compatible fashion. We recommend the MIT license because that allows your plugins to be compatible with the AGPLv3 and our commercial license. You can also use a dual license similar to what we do indicating the AGPLv3 or a purchased OpenC3 Commercial license."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"The AGPLv3 license is often chosen because it works well for open core products like COSMOS. Competitors cannot take the open source product and license it under different terms. They would be forever locked into the AGPLv3 which is difficult to monetize, because your customers can take any code you provide and publish it on the internet for free use by everyone."}),"\n",(0,o.jsx)(n.p,{children:"As the copyright holder, OpenC3 is able to license the product and derivatives commercially. No-one else can do this. (OpenC3 is also able to license legacy Ball Aerospace COSMOS code under IP agreement)"}),"\n",(0,o.jsx)(n.h2,{id:"evaluation-and-education-use-only",children:"Evaluation and Education Use Only"}),"\n",(0,o.jsxs)(n.p,{children:["This license takes effect as soon as you use any plugin we publish under Evaluation and Education terms. Currently the only plugin we use for this is our CCSDS CFDP plugin: ",(0,o.jsx)(n.a,{href:"https://github.com/OpenC3/openc3-cosmos-cfdp",children:"CFDP Plugin"})]}),"\n",(0,o.jsx)(n.p,{children:"You can read the whole license here:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:'# OpenC3 Evaluation and Educational License\n#\n# Copyright 2023 OpenC3, Inc.\n#\n# This work is licensed for evaluation and educational purposes only.\n# It may NOT be used for formal development, integration and test, operations\n# or any other commercial purpose without the purchase of a commercial license\n# from OpenC3, Inc.\n#\n# The above copyright notice and this permission notice shall be included in all copies\n# or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\n# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A\n# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'})}),"\n",(0,o.jsx)(n.p,{children:"This license is pretty straight forward, but the key is you can't use this code for any real work leading to a product (Formal Development, Integration and Test, or Operations) unless you switch to purchasing a commercial license."}),"\n",(0,o.jsx)(n.h2,{id:"commercial-license",children:"Commercial License"}),"\n",(0,o.jsx)(n.p,{children:"This license is a signed contract with OpenC3. It allows use of our code for a program under contractual terms where you do not have to follow the AGPLv3."}),"\n",(0,o.jsx)(n.p,{children:"Generally we license to a specific project with terms that allow for unlimited users, and installs as needed by that project. Any code and plugins that you develop under the commercial license can be kept proprietary."}),"\n",(0,o.jsx)(n.p,{children:"These licenses are sold as yearly subscriptions, or as a non-expiring perpetual license. We also offer site licenses, and licenses to support unlimited missions on a government framework architecture."}),"\n",(0,o.jsx)(n.p,{children:"Of course with our commercial license, you also get all the extra functionality of our Enterprise product."}),"\n",(0,o.jsx)(n.h3,{id:"why-you-should-buy-a-commercial-license",children:"Why you should buy a Commercial License"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"You want to save years and tens of millions of dollars developing the same functionality yourself."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"You want all of the Enterprise functionality of COSMOS Enterprise Edition"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"User Accounts"}),"\n",(0,o.jsx)(n.li,{children:"Role Based Access Control"}),"\n",(0,o.jsx)(n.li,{children:"LDAP Support"}),"\n",(0,o.jsx)(n.li,{children:"Kubernetes Support"}),"\n",(0,o.jsx)(n.li,{children:"Cloud Deployment Configurations"}),"\n",(0,o.jsx)(n.li,{children:"The right to use CFDP and other Enterprise Only plugins"}),"\n",(0,o.jsx)(n.li,{children:"Grafana Support"}),"\n",(0,o.jsx)(n.li,{children:"Support from the COSMOS Developers"}),"\n",(0,o.jsxs)(n.li,{children:["Lots more - See our ",(0,o.jsx)(n.a,{href:"https://openc3.com/enterprise",children:"Enterprise"})," page"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"You don't want to follow the AGPLv3"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"You want to keep the code and plugins you develop proprietary"}),"\n",(0,o.jsx)(n.li,{children:"You don't want to publish an accessible link to your source code"}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"You want to support the continued development and innovation of the COSMOS product"}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:(0,o.jsx)(n.em,{children:"We appreciate all of our commercial customers. You make OpenC3 possible. Thank you."})})}),"\n",(0,o.jsx)(n.h2,{id:"faqs",children:"FAQs"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"I see both Ball Aerospace & Technologies Corp as well as OpenC3, Inc in the copyright headers. What does this mean?"}),"\n",(0,o.jsx)(n.p,{children:"OpenC3, Inc has an intellectual property agreement with BAE (formerly Ball Aerospace & Technologies Corp) which gives us the rights to commercialize the original work that we built at Ball Aerospace. Customers only need to purchase a commercial license from OpenC3."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"What are the limits of the COSMOS Enterprise Edition? How many users can we have? How many times can it be installed?"}),"\n",(0,o.jsx)(n.p,{children:"The COSMOS Enterprise Edition license has no user or installation limits."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"How is the COSMOS Enterprise Edition license enforced?"}),"\n",(0,o.jsx)(n.p,{children:"The COSMOS Enterprise Edition license is enforced through contract only without license managers or additional software controls."}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"How is the COSMOS Enterprise Edition license applied? Per company? Per program?"}),"\n",(0,o.jsxs)(n.p,{children:["COSMOS Enterprise Edition is typically licensed to a named mission or group. We also have site licenses, company licenses, and mission ops center licenses. Please contact us at ",(0,o.jsx)(n.a,{href:"mailto:sales@openc3.com",children:"sales@openc3.com"})," for more information."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"Do you license to foreign companies? How do you handle ITAR or the EAR?"}),"\n",(0,o.jsxs)(n.p,{children:["We have several international customers and are not subject to ITAR export controls. We are export controlled under the EAR via ECCN 5D002c1. We have a detailed writeup explaining this justification as well as a commodity classification document from the Department of Commerce. Please contact us at ",(0,o.jsx)(n.a,{href:"mailto:sales@openc3.com",children:"sales@openc3.com"})," for more information."]}),"\n"]}),"\n"]})]})}function d(e={}){let{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},2840:function(e,n,s){s.d(n,{Z:function(){return r},a:function(){return l}});var i=s(2784);let o={},t=i.createContext(o);function l(e){let n=i.useContext(t);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(o):e.components||o:l(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]);