openc3-cosmos-tool-docs 6.2.1 → 6.3.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 (123) hide show
  1. checksums.yaml +4 -4
  2. data/tools/staticdocs/404.html +1 -1
  3. data/tools/staticdocs/assets/images/horizontalbox-085c91cebe26fdd5f85b467556607dd4631da5bccabd84fb164d1f46e45e60c9.png +0 -0
  4. data/tools/staticdocs/assets/images/verticalbox-75738427d398302986b52afb373acef11abf3a24f60d20b8cca442688054b22b.png +0 -0
  5. data/tools/staticdocs/assets/js/1e02e6a3.12bdc98d.js +1 -0
  6. data/tools/staticdocs/assets/js/2bb7bf90.4a658ce6.js +1 -0
  7. data/tools/staticdocs/assets/js/35398c5c.fcf47881.js +1 -0
  8. data/tools/staticdocs/assets/js/5bc719f6.6d27292c.js +1 -0
  9. data/tools/staticdocs/assets/js/5c6ce5ec.652b922b.js +1 -0
  10. data/tools/staticdocs/assets/js/6b210247.6a77064a.js +1 -0
  11. data/tools/staticdocs/assets/js/6f92e431.6439052e.js +1 -0
  12. data/tools/staticdocs/assets/js/75e64983.324643a8.js +1 -0
  13. data/tools/staticdocs/assets/js/{7f5b2696.72e3b019.js → 7f5b2696.a3dc640e.js} +1 -1
  14. data/tools/staticdocs/assets/js/{9424f0b3.96e6dac4.js → 9424f0b3.3683501c.js} +1 -1
  15. data/tools/staticdocs/assets/js/964eb012.dbc2c206.js +1 -0
  16. data/tools/staticdocs/assets/js/97535711.e595488c.js +1 -0
  17. data/tools/staticdocs/assets/js/99581c43.841b4a2e.js +1 -0
  18. data/tools/staticdocs/assets/js/a9987364.b418f772.js +1 -0
  19. data/tools/staticdocs/assets/js/a9b2dc27.e01c9bb4.js +1 -0
  20. data/tools/staticdocs/assets/js/aa6b6c1b.3aad95fc.js +1 -0
  21. data/tools/staticdocs/assets/js/b062d239.535a2ceb.js +1 -0
  22. data/tools/staticdocs/assets/js/ce89ef36.6b89b0fe.js +1 -0
  23. data/tools/staticdocs/assets/js/{d8ca4191.f5da7c6d.js → d8ca4191.8df86c99.js} +1 -1
  24. data/tools/staticdocs/assets/js/db8fa1d0.f1eed806.js +1 -0
  25. data/tools/staticdocs/assets/js/{main.485b7747.js → main.8d947189.js} +2 -2
  26. data/tools/staticdocs/assets/js/runtime~main.d38c5d36.js +1 -0
  27. data/tools/staticdocs/docs/configuration/accessors.html +1 -1
  28. data/tools/staticdocs/docs/configuration/command.html +1 -1
  29. data/tools/staticdocs/docs/configuration/format.html +1 -1
  30. data/tools/staticdocs/docs/configuration/interfaces.html +1 -1
  31. data/tools/staticdocs/docs/configuration/plugins.html +1 -1
  32. data/tools/staticdocs/docs/configuration/protocols.html +1 -1
  33. data/tools/staticdocs/docs/configuration/ssl-tls.html +1 -1
  34. data/tools/staticdocs/docs/configuration/table.html +1 -1
  35. data/tools/staticdocs/docs/configuration/target.html +1 -1
  36. data/tools/staticdocs/docs/configuration/telemetry-screens.html +5 -5
  37. data/tools/staticdocs/docs/configuration/telemetry.html +1 -1
  38. data/tools/staticdocs/docs/configuration.html +1 -1
  39. data/tools/staticdocs/docs/development/curl.html +1 -1
  40. data/tools/staticdocs/docs/development/developing.html +1 -1
  41. data/tools/staticdocs/docs/development/json-api.html +1 -1
  42. data/tools/staticdocs/docs/development/log-structure.html +1 -1
  43. data/tools/staticdocs/docs/development/roadmap.html +20 -29
  44. data/tools/staticdocs/docs/development/streaming-api.html +88 -2
  45. data/tools/staticdocs/docs/development/testing.html +5 -2
  46. data/tools/staticdocs/docs/development.html +1 -1
  47. data/tools/staticdocs/docs/getting-started/cli.html +47 -0
  48. data/tools/staticdocs/docs/getting-started/generators.html +2 -2
  49. data/tools/staticdocs/docs/getting-started/gettingstarted.html +2 -2
  50. data/tools/staticdocs/docs/getting-started/installation.html +3 -3
  51. data/tools/staticdocs/docs/getting-started/{key_concepts.html → key-concepts.html} +3 -3
  52. data/tools/staticdocs/docs/getting-started/podman.html +2 -2
  53. data/tools/staticdocs/docs/getting-started/requirements.html +2 -2
  54. data/tools/staticdocs/docs/getting-started/upgrading.html +3 -3
  55. data/tools/staticdocs/docs/getting-started.html +1 -1
  56. data/tools/staticdocs/docs/guides/bridges.html +1 -1
  57. data/tools/staticdocs/docs/guides/cfs.html +1 -1
  58. data/tools/staticdocs/docs/guides/custom-widgets.html +2 -2
  59. data/tools/staticdocs/docs/guides/dynamic-packets.html +17 -0
  60. data/tools/staticdocs/docs/guides/{exposing_microservices.html → exposing-microservices.html} +2 -2
  61. data/tools/staticdocs/docs/guides/little-endian-bitfields.html +2 -2
  62. data/tools/staticdocs/docs/guides/local-mode.html +1 -1
  63. data/tools/staticdocs/docs/guides/logging.html +1 -1
  64. data/tools/staticdocs/docs/guides/monitoring.html +1 -1
  65. data/tools/staticdocs/docs/guides/performance.html +1 -1
  66. data/tools/staticdocs/docs/guides/raspberrypi.html +1 -1
  67. data/tools/staticdocs/docs/guides/script-writing.html +1 -1
  68. data/tools/staticdocs/docs/guides/scripting-api.html +33 -3
  69. data/tools/staticdocs/docs/guides.html +1 -1
  70. data/tools/staticdocs/docs/meta/contributing.html +1 -1
  71. data/tools/staticdocs/docs/meta/licenses.html +1 -1
  72. data/tools/staticdocs/docs/meta/philosophy.html +1 -1
  73. data/tools/staticdocs/docs/meta/xtce.html +1 -1
  74. data/tools/staticdocs/docs/meta.html +1 -1
  75. data/tools/staticdocs/docs/privacy.html +1 -1
  76. data/tools/staticdocs/docs/tools/admin.html +1 -1
  77. data/tools/staticdocs/docs/tools/autonomic.html +1 -1
  78. data/tools/staticdocs/docs/tools/bucket-explorer.html +1 -1
  79. data/tools/staticdocs/docs/tools/calendar.html +1 -1
  80. data/tools/staticdocs/docs/tools/cmd-sender.html +1 -1
  81. data/tools/staticdocs/docs/tools/cmd-tlm-server.html +1 -1
  82. data/tools/staticdocs/docs/tools/command_history.html +1 -1
  83. data/tools/staticdocs/docs/tools/data-extractor.html +1 -1
  84. data/tools/staticdocs/docs/tools/data-viewer.html +1 -1
  85. data/tools/staticdocs/docs/tools/handbooks.html +1 -1
  86. data/tools/staticdocs/docs/tools/limits-monitor.html +1 -1
  87. data/tools/staticdocs/docs/tools/packet-viewer.html +1 -1
  88. data/tools/staticdocs/docs/tools/script-runner.html +1 -1
  89. data/tools/staticdocs/docs/tools/table-manager.html +1 -1
  90. data/tools/staticdocs/docs/tools/tlm-grapher.html +1 -1
  91. data/tools/staticdocs/docs/tools/tlm-viewer.html +1 -1
  92. data/tools/staticdocs/docs/tools.html +1 -1
  93. data/tools/staticdocs/docs.html +1 -1
  94. data/tools/staticdocs/img/telemetry_viewer/widgets/horizontalbox.png +0 -0
  95. data/tools/staticdocs/img/telemetry_viewer/widgets/verticalbox.png +0 -0
  96. data/tools/staticdocs/index.html +1 -1
  97. data/tools/staticdocs/lunr-index-1743825503427.json +1 -0
  98. data/tools/staticdocs/lunr-index.json +1 -1
  99. data/tools/staticdocs/markdown-page.html +1 -1
  100. data/tools/staticdocs/search-doc-1743825503427.json +1 -0
  101. data/tools/staticdocs/search-doc.json +1 -1
  102. data/tools/staticdocs/sitemap.xml +1 -1
  103. metadata +33 -32
  104. data/tools/staticdocs/assets/images/horizontalbox-ddf82f64de700286a742a71e0c1adebbc7e9822a0dff41139f41bc476e4fc4ce.png +0 -0
  105. data/tools/staticdocs/assets/images/verticalbox-28fdba6f2c051a499b7f08a1be97edf0297ac9a9ce0dba44f02a7fe1c2616d91.png +0 -0
  106. data/tools/staticdocs/assets/js/1e02e6a3.f477eca7.js +0 -1
  107. data/tools/staticdocs/assets/js/2bb7bf90.4051cf46.js +0 -1
  108. data/tools/staticdocs/assets/js/31436304.a6b2eb4a.js +0 -1
  109. data/tools/staticdocs/assets/js/5bc719f6.b84c55e3.js +0 -1
  110. data/tools/staticdocs/assets/js/5c6ce5ec.67d1d92e.js +0 -1
  111. data/tools/staticdocs/assets/js/6b210247.ef28d4e5.js +0 -1
  112. data/tools/staticdocs/assets/js/6f92e431.d2ce2753.js +0 -1
  113. data/tools/staticdocs/assets/js/75e64983.81988bef.js +0 -1
  114. data/tools/staticdocs/assets/js/97535711.78660098.js +0 -1
  115. data/tools/staticdocs/assets/js/99581c43.5e55992d.js +0 -1
  116. data/tools/staticdocs/assets/js/a9987364.81e9c91d.js +0 -1
  117. data/tools/staticdocs/assets/js/aa6b6c1b.08f58887.js +0 -1
  118. data/tools/staticdocs/assets/js/ce89ef36.1d76e86a.js +0 -1
  119. data/tools/staticdocs/assets/js/db8fa1d0.94b76b52.js +0 -1
  120. data/tools/staticdocs/assets/js/ebec1ccb.f938ebaa.js +0 -1
  121. data/tools/staticdocs/assets/js/runtime~main.61a578da.js +0 -1
  122. data/tools/staticdocs/lunr-index-1741317069195.json +0 -1
  123. 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.3.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"
@@ -109,7 +108,7 @@ files:
109
108
  - tools/staticdocs/assets/images/height-67268e562da2f9b2d0b9adc38d8fb2ba629504b09d798d8c26be9cfbfdad672a.png
110
109
  - tools/staticdocs/assets/images/history-04aebef1a0fdaaacc5042e5b835f850b48ea04f4fe50271d9bb57803b442d6cd.png
111
110
  - tools/staticdocs/assets/images/horizontal-11de51b6fc8baf057ca4f38a7f54a5302b58f30099331c22a074f012e53497aa.png
112
- - tools/staticdocs/assets/images/horizontalbox-ddf82f64de700286a742a71e0c1adebbc7e9822a0dff41139f41bc476e4fc4ce.png
111
+ - tools/staticdocs/assets/images/horizontalbox-085c91cebe26fdd5f85b467556607dd4631da5bccabd84fb164d1f46e45e60c9.png
113
112
  - tools/staticdocs/assets/images/horizontalline-0805762eadcc125ed6584a29a60e7cf8e2d76d13c6243e18eecbaba7a3803128.png
114
113
  - tools/staticdocs/assets/images/iframe-30d5a4104336b84d18ba538d668978a7986679431a7fe1fd0e3179fea08c074f.png
115
114
  - tools/staticdocs/assets/images/ignored-0917bd9f41f4e93704daa45cc0a7b70809bdbba03615d6de254336141b598992.png
@@ -210,7 +209,7 @@ files:
210
209
  - tools/staticdocs/assets/images/valuelimitscolumn-aecfce9016c27e500eb506675bd372f77df1d671fd8fb0f30debe18c5cfee46c.png
211
210
  - tools/staticdocs/assets/images/valuerangebar-3a860f1fb4af1beeeb846c389c60f08eb633cc15cbb6f1c09509b5f5c0116d56.png
212
211
  - tools/staticdocs/assets/images/vertical-d4ea61f78a2cfc2cacc725f0a5dea194ab75278f0cb676e4a749f55d58a632f3.png
213
- - tools/staticdocs/assets/images/verticalbox-28fdba6f2c051a499b7f08a1be97edf0297ac9a9ce0dba44f02a7fe1c2616d91.png
212
+ - tools/staticdocs/assets/images/verticalbox-75738427d398302986b52afb373acef11abf3a24f60d20b8cca442688054b22b.png
214
213
  - tools/staticdocs/assets/images/view_menu-a02cfbd5e6fafa5d3b4f1ae76bfbd63f49388939b4732bf91709f48e44498d19.png
215
214
  - tools/staticdocs/assets/images/width-1a69354459761ea23e4824436ef364124236f9bb96d46a28c97d8ff20d07ab81.png
216
215
  - tools/staticdocs/assets/js/019369f3.43fd7635.js
@@ -222,12 +221,12 @@ files:
222
221
  - tools/staticdocs/assets/js/103cc3be.e7943c80.js
223
222
  - tools/staticdocs/assets/js/13196248.ea83002e.js
224
223
  - tools/staticdocs/assets/js/13c1b4e4.eb5250f4.js
225
- - tools/staticdocs/assets/js/1e02e6a3.f477eca7.js
224
+ - tools/staticdocs/assets/js/1e02e6a3.12bdc98d.js
226
225
  - tools/staticdocs/assets/js/2047b354.d91f6c3e.js
227
226
  - tools/staticdocs/assets/js/22b3ac48.0df9587b.js
228
227
  - tools/staticdocs/assets/js/26b8abb2.7f8d4cb0.js
229
- - tools/staticdocs/assets/js/2bb7bf90.4051cf46.js
230
- - tools/staticdocs/assets/js/31436304.a6b2eb4a.js
228
+ - tools/staticdocs/assets/js/2bb7bf90.4a658ce6.js
229
+ - tools/staticdocs/assets/js/35398c5c.fcf47881.js
231
230
  - tools/staticdocs/assets/js/3969.afdd070b.js
232
231
  - tools/staticdocs/assets/js/3dd7ef3b.c3455b97.js
233
232
  - tools/staticdocs/assets/js/40365d27.5ed2e9b5.js
@@ -240,8 +239,8 @@ files:
240
239
  - tools/staticdocs/assets/js/54d0d530.ef91ba12.js
241
240
  - tools/staticdocs/assets/js/5761.e7fabbc9.js
242
241
  - tools/staticdocs/assets/js/5b233ba7.2ea0179c.js
243
- - tools/staticdocs/assets/js/5bc719f6.b84c55e3.js
244
- - tools/staticdocs/assets/js/5c6ce5ec.67d1d92e.js
242
+ - tools/staticdocs/assets/js/5bc719f6.6d27292c.js
243
+ - tools/staticdocs/assets/js/5c6ce5ec.652b922b.js
245
244
  - tools/staticdocs/assets/js/5e3ed378.8b51f7c0.js
246
245
  - tools/staticdocs/assets/js/5fe211ef.63b46202.js
247
246
  - tools/staticdocs/assets/js/62df909c.dd5f3a0c.js
@@ -249,26 +248,29 @@ files:
249
248
  - tools/staticdocs/assets/js/651.a043d7b1.js
250
249
  - tools/staticdocs/assets/js/6831b732.0a867cbc.js
251
250
  - tools/staticdocs/assets/js/696b4199.2a7ff897.js
252
- - tools/staticdocs/assets/js/6b210247.ef28d4e5.js
251
+ - tools/staticdocs/assets/js/6b210247.6a77064a.js
253
252
  - tools/staticdocs/assets/js/6b65133b.0376a397.js
254
- - tools/staticdocs/assets/js/6f92e431.d2ce2753.js
253
+ - tools/staticdocs/assets/js/6f92e431.6439052e.js
255
254
  - tools/staticdocs/assets/js/72c6d8a8.b6fcfc30.js
256
255
  - tools/staticdocs/assets/js/75897369.522ccdd7.js
257
- - tools/staticdocs/assets/js/75e64983.81988bef.js
258
- - tools/staticdocs/assets/js/7f5b2696.72e3b019.js
256
+ - tools/staticdocs/assets/js/75e64983.324643a8.js
257
+ - tools/staticdocs/assets/js/7f5b2696.a3dc640e.js
259
258
  - tools/staticdocs/assets/js/80c97f38.607160d3.js
260
259
  - tools/staticdocs/assets/js/867640d5.2c0fa6d9.js
261
260
  - tools/staticdocs/assets/js/89e76475.a76d0072.js
262
261
  - tools/staticdocs/assets/js/8f7843ee.abe30983.js
263
262
  - 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
263
+ - tools/staticdocs/assets/js/9424f0b3.3683501c.js
264
+ - tools/staticdocs/assets/js/964eb012.dbc2c206.js
265
+ - tools/staticdocs/assets/js/97535711.e595488c.js
266
+ - tools/staticdocs/assets/js/99581c43.841b4a2e.js
267
267
  - tools/staticdocs/assets/js/9d6e81d0.44e2d544.js
268
268
  - tools/staticdocs/assets/js/9fb6059a.821f7504.js
269
269
  - tools/staticdocs/assets/js/a677c089.18f98b70.js
270
- - tools/staticdocs/assets/js/a9987364.81e9c91d.js
271
- - tools/staticdocs/assets/js/aa6b6c1b.08f58887.js
270
+ - tools/staticdocs/assets/js/a9987364.b418f772.js
271
+ - tools/staticdocs/assets/js/a9b2dc27.e01c9bb4.js
272
+ - tools/staticdocs/assets/js/aa6b6c1b.3aad95fc.js
273
+ - tools/staticdocs/assets/js/b062d239.535a2ceb.js
272
274
  - tools/staticdocs/assets/js/b4596165.c648533a.js
273
275
  - tools/staticdocs/assets/js/b6d70f94.7813125e.js
274
276
  - tools/staticdocs/assets/js/b9f60ba6.4c0bb1dd.js
@@ -278,25 +280,24 @@ files:
278
280
  - tools/staticdocs/assets/js/c5388ca4.32f8f561.js
279
281
  - tools/staticdocs/assets/js/cb8c3f08.07d1c9e9.js
280
282
  - tools/staticdocs/assets/js/cd879be4.59af1749.js
281
- - tools/staticdocs/assets/js/ce89ef36.1d76e86a.js
283
+ - tools/staticdocs/assets/js/ce89ef36.6b89b0fe.js
282
284
  - tools/staticdocs/assets/js/d1b923aa.a73e7e79.js
283
285
  - tools/staticdocs/assets/js/d1bfc316.a58b9bbd.js
284
286
  - tools/staticdocs/assets/js/d24bf9b6.9fef8263.js
285
287
  - tools/staticdocs/assets/js/d57a4b5d.c74b62b1.js
286
288
  - tools/staticdocs/assets/js/d5d77c37.e812e6e7.js
287
289
  - tools/staticdocs/assets/js/d66bf9c0.842d2efa.js
288
- - tools/staticdocs/assets/js/d8ca4191.f5da7c6d.js
290
+ - tools/staticdocs/assets/js/d8ca4191.8df86c99.js
289
291
  - tools/staticdocs/assets/js/d9b92eba.34e63ba6.js
290
- - tools/staticdocs/assets/js/db8fa1d0.94b76b52.js
292
+ - tools/staticdocs/assets/js/db8fa1d0.f1eed806.js
291
293
  - tools/staticdocs/assets/js/dbe31111.75e9fc53.js
292
294
  - tools/staticdocs/assets/js/dc5f7beb.9e4e6681.js
293
295
  - tools/staticdocs/assets/js/dfbae5fd.3959d626.js
294
296
  - tools/staticdocs/assets/js/e501b0d1.d3a1e4bc.js
295
- - tools/staticdocs/assets/js/ebec1ccb.f938ebaa.js
296
297
  - tools/staticdocs/assets/js/f15615f1.49804e96.js
297
298
  - tools/staticdocs/assets/js/fd886806.124ffe26.js
298
- - tools/staticdocs/assets/js/main.485b7747.js
299
- - tools/staticdocs/assets/js/runtime~main.61a578da.js
299
+ - tools/staticdocs/assets/js/main.8d947189.js
300
+ - tools/staticdocs/assets/js/runtime~main.d38c5d36.js
300
301
  - tools/staticdocs/docs.html
301
302
  - tools/staticdocs/docs/configuration.html
302
303
  - tools/staticdocs/docs/configuration/accessors.html
@@ -319,10 +320,11 @@ files:
319
320
  - tools/staticdocs/docs/development/streaming-api.html
320
321
  - tools/staticdocs/docs/development/testing.html
321
322
  - tools/staticdocs/docs/getting-started.html
323
+ - tools/staticdocs/docs/getting-started/cli.html
322
324
  - tools/staticdocs/docs/getting-started/generators.html
323
325
  - tools/staticdocs/docs/getting-started/gettingstarted.html
324
326
  - tools/staticdocs/docs/getting-started/installation.html
325
- - tools/staticdocs/docs/getting-started/key_concepts.html
327
+ - tools/staticdocs/docs/getting-started/key-concepts.html
326
328
  - tools/staticdocs/docs/getting-started/podman.html
327
329
  - tools/staticdocs/docs/getting-started/requirements.html
328
330
  - tools/staticdocs/docs/getting-started/upgrading.html
@@ -330,7 +332,8 @@ files:
330
332
  - tools/staticdocs/docs/guides/bridges.html
331
333
  - tools/staticdocs/docs/guides/cfs.html
332
334
  - tools/staticdocs/docs/guides/custom-widgets.html
333
- - tools/staticdocs/docs/guides/exposing_microservices.html
335
+ - tools/staticdocs/docs/guides/dynamic-packets.html
336
+ - tools/staticdocs/docs/guides/exposing-microservices.html
334
337
  - tools/staticdocs/docs/guides/little-endian-bitfields.html
335
338
  - tools/staticdocs/docs/guides/local-mode.html
336
339
  - tools/staticdocs/docs/guides/logging.html
@@ -627,10 +630,10 @@ files:
627
630
  - tools/staticdocs/img/telemetry_viewer/widgets/verticalbox.png
628
631
  - tools/staticdocs/img/telemetry_viewer/widgets/width.png
629
632
  - tools/staticdocs/index.html
630
- - tools/staticdocs/lunr-index-1741317069195.json
633
+ - tools/staticdocs/lunr-index-1743825503427.json
631
634
  - tools/staticdocs/lunr-index.json
632
635
  - tools/staticdocs/markdown-page.html
633
- - tools/staticdocs/search-doc-1741317069195.json
636
+ - tools/staticdocs/search-doc-1743825503427.json
634
637
  - tools/staticdocs/search-doc.json
635
638
  - tools/staticdocs/sitemap.xml
636
639
  homepage: https://github.com/OpenC3/cosmos
@@ -638,7 +641,6 @@ licenses:
638
641
  - AGPL-3.0-only
639
642
  - Nonstandard
640
643
  metadata: {}
641
- post_install_message:
642
644
  rdoc_options: []
643
645
  require_paths:
644
646
  - lib
@@ -653,8 +655,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
653
655
  - !ruby/object:Gem::Version
654
656
  version: '0'
655
657
  requirements: []
656
- rubygems_version: 3.3.14
657
- signing_key:
658
+ rubygems_version: 3.6.7
658
659
  specification_version: 4
659
660
  summary: OpenC3 COSMOS Documentation
660
661
  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([["659"],{2781:function(e,n,o){o.r(n),o.d(n,{default:()=>h,frontMatter:()=>a,metadata:()=>s,assets:()=>c,toc:()=>l,contentTitle:()=>r});var s=JSON.parse('{"id":"getting-started/podman","title":"Podman","description":"Installing and running COSMOS with Podman","source":"@site/docs/getting-started/podman.md","sourceDirName":"getting-started","slug":"/getting-started/podman","permalink":"/tools/staticdocs/docs/getting-started/podman","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/getting-started/podman.md","tags":[],"version":"current","sidebarPosition":7,"frontMatter":{"sidebar_position":7,"title":"Podman","description":"Installing and running COSMOS with Podman","sidebar_custom_props":{"myEmoji":"\uD83E\uDEDB"}},"sidebar":"defaultSidebar","previous":{"title":"Requirements and Design","permalink":"/tools/staticdocs/docs/getting-started/requirements"},"next":{"title":"Configuration","permalink":"/tools/staticdocs/docs/configuration"}}'),t=o("2322"),i=o("2840");let a={sidebar_position:7,title:"Podman",description:"Installing and running COSMOS with Podman",sidebar_custom_props:{myEmoji:"\uD83E\uDEDB"}},r=void 0,c={},l=[{value:"OpenC3 COSMOS Using Rootless Podman and Docker-Compose",id:"openc3-cosmos-using-rootless-podman-and-docker-compose",level:3},{value:"MacOS Instructions",id:"macos-instructions",level:2}];function d(e){let n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h3,{id:"openc3-cosmos-using-rootless-podman-and-docker-compose",children:"OpenC3 COSMOS Using Rootless Podman and Docker-Compose"}),"\n",(0,t.jsx)(n.admonition,{title:"Optional Installation Option",type:"info",children:(0,t.jsx)(n.p,{children:"These directions are for installing and running COSMOS using Podman instead of Docker. If you have Docker available, that is a simpler method."})}),"\n",(0,t.jsx)(n.p,{children:"Podman is an alternative container technology to Docker that is actively promoted by RedHat. The key benefit is that Podman can run without a root-level daemon service, making it significantly more secure by design, over standard Docker. However, it is a little more complicated to use. These directions will get you up and running with Podman. The following directions have been tested against RHEL 8.8, and RHEL 9.2, but should be similar on other operating systems."}),"\n",(0,t.jsx)(n.admonition,{title:"Rootless Podman Does Not Work (Directly) with NFS Home Directories",type:"warning",children:(0,t.jsxs)(n.p,{children:["NFS does not work for holding container storage due to issues with user ids and group ids. There are workarounds available but they all involve moving container storage to another location: either a different partition on the host local disk, or into a special mounted disk image. See: [",(0,t.jsx)(n.a,{href:"https://www.redhat.com/sysadmin/rootless-podman-nfs",children:"https://www.redhat.com/sysadmin/rootless-podman-nfs"}),"]",(0,t.jsx)(n.a,{href:"https://www.redhat.com/sysadmin/rootless-podman-nfs",children:"https://www.redhat.com/sysadmin/rootless-podman-nfs"}),"). Note that there is also a newish Podman setting that allows you to more easily change where the storage location is in /etc/containers/storage.conf called rootless_storage_path. See ",(0,t.jsx)(n.a,{href:"https://www.redhat.com/sysadmin/nfs-rootless-podman",children:"https://www.redhat.com/sysadmin/nfs-rootless-podman"})]})}),"\n",(0,t.jsx)(n.h1,{id:"redhat-88-and-92-instructions",children:"Redhat 8.8 and 9.2 Instructions"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Install Prerequisite Packages"}),"\n",(0,t.jsx)(n.p,{children:"Note: This downloads and installs docker-compose from the latest 2.x release on Github. If your operating system has a docker-compose package, it will be easier to install using that instead. RHEL8 does not have a docker-compose package."}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo yum update\nsudo yum install git podman-docker netavark\ncurl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o docker-compose\nsudo mv docker-compose /usr/local/bin/docker-compose\nsudo chmod +x /usr/local/bin/docker-compose\nsudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Configure Host OS for Redis"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo su\necho never > /sys/kernel/mm/transparent_hugepage/enabled\necho never > /sys/kernel/mm/transparent_hugepage/defrag\nsysctl -w vm.max_map_count=262144\nexit\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Configure Podman to use Netavark for DNS"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo cp /usr/share/containers/containers.conf /etc/containers/.\nsudo vi /etc/containers/containers.conf\n"})}),"\n",(0,t.jsx)(n.p,{children:'Then edit the network_backend line to be "netavark" instead of "cni"'}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Start rootless podman socket service"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"systemctl enable --now --user podman.socket\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Put the following into your .bashrc file (or .bash_profile or whatever)"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:'export DOCKER_HOST="unix://$XDG_RUNTIME_DIR/podman/podman.sock"\n'})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Source the profile file for your current terminal"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"source .bashrc\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Get COSMOS - A release or the current main branch (main branch shown)"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"git clone https://github.com/OpenC3/cosmos.git\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Optional - Set Default Container Registry"}),"\n",(0,t.jsx)(n.p,{children:"If you don't want podman to keep querying you for which registry to use, you can create a $HOME/.config/containers/registries.conf and modify to just have the main docker registry (or modify the /etc/containers/registries.conf file directly)"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"mkdir -p $HOME/.config/containers\ncp /etc/containers/registries.conf $HOME/.config/containers/.\nvi $HOME/.config/containers/registries.conf\n"})}),"\n",(0,t.jsx)(n.p,{children:"Then edit the unqualified-search-registries = line to just have the registry you care about (probably docker.io)"}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Edit cosmos/compose.yaml"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd cosmos\nvi compose.yaml\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Edit compose.yaml and uncomment the user: 0:0 lines and comment the user: ",(0,t.jsx)(n.code,{children:'"${OPENC3_USER_ID}:${OPENC3_GROUP_ID}"'})," lines.\nYou may also want to update the traefik configuration to allow access from the internet by removing 127.0.0.1 and probably switching to either an SSL config file, or the allow http one. Also make sure your firewall allows\nwhatever port you choose to use in. Rootless podman will need to use a higher numbered port (not 1-1023)."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Run COSMOS"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"./openc3.sh run\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Wait until everything is built and running and then goto ",(0,t.jsx)(n.a,{href:"http://localhost:2900",children:"http://localhost:2900"})," in your browser"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Podman on MacOS",type:"info",children:(0,t.jsx)(n.p,{children:"Podman can also be used on MacOS, though we still generally recommend Docker Desktop"})}),"\n",(0,t.jsx)(n.h2,{id:"macos-instructions",children:"MacOS Instructions"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Install podman"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"brew install podman\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Start the podman virtual machine"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"podman machine init\npodman machine start\n# Note: update to your username in the next line or copy paste from what 'podman machine start' says\nexport DOCKER_HOST='unix:///Users/ryanmelt/.local/share/containers/podman/machine/qemu/podman.sock'\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Install docker-compose"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"brew install docker-compose # Optional if you already have Docker Desktop\n"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Edit cosmos/compose.yaml"}),"\n",(0,t.jsxs)(n.p,{children:["Edit compose.yaml and uncomment the user: 0:0 lines and comment the user: ",(0,t.jsx)(n.code,{children:'"${OPENC3_USER_ID}:${OPENC3_GROUP_ID}"'})," lines."]}),"\n",(0,t.jsxs)(n.p,{children:["Important: on MacOS you must also remove all ",":z"," from the volume mount lines"]}),"\n",(0,t.jsx)(n.p,{children:"You may also want to update the traefik configuration to allow access from the internet."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Run COSMOS"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"cd cosmos\n./openc3.sh run\n"})}),"\n"]}),"\n"]})]})}function h(e={}){let{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},2840:function(e,n,o){o.d(n,{Z:function(){return r},a:function(){return a}});var s=o(2784);let t={},i=s.createContext(t);function a(e){let n=s.useContext(i);return s.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(t):e.components||t:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkdocs_openc3_com=self.webpackChunkdocs_openc3_com||[]).push([["7258"],{4407:function(e,t,n){n.r(t),n.d(t,{default:()=>p,frontMatter:()=>o,metadata:()=>a,assets:()=>c,toc:()=>d,contentTitle:()=>r});var a=JSON.parse('{"id":"development/streaming-api","title":"Streaming API","description":"Using the websocket streaming API to retrieve data","source":"@site/docs/development/streaming-api.md","sourceDirName":"development","slug":"/development/streaming-api","permalink":"/tools/staticdocs/docs/development/streaming-api","draft":false,"unlisted":false,"editUrl":"https://github.com/OpenC3/cosmos/tree/main/docs.openc3.com/docs/development/streaming-api.md","tags":[],"version":"current","frontMatter":{"title":"Streaming API","description":"Using the websocket streaming API to retrieve data","sidebar_custom_props":{"myEmoji":"\uD83D\uDCDD"}},"sidebar":"defaultSidebar","previous":{"title":"Roadmap","permalink":"/tools/staticdocs/docs/development/roadmap"},"next":{"title":"Testing COSMOS","permalink":"/tools/staticdocs/docs/development/testing"}}'),i=n("2322"),s=n("2840");let o={title:"Streaming API",description:"Using the websocket streaming API to retrieve data",sidebar_custom_props:{myEmoji:"\uD83D\uDCDD"}},r=void 0,c={},d=[];function l(e){let t={admonition:"admonition",code:"code",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.admonition,{title:"This documentation is for COSMOS Developers",type:"note",children:(0,i.jsx)(t.p,{children:"This information is just generally used behind the scenes in COSMOS tools"})}),"\n",(0,i.jsx)(t.p,{children:"The COSMOS 5 Streaming Api is the primary interface to receive a stream of the telemetry packets and/or command packets that have passed through the COSMOS system, both logged and continuously in realtime. Either raw binary packets or decommutated JSON packets can be requested."}),"\n",(0,i.jsx)(t.p,{children:"This API is implemented over Websockets using the Rails ActionCable framework. Actioncable client libraries are known to exist for at least Javascript, Ruby, and Python. Other languages may exist or could be created. Websockets allow for easy interaction with the new COSMOS 5 Javascript based frontend."}),"\n",(0,i.jsx)(t.p,{children:"The following interactions are all shown in Javascript, but would be very similar in any language.\nConnecting to this API begins by initiating an ActionCable connection."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{children:"cable = ActionCable.createConsumer('/openc3-api/cable')\n"})}),"\n",(0,i.jsx)(t.p,{children:"This call opens the HTTP connection to the given URL and upgrades it to a websocket connection. This connection can then be shared with multiple \u201Csubscriptions\u201D."}),"\n",(0,i.jsx)(t.p,{children:"A subscription describes a set of data that you want the API to stream to you. Creating a subscription looks like this:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-javascript",children:'subscription = cable.subscriptions.create(\n {\n channel: "StreamingChannel",\n scope: "DEFAULT",\n token: token,\n },\n {\n received: (data) => {\n // Handle received data\n },\n connected: () => {\n // First chance to add what you want to stream here\n },\n disconnected: () => {\n // Handle the subscription being disconnected\n },\n rejected: () => {\n // Handle the subscription being rejected\n },\n }\n);\n'})}),"\n",(0,i.jsxs)(t.p,{children:["Subscribing to the StreamingApi requires passing a channel name set to \u201CStreamingChannel\u201D, a scope which is typically \u201CDEFAULT\u201D, and an access token (a password in OpenSource COSMOS). In Javascript you also pass a set of callback functions that run at various lifecycle points in the subscription. The most important of these are ",(0,i.jsx)(t.code,{children:"connected"})," and ",(0,i.jsx)(t.code,{children:"received"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.code,{children:"connected"})," runs when the subscription is accepted by the StreamApi. This callback is the first opportunity to request specific data that you would like streamed. Data can also be added or removed at any time while the subscription is open."]}),"\n",(0,i.jsx)(t.p,{children:"Data can be added to the stream by requesting individual items from a packet or by requesting the entire packet."}),"\n",(0,i.jsx)(t.p,{children:"Adding items to stream is done as follows:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-javascript",children:'var items = [\n ["DECOM__TLM__INST__ADCS__Q1__RAW", "0"],\n ["DECOM__CMD__INST__COLLECT__DURATION__WITH_UNITS", "1"],\n];\nOpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(() => {\n this.subscription.perform("add", {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n items: items,\n start_time: this.startDateTime,\n end_time: this.endDateTime,\n });\n});\n'})}),"\n",(0,i.jsxs)(t.p,{children:["The values in the item name are separated by double underscores, e.g. ",(0,i.jsx)(t.code,{children:"<MODE>__<CMD or TLM>__<TARGET NAME>__<PACKET NAME>__<ITEM NAME>__<VALUE TYPE>__<REDUCED TYPE>"}),". Mode is either RAW, DECOM, REDUCED_MINUTE, REDUCED_HOUR, or REDUCED_DAY. The next parameter is CMD or TLM followed by the target, packet and item names. The Value Type is one of RAW, CONVERTED, FORMATTED, or WITH_UNITS. The last parameter is optional if you want to use the reduced data types. Reduced Type is one of SAMPLE, MIN, MAX, AVG, or STDDEV."]}),"\n",(0,i.jsx)(t.p,{children:"Adding packets to stream is done as follows:"}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-javascript",children:'var packets = [\n ["RAW__TLM__INST__ADCS", "0"],\n ["DECOM__TLM__INST__HEALTH_STATUS__FORMATTED", "1"],\n];\nOpenC3Auth.updateToken(OpenC3Auth.defaultMinValidity).then(() => {\n this.subscription.perform("add", {\n scope: window.openc3Scope,\n token: localStorage.openc3Token,\n packets: packets,\n start_time: this.startDateTime,\n end_time: this.endDateTime,\n });\n});\n'})}),"\n",(0,i.jsxs)(t.p,{children:["The values in the packet name are separated by double underscores, e.g. ",(0,i.jsx)(t.code,{children:"<MODE>__<CMD or TLM>__<TARGET NAME>__<PACKET NAME>__<VALUE TYPE>"}),". Mode is either RAW or DECOM. The next parameter is CMD or TLM followed by the target and packet names. The Value Type is one of RAW, CONVERTED, FORMATTED, or WITH_UNITS."]}),"\n",(0,i.jsx)(t.p,{children:"For Raw mode, VALUE TYPE should be set to RAW or omitted (e.g. TLM__INST__ADCS__RAW or TLM__INST__ADCS).\nstart_time and end_time are standard COSMOS 64-bit integer timestamps in nanoseconds since the Unix Epoch (midnight January 1st, 1970). If start_time is null, that indicates to start streaming from the current time in realtime, indefinitely until items are removed, or the subscription is unsubscribed. end_time is ignored if start_time is null. If start_time is given and end_time is null, that indicates to playback from the given starttime and then continue indefinitely in realtime. If both start_time and end_time are given, then that indicates a temporary playback of historical data."}),"\n",(0,i.jsx)(t.p,{children:"Data returned by the streaming API is handled by the received callback in Javascript. Data is returned as a JSON Array, with a JSON object in the array for each packet returned. Results are batched, and the current implementation will return up to 100 packets in each batch (the array will have 100 entries). 100 packets per batch is not guaranteed, and batches may take on varying sizes based on the size of the data returned, or other factors. An empty array indicates that all data has been sent for a purely historical query and can be used as an end of data indicator."}),"\n",(0,i.jsx)(t.p,{children:"For decommutated items, each packet is represented as a JSON object with a 'time' field holding the COSMOS nanosecond timestamp of the packet, and then each of the requested item keys with their corresponding value from the packet."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'[\n {\n "time": 1234657585858,\n "TLM__INST__ADCS__Q1__RAW": 50.0,\n "TLM__INST__ADCS__Q2__RAW": 100.0\n },\n {\n "time": 1234657585859,\n "TLM__INST__ADCS__Q1__RAW": 60.0,\n "TLM__INST__ADCS__Q2__RAW": 110.0\n }\n]\n'})}),"\n",(0,i.jsx)(t.p,{children:"For raw packets, each packet is represented as a JSON object with a time field holding the COSMOS nanosecond timestamp of the packet, a packet field holding the topic the packet was read from in the form of SCOPE__TELEMETRY__TARGETNAME__PACKETNAME, and a buffer field holding a BASE64 encoded copy of the packet data."}),"\n",(0,i.jsx)(t.pre,{children:(0,i.jsx)(t.code,{className:"language-json",children:'[\n {\n "time": 1234657585858,\n "packet": "DEFAULT__TELEMETRY__INST__ADCS",\n "buffer": "SkdfjGodkdfjdfoekfsg"\n },\n {\n "time": 1234657585859,\n "packet": "DEFAULT__TELEMETRY__INST__ADCS",\n "buffer": "3i5n49dmnfg9fl32k3"\n }\n]\n'})})]})}function p(e={}){let{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},2840:function(e,t,n){n.d(t,{Z:function(){return r},a:function(){return o}});var a=n(2784);let i={},s=a.createContext(i);function o(e){let t=a.useContext(s);return a.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]);