openc3 7.3.0 → 7.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Guardfile +0 -0
  4. data/LICENSE.md +0 -0
  5. data/README.md +0 -0
  6. data/Rakefile +0 -0
  7. data/bin/openc3cli +138 -0
  8. data/bin/pipuninstall +0 -0
  9. data/bin/uvinstall +10 -3
  10. data/data/config/_array_params.yaml +0 -0
  11. data/data/config/_canvas_values.yaml +0 -0
  12. data/data/config/_graph_params.yaml +0 -0
  13. data/data/config/_id_items.yaml +0 -0
  14. data/data/config/_id_params.yaml +0 -0
  15. data/data/config/_interfaces.yaml +0 -0
  16. data/data/config/_items.yaml +0 -0
  17. data/data/config/_params.yaml +0 -0
  18. data/data/config/command.yaml +0 -0
  19. data/data/config/command_modifiers.yaml +2 -0
  20. data/data/config/command_telemetry.yaml +0 -0
  21. data/data/config/conversions.yaml +0 -0
  22. data/data/config/graph_settings.yaml +0 -0
  23. data/data/config/interface_modifiers.yaml +103 -1
  24. data/data/config/item_modifiers.yaml +0 -0
  25. data/data/config/microservice.yaml +5 -2
  26. data/data/config/param_item_modifiers.yaml +0 -0
  27. data/data/config/parameter_modifiers.yaml +0 -0
  28. data/data/config/plugins.yaml +0 -0
  29. data/data/config/processors.yaml +0 -0
  30. data/data/config/protocols.yaml +0 -0
  31. data/data/config/screen.yaml +0 -0
  32. data/data/config/settings.yaml +0 -0
  33. data/data/config/table_manager.yaml +0 -0
  34. data/data/config/table_parameter_modifiers.yaml +0 -0
  35. data/data/config/target.yaml +0 -0
  36. data/data/config/target_config.yaml +0 -0
  37. data/data/config/telemetry.yaml +0 -0
  38. data/data/config/telemetry_modifiers.yaml +2 -0
  39. data/data/config/tool.yaml +0 -0
  40. data/data/config/unknown.yaml +0 -0
  41. data/data/config/widgets.yaml +6 -0
  42. data/data/xtce_schemas/SpaceSystem_20180204.xsd +0 -0
  43. data/data/xtce_schemas/xml.xsd +0 -0
  44. data/ext/openc3/ext/array/array.c +0 -0
  45. data/ext/openc3/ext/array/extconf.rb +0 -0
  46. data/ext/openc3/ext/buffered_file/buffered_file.c +0 -0
  47. data/ext/openc3/ext/buffered_file/extconf.rb +0 -0
  48. data/ext/openc3/ext/burst_protocol/burst_protocol.c +6 -0
  49. data/ext/openc3/ext/burst_protocol/extconf.rb +0 -0
  50. data/ext/openc3/ext/config_parser/config_parser.c +0 -0
  51. data/ext/openc3/ext/config_parser/extconf.rb +0 -0
  52. data/ext/openc3/ext/crc/crc.c +0 -0
  53. data/ext/openc3/ext/crc/extconf.rb +0 -0
  54. data/ext/openc3/ext/openc3_io/extconf.rb +0 -0
  55. data/ext/openc3/ext/openc3_io/openc3_io.c +0 -0
  56. data/ext/openc3/ext/packet/extconf.rb +0 -0
  57. data/ext/openc3/ext/packet/packet.c +0 -0
  58. data/ext/openc3/ext/platform/extconf.rb +0 -0
  59. data/ext/openc3/ext/platform/platform.c +4 -1
  60. data/ext/openc3/ext/polynomial_conversion/extconf.rb +0 -0
  61. data/ext/openc3/ext/polynomial_conversion/polynomial_conversion.c +0 -0
  62. data/ext/openc3/ext/string/extconf.rb +0 -0
  63. data/ext/openc3/ext/string/string.c +0 -0
  64. data/ext/openc3/ext/structure/structure.c +49 -17
  65. data/ext/openc3/ext/tabbed_plots_config/extconf.rb +0 -0
  66. data/ext/openc3/ext/tabbed_plots_config/tabbed_plots_config.c +0 -0
  67. data/ext/openc3/ext/telemetry/extconf.rb +0 -0
  68. data/ext/openc3/ext/telemetry/telemetry.c +0 -0
  69. data/lib/cosmos.rb +0 -0
  70. data/lib/cosmosc2.rb +0 -0
  71. data/lib/openc3/accessors/accessor.rb +0 -0
  72. data/lib/openc3/accessors/binary_accessor.rb +63 -9
  73. data/lib/openc3/accessors/cbor_accessor.rb +0 -0
  74. data/lib/openc3/accessors/form_accessor.rb +0 -0
  75. data/lib/openc3/accessors/html_accessor.rb +0 -0
  76. data/lib/openc3/accessors/http_accessor.rb +0 -0
  77. data/lib/openc3/accessors/json_accessor.rb +0 -0
  78. data/lib/openc3/accessors/template_accessor.rb +0 -0
  79. data/lib/openc3/accessors/xml_accessor.rb +0 -0
  80. data/lib/openc3/accessors.rb +0 -0
  81. data/lib/openc3/api/README.md +0 -0
  82. data/lib/openc3/api/api.rb +0 -0
  83. data/lib/openc3/api/authorized_api.rb +0 -0
  84. data/lib/openc3/api/calendar_api.rb +0 -0
  85. data/lib/openc3/api/cmd_api.rb +1 -1
  86. data/lib/openc3/api/config_api.rb +0 -0
  87. data/lib/openc3/api/interface_api.rb +0 -0
  88. data/lib/openc3/api/limits_api.rb +0 -0
  89. data/lib/openc3/api/metrics_api.rb +1 -1
  90. data/lib/openc3/api/offline_access_api.rb +1 -1
  91. data/lib/openc3/api/router_api.rb +0 -0
  92. data/lib/openc3/api/settings_api.rb +22 -18
  93. data/lib/openc3/api/stash_api.rb +1 -1
  94. data/lib/openc3/api/target_api.rb +0 -0
  95. data/lib/openc3/api/tlm_api.rb +4 -3
  96. data/lib/openc3/bridge/bridge.rb +0 -0
  97. data/lib/openc3/bridge/bridge_config.rb +0 -0
  98. data/lib/openc3/bridge/bridge_interface_thread.rb +0 -0
  99. data/lib/openc3/bridge/bridge_router_thread.rb +0 -0
  100. data/lib/openc3/ccsds/ccsds_packet.rb +0 -0
  101. data/lib/openc3/ccsds/ccsds_parser.rb +0 -0
  102. data/lib/openc3/config/config_parser.rb +78 -17
  103. data/lib/openc3/config/meta_config_parser.rb +0 -0
  104. data/lib/openc3/conversions/bit_reverse_conversion.rb +0 -0
  105. data/lib/openc3/conversions/conversion.rb +0 -0
  106. data/lib/openc3/conversions/generic_conversion.rb +0 -0
  107. data/lib/openc3/conversions/ip_read_conversion.rb +0 -0
  108. data/lib/openc3/conversions/ip_write_conversion.rb +0 -0
  109. data/lib/openc3/conversions/object_read_conversion.rb +0 -0
  110. data/lib/openc3/conversions/object_write_conversion.rb +0 -0
  111. data/lib/openc3/conversions/packet_time_formatted_conversion.rb +0 -0
  112. data/lib/openc3/conversions/packet_time_seconds_conversion.rb +0 -0
  113. data/lib/openc3/conversions/polynomial_conversion.rb +0 -0
  114. data/lib/openc3/conversions/processor_conversion.rb +0 -0
  115. data/lib/openc3/conversions/received_count_conversion.rb +0 -0
  116. data/lib/openc3/conversions/received_time_formatted_conversion.rb +0 -0
  117. data/lib/openc3/conversions/received_time_seconds_conversion.rb +0 -0
  118. data/lib/openc3/conversions/segmented_polynomial_conversion.rb +0 -0
  119. data/lib/openc3/conversions/unix_time_conversion.rb +0 -0
  120. data/lib/openc3/conversions/unix_time_formatted_conversion.rb +0 -0
  121. data/lib/openc3/conversions/unix_time_seconds_conversion.rb +0 -0
  122. data/lib/openc3/conversions.rb +0 -0
  123. data/lib/openc3/core_ext/array.rb +0 -0
  124. data/lib/openc3/core_ext/binding.rb +0 -0
  125. data/lib/openc3/core_ext/class.rb +0 -0
  126. data/lib/openc3/core_ext/exception.rb +0 -0
  127. data/lib/openc3/core_ext/faraday.rb +0 -0
  128. data/lib/openc3/core_ext/file.rb +0 -0
  129. data/lib/openc3/core_ext/io.rb +0 -0
  130. data/lib/openc3/core_ext/kernel.rb +0 -0
  131. data/lib/openc3/core_ext/math.rb +0 -0
  132. data/lib/openc3/core_ext/matrix.rb +0 -0
  133. data/lib/openc3/core_ext/objectspace.rb +0 -0
  134. data/lib/openc3/core_ext/openc3_io.rb +0 -0
  135. data/lib/openc3/core_ext/range.rb +0 -0
  136. data/lib/openc3/core_ext/socket.rb +0 -0
  137. data/lib/openc3/core_ext/string.rb +0 -0
  138. data/lib/openc3/core_ext/stringio.rb +0 -0
  139. data/lib/openc3/core_ext/tempfile.rb +0 -0
  140. data/lib/openc3/core_ext/time.rb +0 -0
  141. data/lib/openc3/core_ext.rb +0 -0
  142. data/lib/openc3/ext/.keep +0 -0
  143. data/lib/openc3/interfaces/file_interface.rb +0 -0
  144. data/lib/openc3/interfaces/http_client_interface.rb +0 -0
  145. data/lib/openc3/interfaces/http_server_interface.rb +0 -0
  146. data/lib/openc3/interfaces/interface.rb +5 -4
  147. data/lib/openc3/interfaces/mqtt_interface.rb +0 -0
  148. data/lib/openc3/interfaces/mqtt_stream_interface.rb +2 -0
  149. data/lib/openc3/interfaces/protocols/burst_protocol.rb +27 -0
  150. data/lib/openc3/interfaces/protocols/cmd_response_protocol.rb +0 -0
  151. data/lib/openc3/interfaces/protocols/cobs_protocol.rb +0 -0
  152. data/lib/openc3/interfaces/protocols/crc_protocol.rb +0 -0
  153. data/lib/openc3/interfaces/protocols/fixed_protocol.rb +0 -0
  154. data/lib/openc3/interfaces/protocols/ignore_packet_protocol.rb +0 -0
  155. data/lib/openc3/interfaces/protocols/length_protocol.rb +7 -0
  156. data/lib/openc3/interfaces/protocols/preidentified_protocol.rb +7 -0
  157. data/lib/openc3/interfaces/protocols/protocol.rb +4 -4
  158. data/lib/openc3/interfaces/protocols/slip_protocol.rb +0 -0
  159. data/lib/openc3/interfaces/protocols/template_protocol.rb +2 -2
  160. data/lib/openc3/interfaces/protocols/terminated_protocol.rb +0 -0
  161. data/lib/openc3/interfaces/serial_interface.rb +2 -0
  162. data/lib/openc3/interfaces/simulated_target_interface.rb +0 -0
  163. data/lib/openc3/interfaces/stream_interface.rb +0 -0
  164. data/lib/openc3/interfaces/tcpip_client_interface.rb +2 -0
  165. data/lib/openc3/interfaces/tcpip_server_interface.rb +0 -0
  166. data/lib/openc3/interfaces/udp_interface.rb +16 -5
  167. data/lib/openc3/interfaces.rb +0 -0
  168. data/lib/openc3/io/buffered_file.rb +0 -0
  169. data/lib/openc3/io/io_multiplexer.rb +0 -0
  170. data/lib/openc3/io/json_api.rb +3 -2
  171. data/lib/openc3/io/json_api_object.rb +0 -0
  172. data/lib/openc3/io/json_drb.rb +20 -4
  173. data/lib/openc3/io/json_drb_object.rb +0 -0
  174. data/lib/openc3/io/json_drb_rack.rb +0 -0
  175. data/lib/openc3/io/json_rpc.rb +0 -0
  176. data/lib/openc3/io/posix_serial_driver.rb +0 -0
  177. data/lib/openc3/io/serial_driver.rb +0 -0
  178. data/lib/openc3/io/stderr.rb +0 -0
  179. data/lib/openc3/io/stdout.rb +0 -0
  180. data/lib/openc3/io/udp_sockets.rb +38 -8
  181. data/lib/openc3/io/win32_serial_driver.rb +1 -0
  182. data/lib/openc3/logs/buffered_packet_log_reader.rb +0 -0
  183. data/lib/openc3/logs/buffered_packet_log_writer.rb +0 -0
  184. data/lib/openc3/logs/log_writer.rb +0 -0
  185. data/lib/openc3/logs/packet_log_constants.rb +0 -0
  186. data/lib/openc3/logs/packet_log_reader.rb +23 -2
  187. data/lib/openc3/logs/packet_log_writer.rb +5 -0
  188. data/lib/openc3/logs/stream_log.rb +1 -1
  189. data/lib/openc3/logs/stream_log_pair.rb +0 -0
  190. data/lib/openc3/logs/text_log_writer.rb +0 -0
  191. data/lib/openc3/logs.rb +0 -0
  192. data/lib/openc3/microservices/cleanup_microservice.rb +0 -0
  193. data/lib/openc3/microservices/decom_common.rb +0 -0
  194. data/lib/openc3/microservices/decom_microservice.rb +0 -0
  195. data/lib/openc3/microservices/interface_decom_common.rb +2 -1
  196. data/lib/openc3/microservices/interface_microservice.rb +72 -25
  197. data/lib/openc3/microservices/log_microservice.rb +0 -0
  198. data/lib/openc3/microservices/microservice.rb +3 -3
  199. data/lib/openc3/microservices/multi_microservice.rb +1 -1
  200. data/lib/openc3/microservices/periodic_microservice.rb +2 -2
  201. data/lib/openc3/microservices/plugin_microservice.rb +0 -0
  202. data/lib/openc3/microservices/queue_microservice.rb +0 -0
  203. data/lib/openc3/microservices/router_microservice.rb +0 -0
  204. data/lib/openc3/microservices/scope_cleanup_microservice.rb +0 -0
  205. data/lib/openc3/microservices/text_log_microservice.rb +0 -0
  206. data/lib/openc3/migrations/20220420190000_log_stuff.rb +0 -0
  207. data/lib/openc3/migrations/20221202214600_add_target_names.rb +0 -0
  208. data/lib/openc3/migrations/20221210174900_convert_to_multi.rb +0 -0
  209. data/lib/openc3/migrations/20230915000002_no_scope_log_messages.rb +0 -0
  210. data/lib/openc3/migrations/20231022000000_tlm_viewer_config.rb +0 -0
  211. data/lib/openc3/migrations/20241208080000_no_critical_cmd.rb +0 -0
  212. data/lib/openc3/migrations/20241208080001_no_trigger_group.rb +0 -0
  213. data/lib/openc3/migrations/20250108060000_news_feed.rb +0 -0
  214. data/lib/openc3/migrations/20250402000000_periodic_only_default.rb +0 -0
  215. data/lib/openc3/migrations/20260203000000_remove_store_id.rb +0 -0
  216. data/lib/openc3/migrations/20260204000000_remove_decom_reducer.rb +0 -0
  217. data/lib/openc3/migrations/20260701000000_updated_at_to_int.rb +0 -0
  218. data/lib/openc3/migrations/20260704000000_default_bridge.rb +38 -0
  219. data/lib/openc3/migrations/20260731000000_system_health_json.rb +11 -0
  220. data/lib/openc3/models/activity_model.rb +0 -0
  221. data/lib/openc3/models/auth_model.rb +35 -7
  222. data/lib/openc3/models/bridge_model.rb +133 -0
  223. data/lib/openc3/models/config_keyword_model.rb +63 -0
  224. data/lib/openc3/models/cvt_model.rb +0 -0
  225. data/lib/openc3/models/db_sharded_model.rb +0 -0
  226. data/lib/openc3/models/environment_model.rb +0 -0
  227. data/lib/openc3/models/gem_model.rb +12 -9
  228. data/lib/openc3/models/host_interface_microservice_model.rb +114 -0
  229. data/lib/openc3/models/info_model.rb +0 -0
  230. data/lib/openc3/models/interface_model.rb +178 -19
  231. data/lib/openc3/models/interface_status_model.rb +0 -0
  232. data/lib/openc3/models/metadata_model.rb +0 -0
  233. data/lib/openc3/models/metric_model.rb +0 -0
  234. data/lib/openc3/models/microservice_model.rb +9 -22
  235. data/lib/openc3/models/microservice_status_model.rb +0 -0
  236. data/lib/openc3/models/migration_model.rb +0 -0
  237. data/lib/openc3/models/model.rb +0 -0
  238. data/lib/openc3/models/news_model.rb +0 -0
  239. data/lib/openc3/models/note_model.rb +0 -0
  240. data/lib/openc3/models/offline_access_model.rb +0 -0
  241. data/lib/openc3/models/ping_model.rb +0 -0
  242. data/lib/openc3/models/plugin_model.rb +9 -2
  243. data/lib/openc3/models/plugin_store_model.rb +0 -0
  244. data/lib/openc3/models/process_status_model.rb +0 -0
  245. data/lib/openc3/models/python_package_model.rb +4 -4
  246. data/lib/openc3/models/queue_model.rb +0 -0
  247. data/lib/openc3/models/reaction_model.rb +0 -0
  248. data/lib/openc3/models/reingest_job_model.rb +0 -0
  249. data/lib/openc3/models/router_model.rb +0 -0
  250. data/lib/openc3/models/router_status_model.rb +0 -0
  251. data/lib/openc3/models/scope_model.rb +51 -26
  252. data/lib/openc3/models/script_engine_model.rb +0 -0
  253. data/lib/openc3/models/script_status_model.rb +0 -0
  254. data/lib/openc3/models/secret_model.rb +0 -0
  255. data/lib/openc3/models/setting_model.rb +546 -3
  256. data/lib/openc3/models/sorted_model.rb +0 -0
  257. data/lib/openc3/models/stash_model.rb +0 -0
  258. data/lib/openc3/models/target_model.rb +30 -25
  259. data/lib/openc3/models/timeline_model.rb +0 -0
  260. data/lib/openc3/models/tool_config_model.rb +0 -0
  261. data/lib/openc3/models/tool_model.rb +1 -0
  262. data/lib/openc3/models/trigger_group_model.rb +0 -0
  263. data/lib/openc3/models/trigger_model.rb +20 -0
  264. data/lib/openc3/models/widget_model.rb +0 -0
  265. data/lib/openc3/operators/microservice_operator.rb +64 -22
  266. data/lib/openc3/operators/operator.rb +4 -4
  267. data/lib/openc3/packets/binary_accessor.rb +0 -0
  268. data/lib/openc3/packets/command_validator.rb +0 -0
  269. data/lib/openc3/packets/commands.rb +0 -0
  270. data/lib/openc3/packets/json_packet.rb +0 -0
  271. data/lib/openc3/packets/limits.rb +0 -0
  272. data/lib/openc3/packets/limits_response.rb +0 -0
  273. data/lib/openc3/packets/packet.rb +4 -0
  274. data/lib/openc3/packets/packet_config.rb +0 -0
  275. data/lib/openc3/packets/packet_item.rb +0 -0
  276. data/lib/openc3/packets/packet_item_limits.rb +0 -0
  277. data/lib/openc3/packets/parsers/format_string_parser.rb +0 -0
  278. data/lib/openc3/packets/parsers/limits_parser.rb +0 -0
  279. data/lib/openc3/packets/parsers/limits_response_parser.rb +0 -0
  280. data/lib/openc3/packets/parsers/packet_item_parser.rb +0 -0
  281. data/lib/openc3/packets/parsers/packet_parser.rb +0 -0
  282. data/lib/openc3/packets/parsers/processor_parser.rb +0 -0
  283. data/lib/openc3/packets/parsers/state_parser.rb +0 -0
  284. data/lib/openc3/packets/parsers/xtce_converter.rb +0 -0
  285. data/lib/openc3/packets/parsers/xtce_parser.rb +0 -0
  286. data/lib/openc3/packets/structure.rb +7 -1
  287. data/lib/openc3/packets/structure_item.rb +0 -0
  288. data/lib/openc3/packets/telemetry.rb +0 -0
  289. data/lib/openc3/processors/processor.rb +2 -0
  290. data/lib/openc3/processors/statistics_processor.rb +0 -0
  291. data/lib/openc3/processors/watermark_processor.rb +0 -0
  292. data/lib/openc3/processors.rb +0 -0
  293. data/lib/openc3/script/api_shared.rb +0 -0
  294. data/lib/openc3/script/autonomic.rb +12 -12
  295. data/lib/openc3/script/calendar.rb +0 -0
  296. data/lib/openc3/script/commands.rb +0 -0
  297. data/lib/openc3/script/critical_cmd.rb +0 -0
  298. data/lib/openc3/script/exceptions.rb +0 -0
  299. data/lib/openc3/script/extract.rb +0 -0
  300. data/lib/openc3/script/limits.rb +0 -0
  301. data/lib/openc3/script/metadata.rb +0 -0
  302. data/lib/openc3/script/packages.rb +0 -0
  303. data/lib/openc3/script/plugins.rb +0 -0
  304. data/lib/openc3/script/queue.rb +0 -0
  305. data/lib/openc3/script/screen.rb +0 -0
  306. data/lib/openc3/script/script.rb +2 -2
  307. data/lib/openc3/script/script_runner.rb +0 -0
  308. data/lib/openc3/script/storage.rb +4 -4
  309. data/lib/openc3/script/suite.rb +0 -0
  310. data/lib/openc3/script/suite_results.rb +0 -0
  311. data/lib/openc3/script/suite_runner.rb +26 -0
  312. data/lib/openc3/script/tables.rb +0 -0
  313. data/lib/openc3/script/telemetry.rb +9 -3
  314. data/lib/openc3/script/web_socket_api.rb +218 -145
  315. data/lib/openc3/script.rb +0 -0
  316. data/lib/openc3/script_engines/script_engine.rb +0 -0
  317. data/lib/openc3/streams/mqtt_stream.rb +0 -0
  318. data/lib/openc3/streams/serial_stream.rb +0 -0
  319. data/lib/openc3/streams/stream.rb +0 -0
  320. data/lib/openc3/streams/tcpip_client_stream.rb +0 -0
  321. data/lib/openc3/streams/tcpip_socket_stream.rb +0 -0
  322. data/lib/openc3/streams/web_socket_client_stream.rb +0 -0
  323. data/lib/openc3/subpacketizers/subpacketizer.rb +0 -0
  324. data/lib/openc3/system/system.rb +0 -0
  325. data/lib/openc3/system/target.rb +0 -0
  326. data/lib/openc3/system.rb +0 -0
  327. data/lib/openc3/tools/cmd_tlm_server/api.rb +0 -0
  328. data/lib/openc3/tools/cmd_tlm_server/interface_thread.rb +7 -0
  329. data/lib/openc3/tools/table_manager/table.rb +0 -0
  330. data/lib/openc3/tools/table_manager/table_config.rb +0 -0
  331. data/lib/openc3/tools/table_manager/table_item.rb +0 -0
  332. data/lib/openc3/tools/table_manager/table_item_parser.rb +0 -0
  333. data/lib/openc3/tools/table_manager/table_manager_core.rb +0 -0
  334. data/lib/openc3/tools/table_manager/table_parser.rb +0 -0
  335. data/lib/openc3/tools/test_runner/test.rb +0 -0
  336. data/lib/openc3/top_level.rb +1 -1
  337. data/lib/openc3/topics/autonomic_topic.rb +0 -0
  338. data/lib/openc3/topics/calendar_topic.rb +0 -0
  339. data/lib/openc3/topics/command_decom_topic.rb +0 -0
  340. data/lib/openc3/topics/command_topic.rb +0 -0
  341. data/lib/openc3/topics/config_topic.rb +0 -0
  342. data/lib/openc3/topics/decom_interface_topic.rb +2 -1
  343. data/lib/openc3/topics/interface_topic.rb +8 -2
  344. data/lib/openc3/topics/limits_event_topic.rb +0 -0
  345. data/lib/openc3/topics/notebook_topic.rb +0 -0
  346. data/lib/openc3/topics/queue_topic.rb +0 -0
  347. data/lib/openc3/topics/router_topic.rb +6 -1
  348. data/lib/openc3/topics/system_events_topic.rb +0 -0
  349. data/lib/openc3/topics/telemetry_decom_topic.rb +0 -0
  350. data/lib/openc3/topics/telemetry_topic.rb +0 -0
  351. data/lib/openc3/topics/timeline_topic.rb +0 -0
  352. data/lib/openc3/topics/topic.rb +0 -0
  353. data/lib/openc3/utilities/authentication.rb +4 -4
  354. data/lib/openc3/utilities/authorization.rb +0 -0
  355. data/lib/openc3/utilities/aws_bucket.rb +2 -2
  356. data/lib/openc3/utilities/bucket.rb +1 -1
  357. data/lib/openc3/utilities/bucket_file_cache.rb +55 -22
  358. data/lib/openc3/utilities/bucket_require.rb +0 -0
  359. data/lib/openc3/utilities/bucket_utilities.rb +3 -4
  360. data/lib/openc3/utilities/cli_generator.rb +0 -0
  361. data/lib/openc3/utilities/cmd_log.rb +0 -0
  362. data/lib/openc3/utilities/config_overlay.rb +75 -0
  363. data/lib/openc3/utilities/cosmos_rails_formatter.rb +0 -0
  364. data/lib/openc3/utilities/crc.rb +59 -32
  365. data/lib/openc3/utilities/csv.rb +0 -0
  366. data/lib/openc3/utilities/ctrf.rb +0 -0
  367. data/lib/openc3/utilities/env_helper.rb +0 -0
  368. data/lib/openc3/utilities/local_bucket.rb +0 -0
  369. data/lib/openc3/utilities/local_mode.rb +32 -6
  370. data/lib/openc3/utilities/logger.rb +30 -8
  371. data/lib/openc3/utilities/message_log.rb +0 -0
  372. data/lib/openc3/utilities/metric.rb +0 -0
  373. data/lib/openc3/utilities/migration.rb +0 -0
  374. data/lib/openc3/utilities/open_telemetry.rb +0 -0
  375. data/lib/openc3/utilities/process_manager.rb +0 -0
  376. data/lib/openc3/utilities/pypi_url.rb +0 -0
  377. data/lib/openc3/utilities/python_proxy.rb +0 -0
  378. data/lib/openc3/utilities/python_venv.rb +135 -0
  379. data/lib/openc3/utilities/quaternion.rb +0 -0
  380. data/lib/openc3/utilities/questdb_client.rb +0 -0
  381. data/lib/openc3/utilities/redis_secrets.rb +0 -0
  382. data/lib/openc3/utilities/reingest_job.rb +0 -0
  383. data/lib/openc3/utilities/ruby_lex_utils.rb +0 -0
  384. data/lib/openc3/utilities/rubygems_url.rb +39 -0
  385. data/lib/openc3/utilities/running_script.rb +24 -55
  386. data/lib/openc3/utilities/s3_autoload.rb +5 -5
  387. data/lib/openc3/utilities/script.rb +12 -8
  388. data/lib/openc3/utilities/secrets.rb +48 -3
  389. data/lib/openc3/utilities/simulated_target.rb +0 -0
  390. data/lib/openc3/utilities/sleeper.rb +0 -0
  391. data/lib/openc3/utilities/store.rb +0 -0
  392. data/lib/openc3/utilities/store_autoload.rb +2 -2
  393. data/lib/openc3/utilities/store_queued.rb +0 -0
  394. data/lib/openc3/utilities/target_file.rb +18 -1
  395. data/lib/openc3/utilities/thread_manager.rb +0 -0
  396. data/lib/openc3/utilities/throttle.rb +0 -0
  397. data/lib/openc3/utilities/zip.rb +0 -0
  398. data/lib/openc3/utilities.rb +0 -0
  399. data/lib/openc3/version.rb +5 -5
  400. data/lib/openc3/win32/excel.rb +0 -0
  401. data/lib/openc3/win32/win32.rb +0 -0
  402. data/lib/openc3/win32/win32_main.rb +0 -0
  403. data/lib/openc3.rb +2 -2
  404. data/tasks/gemfile_stats.rake +0 -0
  405. data/tasks/spec.rake +0 -0
  406. data/templates/command_validator/command_validator.py +0 -0
  407. data/templates/command_validator/command_validator.rb +0 -0
  408. data/templates/conversion/conversion.py +0 -0
  409. data/templates/conversion/conversion.rb +0 -0
  410. data/templates/limits_response/response.py +0 -0
  411. data/templates/limits_response/response.rb +0 -0
  412. data/templates/microservice/microservices/TEMPLATE/microservice.py +0 -0
  413. data/templates/microservice/microservices/TEMPLATE/microservice.rb +0 -0
  414. data/templates/plugin/.gitignore +0 -0
  415. data/templates/plugin/LICENSE.md +0 -0
  416. data/templates/plugin/README.md +0 -0
  417. data/templates/plugin/Rakefile +0 -0
  418. data/templates/plugin/plugin.gemspec +0 -0
  419. data/templates/plugin/plugin.txt +0 -0
  420. data/templates/processor/processor.py +1 -1
  421. data/templates/processor/processor.rb +0 -0
  422. data/templates/target/targets/TARGET/cmd_tlm/cmd.txt +0 -0
  423. data/templates/target/targets/TARGET/cmd_tlm/tlm.txt +0 -0
  424. data/templates/target/targets/TARGET/lib/target.py +0 -0
  425. data/templates/target/targets/TARGET/lib/target.rb +0 -0
  426. data/templates/target/targets/TARGET/procedures/procedure.py +0 -0
  427. data/templates/target/targets/TARGET/procedures/procedure.rb +0 -0
  428. data/templates/target/targets/TARGET/public/README.txt +0 -0
  429. data/templates/target/targets/TARGET/screens/status.txt +0 -0
  430. data/templates/target/targets/TARGET/target.txt +0 -0
  431. data/templates/tool_angular/.editorconfig +0 -0
  432. data/templates/tool_angular/.gitignore +0 -0
  433. data/templates/tool_angular/.vscode/extensions.json +0 -0
  434. data/templates/tool_angular/.vscode/launch.json +0 -0
  435. data/templates/tool_angular/.vscode/tasks.json +0 -0
  436. data/templates/tool_angular/angular.json +0 -0
  437. data/templates/tool_angular/extra-webpack.config.js +0 -0
  438. data/templates/tool_angular/package.json +2 -2
  439. data/templates/tool_angular/src/app/app-routing.module.ts +0 -0
  440. data/templates/tool_angular/src/app/app.component.html +0 -0
  441. data/templates/tool_angular/src/app/app.component.scss +0 -0
  442. data/templates/tool_angular/src/app/app.component.spec.ts +0 -0
  443. data/templates/tool_angular/src/app/app.component.ts +0 -0
  444. data/templates/tool_angular/src/app/app.module.ts +0 -0
  445. data/templates/tool_angular/src/app/custom-overlay-container.ts +0 -0
  446. data/templates/tool_angular/src/app/empty-route/empty-route.component.ts +0 -0
  447. data/templates/tool_angular/src/app/openc3-api.d.ts +0 -0
  448. data/templates/tool_angular/src/assets/.gitkeep +0 -0
  449. data/templates/tool_angular/src/environments/environment.prod.ts +0 -0
  450. data/templates/tool_angular/src/environments/environment.ts +0 -0
  451. data/templates/tool_angular/src/favicon.ico +0 -0
  452. data/templates/tool_angular/src/index.html +0 -0
  453. data/templates/tool_angular/src/main.single-spa.ts +0 -0
  454. data/templates/tool_angular/src/single-spa/asset-url.ts +0 -0
  455. data/templates/tool_angular/src/single-spa/single-spa-props.ts +0 -0
  456. data/templates/tool_angular/src/styles.scss +0 -0
  457. data/templates/tool_angular/tsconfig.app.json +0 -0
  458. data/templates/tool_angular/tsconfig.json +0 -0
  459. data/templates/tool_angular/tsconfig.spec.json +0 -0
  460. data/templates/tool_react/.eslintrc +0 -0
  461. data/templates/tool_react/.gitignore +0 -0
  462. data/templates/tool_react/.prettierignore +0 -0
  463. data/templates/tool_react/babel.config.json +0 -0
  464. data/templates/tool_react/jest.config.js +0 -0
  465. data/templates/tool_react/package.json +1 -1
  466. data/templates/tool_react/src/openc3-tool_name.js +0 -0
  467. data/templates/tool_react/src/root.component.js +0 -0
  468. data/templates/tool_react/src/root.component.test.js +0 -0
  469. data/templates/tool_react/webpack.config.js +0 -0
  470. data/templates/tool_svelte/.gitignore +0 -0
  471. data/templates/tool_svelte/.prettierignore +0 -0
  472. data/templates/tool_svelte/.prettierrc.js +0 -0
  473. data/templates/tool_svelte/babel.config.js +0 -0
  474. data/templates/tool_svelte/build/smui.css +0 -0
  475. data/templates/tool_svelte/jest.config.js +0 -0
  476. data/templates/tool_svelte/package.json +1 -1
  477. data/templates/tool_svelte/rollup.config.js +0 -0
  478. data/templates/tool_svelte/src/App.svelte +0 -0
  479. data/templates/tool_svelte/src/App.test.js +0 -0
  480. data/templates/tool_svelte/src/theme/_smui-theme.scss +0 -0
  481. data/templates/tool_svelte/src/tool_name.js +0 -0
  482. data/templates/tool_vue/.env.standalone +0 -0
  483. data/templates/tool_vue/.gitignore +0 -0
  484. data/templates/tool_vue/.prettierrc.cjs +0 -0
  485. data/templates/tool_vue/eslint.config.mjs +0 -0
  486. data/templates/tool_vue/jsconfig.json +0 -0
  487. data/templates/tool_vue/package.json +3 -3
  488. data/templates/tool_vue/src/App.vue +0 -0
  489. data/templates/tool_vue/src/main.js +0 -0
  490. data/templates/tool_vue/src/router.js +0 -0
  491. data/templates/tool_vue/src/tools/tool_name/tool_name.vue +0 -0
  492. data/templates/tool_vue/vite.config.js +1 -1
  493. data/templates/widget/.prettierrc.cjs +0 -0
  494. data/templates/widget/LICENSE.md +0 -0
  495. data/templates/widget/Rakefile +0 -0
  496. data/templates/widget/package.json +2 -2
  497. data/templates/widget/src/Widget.vue +0 -0
  498. data/templates/widget/vite.config.js +0 -0
  499. metadata +36 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 787269f06fae8562e23d790d3c4887e2f913841dc818570fdafa06b29fd1b8e6
4
- data.tar.gz: c6630dbc9c61bf71f96015db09ca9246ef80247f4f1b5de429c97b537551c4e4
3
+ metadata.gz: 3d94ef0547084256ba519d150e9e7637fe2623ad68703fb56ff43579ceb1119b
4
+ data.tar.gz: bb907222d40154d622e73fb8732ff2715186183f5ce097f58832839ea3621fb3
5
5
  SHA512:
6
- metadata.gz: b72db91c6fd2febea1855d452a30e496b33bc5c19010ebc674ef044fea01d8cff1c921abcee824c39f32434e66fa9b4ed040bc1f164e9ea7cec99be431aec03a
7
- data.tar.gz: 0ffeaa70a064e4d23cd49326e87b85e4eafefd0d4fa61a3db60fc503a8e48593c349588f4f28e374f4c7ba87408a66c072e822101f689bfc58cb3bcf567af966
6
+ metadata.gz: d59f2a554a6fd751533736e12088e85958e9fe8569ccc2ffde017e68c00626b39ddd7f08334e9e9f83fa47a599b8c0a803c0da248b945a7dff3f8e41a41085cc
7
+ data.tar.gz: 54c6fc8f881f6ccfef18dd8e37ebbe99b078e199f95738b9f6da5d24183d279252a9ee563c2be338d4f4e2cf32bb0299b4761727b40ffb5f771e354ba3877538
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # encoding: ascii-8bit
2
2
 
3
- source ENV['RUBYGEMS_URL'] || "https://rubygems.org"
3
+ source "https://rubygems.org"
4
4
 
5
5
  gemspec :name => 'openc3'
6
6
 
data/Guardfile CHANGED
File without changes
data/LICENSE.md CHANGED
File without changes
data/README.md CHANGED
File without changes
data/Rakefile CHANGED
File without changes
data/bin/openc3cli CHANGED
@@ -20,6 +20,7 @@
20
20
 
21
21
  require 'openc3'
22
22
  require 'openc3/bridge/bridge'
23
+ require 'openc3/models/bridge_model'
23
24
  require 'openc3/models/gem_model'
24
25
  require 'openc3/models/migration_model'
25
26
  require 'openc3/models/plugin_model'
@@ -78,6 +79,7 @@ def print_usage
78
79
  puts " cli xtce_converter # Convert to and from the XTCE format. Run with --help for more info."
79
80
  puts " cli cstol_converter # Converts CSTOL files (.prc) to COSMOS. Run with --help for more info."
80
81
  puts " cli setpassword # Set the initial password from OPENC3_API_PASSWORD env var"
82
+ puts " cli initsettings # Seed settings from OPENC3_SETTING_* env vars"
81
83
  puts " cli migratetouv PLUGIN_NAME SCOPE # Migrate plugin to per-plugin UV virtual environment"
82
84
  puts ""
83
85
  end
@@ -1269,6 +1271,42 @@ if not ARGV[0].nil? # argument(s) given
1269
1271
  params = [] unless params
1270
1272
  run_bridge(filename, params)
1271
1273
 
1274
+ when 'bridgeenroll'
1275
+ if ARGV[1].nil? || ARGV[1] == '--help' || ARGV[1] == '-h'
1276
+ puts "Usage: cli bridgeenroll BRIDGE_NAME APP_PUBLIC_KEY [SCOPE]"
1277
+ puts ""
1278
+ puts "Authorize an openc3-app control identity for a bridge (Iroh hub) and"
1279
+ puts "print that bridge's current connection ticket. Used by openc3-app to"
1280
+ puts "auto-enroll over the local Docker control plane: the bridge then only"
1281
+ puts "accepts api/* control connections from the given app identity."
1282
+ puts ""
1283
+ puts "Arguments:"
1284
+ puts " BRIDGE_NAME Name of the bridge (hub)"
1285
+ puts " APP_PUBLIC_KEY openc3-app's Iroh public key (EndpointId, hex)"
1286
+ puts " SCOPE Scope (optional, default: OPENC3_SCOPE or DEFAULT)"
1287
+ puts ""
1288
+ puts "On success the bridge ticket is printed alone on stdout."
1289
+ exit 0
1290
+ end
1291
+ bridge_name = ARGV[1].to_s.upcase
1292
+ app_public_key = ARGV[2]
1293
+ abort("APP_PUBLIC_KEY is required (see --help)") if app_public_key.nil? || app_public_key.empty?
1294
+ unless app_public_key.match?(/\A[0-9a-f]{64}\z/i)
1295
+ abort("APP_PUBLIC_KEY must be exactly 64 hexadecimal characters")
1296
+ end
1297
+ app_public_key = app_public_key.downcase
1298
+ scope = ARGV[3] || ENV['OPENC3_SCOPE'] || 'DEFAULT'
1299
+ model = OpenC3::BridgeModel.get_model(name: bridge_name, scope: scope)
1300
+ abort("Bridge '#{bridge_name}' not found in scope #{scope}. Is its bridge_microservice running?") unless model
1301
+ if model.ticket.nil? || model.ticket.empty?
1302
+ abort("Bridge '#{bridge_name}' has no ticket yet. Is its bridge_microservice running?")
1303
+ end
1304
+ old_app_public_key = model.app_public_key
1305
+ model.app_public_key = app_public_key
1306
+ model.update
1307
+ # Print ONLY the ticket so openc3-app can capture it from stdout.
1308
+ puts model.ticket
1309
+
1272
1310
  when 'bridgegem'
1273
1311
  if ARGV[1].nil? || ARGV[1] == '--help' || ARGV[1] == '-h'
1274
1312
  puts "Usage: cli bridgegem GEM_NAME [PARAMS...]"
@@ -1492,6 +1530,106 @@ if not ARGV[0].nil? # argument(s) given
1492
1530
  # Always ensure the scriptrunner policy is in place since it is required for script execution
1493
1531
  client.ensure_scriptrunner_policy(ENV['OPENC3_CONFIG_BUCKET'], ENV['OPENC3_LOGS_BUCKET'])
1494
1532
 
1533
+ when 'initsettings'
1534
+ if ARGV[1] == '--help' || ARGV[1] == '-h'
1535
+ puts "Usage: cli initsettings [--dry-run | --export]"
1536
+ puts ""
1537
+ puts "Seed COSMOS settings from the environment. A setting changed in the Admin"
1538
+ puts "Console is left alone, so those edits survive a restart."
1539
+ puts ""
1540
+ puts "Environment:"
1541
+ puts " OPENC3_SETTING_<NAME> One variable per setting, e.g."
1542
+ puts " OPENC3_SETTING_TIME_ZONE=UTC sets 'time_zone'"
1543
+ puts " OPENC3_SETTINGS_OVERWRITE true to overwrite existing settings on every"
1544
+ puts " run. false/unset leaves them alone"
1545
+ puts " OPENC3_SETTINGS_ALLOW_UNKNOWN true to allow setting names COSMOS doesn't"
1546
+ puts " recognize. Without it an unknown name is"
1547
+ puts " reported and skipped, so a typo can't"
1548
+ puts " silently do nothing"
1549
+ puts " OPENC3_SETTINGS_STRICT true to exit non-zero when a setting is"
1550
+ puts " rejected. Off by default"
1551
+ puts ""
1552
+ puts "These three accept true/false (1/0 also work)."
1553
+ puts ""
1554
+ puts "A setting that already exists is left alone because an operator may have"
1555
+ puts "edited it in the Admin Console. Settings written by a release before this"
1556
+ puts "command existed carry no record of having been seeded, so they all count as"
1557
+ puts "edited: on such an upgrade run one init with OPENC3_SETTINGS_OVERWRITE=true"
1558
+ puts "to adopt the environment values, then turn it back off."
1559
+ puts ""
1560
+ puts "An unrecognized name, an invalid value, or a malformed one of the variables"
1561
+ puts "above is reported on stdout and that one setting is skipped; init continues"
1562
+ puts "and COSMOS uses the default. Nothing here fails init unless"
1563
+ puts "OPENC3_SETTINGS_STRICT is set. Use --dry-run to check the same things before"
1564
+ puts "starting COSMOS, where a non-zero exit is what you want."
1565
+ puts ""
1566
+ puts "Settings that can be seeded:"
1567
+ OpenC3::SettingModel.describe_settings.each { |line| puts " #{line}" }
1568
+ puts ""
1569
+ puts "Boolean settings accept true/false (1/0 also work) and are stored as real"
1570
+ puts "booleans."
1571
+ puts "Every other setting is stored as the text given, including the settings"
1572
+ puts "whose text is JSON (astro, classification_banner, context_tag)."
1573
+ puts ""
1574
+ puts "JSON settings - shape of each blob:"
1575
+ OpenC3::SettingModel.describe_json_settings.each do |name, example|
1576
+ puts " #{name}"
1577
+ puts " #{example}"
1578
+ end
1579
+ puts ""
1580
+ puts "Rather than hand-writing one of those, configure it in Admin -> Settings"
1581
+ puts "and run 'cli initsettings --export' to print the current values as lines"
1582
+ puts "you can paste straight into compose.override.yaml."
1583
+ puts ""
1584
+ puts "Options:"
1585
+ puts " --dry-run Report what would be seeded and exit without writing."
1586
+ puts " Lists every problem rather than stopping at the first,"
1587
+ puts " and works before Redis is up so it can be run ahead of"
1588
+ puts " starting COSMOS. Exits non-zero if anything would fail,"
1589
+ puts " regardless of OPENC3_SETTINGS_STRICT"
1590
+ puts " --export Print the settings currently stored as compose"
1591
+ puts " 'environment:' lines, quoted so the JSON ones parse."
1592
+ puts " Configure in Admin -> Settings, then export and paste."
1593
+ puts " Reads Redis, so COSMOS must be running - unlike"
1594
+ puts " --dry-run, which works while it is down"
1595
+ puts " -h, --help Show this help message"
1596
+ exit 0
1597
+ end
1598
+ dry_run = ARGV[1] == '--dry-run'
1599
+ export = ARGV[1] == '--export'
1600
+ if ARGV[1] and !dry_run and !export
1601
+ abort "Unknown option #{ARGV[1]}. See 'cli initsettings --help'"
1602
+ end
1603
+ if export
1604
+ # --export reads the stored values, so it needs a reachable Redis. Say so
1605
+ # plainly - the raw connection error is something like
1606
+ # "Bad file descriptor (redis://openc3-redis:6379)", which doesn't hint
1607
+ # that the answer is to start COSMOS.
1608
+ unless OpenC3::SettingModel.redis_available?
1609
+ abort "Cannot reach Redis at #{ENV['OPENC3_REDIS_HOSTNAME']}:#{ENV['OPENC3_REDIS_PORT']}.\n" \
1610
+ "--export reads the settings currently stored, so COSMOS has to be running.\n" \
1611
+ "Start it with './openc3.sh run', or use --dry-run, which works while COSMOS is down."
1612
+ end
1613
+ begin
1614
+ lines = OpenC3::SettingModel.export_lines
1615
+ rescue => e
1616
+ abort "Error reading settings: #{e.message}"
1617
+ end
1618
+ if lines.empty?
1619
+ puts "# No settings are stored yet - configure them in Admin -> Settings first"
1620
+ else
1621
+ puts "# Paste under the openc3-cosmos-init service's \"environment:\" key in"
1622
+ puts "# compose.override.yaml, keeping this indentation."
1623
+ lines.each { |line| puts " #{line}" }
1624
+ end
1625
+ else
1626
+ begin
1627
+ OpenC3::SettingModel.apply_defaults(dry_run: dry_run)
1628
+ rescue => e
1629
+ abort "Error applying default settings: #{e.message}"
1630
+ end
1631
+ end
1632
+
1495
1633
  when 'runmigrations'
1496
1634
  if ARGV[1] == '--help' || ARGV[1] == '-h'
1497
1635
  puts "Usage: cli runmigrations"
data/bin/pipuninstall CHANGED
File without changes
data/bin/uvinstall CHANGED
@@ -75,8 +75,12 @@ if [ -f "${GEM_PATH}/uv.lock" ] && [ -f "${GEM_PATH}/pyproject.toml" ]; then
75
75
  cd "${VENV_BASE}"
76
76
  uv venv "${VENV_DIR}" --allow-existing
77
77
 
78
- # Offline sync first, online only on a cache miss (bounded by UV_HTTP_*)
79
- uv_offline_then_online sync --frozen --no-dev --no-install-project ${UV_ARGS}
78
+ # Offline sync first, online only on a cache miss (bounded by UV_HTTP_*).
79
+ # --inexact keeps sync additive: without it sync makes the venv match the
80
+ # lock exactly and uninstalls anything else, including packages an admin
81
+ # uploaded into this plugin venv via PythonPackageModel.install (which uses
82
+ # the additive `pipinstall`).
83
+ uv_offline_then_online sync --frozen --inexact --no-dev --no-install-project ${UV_ARGS}
80
84
  RESULT=$?
81
85
 
82
86
  if [ $RESULT -eq 0 ]; then
@@ -99,7 +103,10 @@ if [ -f "${GEM_PATH}/requirements.txt" ]; then
99
103
  RESULT=$?
100
104
  elif [ -f "${GEM_PATH}/pyproject.toml" ]; then
101
105
  echo "Installing from pyproject.toml via uv pip install"
102
- uv_offline_then_online pip install --python "${VENV_DIR}" ${UV_ARGS} "${GEM_PATH}"
106
+ # --python: The Python interpreter into which packages should be installed.
107
+ # --project: Discover a project (i.e. pyproject.toml) in the given directory.
108
+ # -r: Install the packages listed in the given files.
109
+ uv_offline_then_online pip install --python "${VENV_DIR}" --project "${GEM_PATH}" ${UV_ARGS} -r "${GEM_PATH}/pyproject.toml"
103
110
  RESULT=$?
104
111
 
105
112
  # `uv pip install <path>` builds the plugin as a package before installing
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -284,6 +284,8 @@ TEMPLATE_FILE:
284
284
  - name: Template File Path
285
285
  required: true
286
286
  description: The relative path to the template file. Filename should generally start with an underscore.
287
+ Absolute paths and paths containing '..' are not allowed. The file must be inside the directory
288
+ containing the definition file.
287
289
  values: .+
288
290
  since: 5.0.10
289
291
  RESPONSE:
File without changes
File without changes
File without changes
@@ -168,7 +168,7 @@ SECRET:
168
168
  summary: Define a secret needed by this interface
169
169
  description:
170
170
  Defines a secret for this interface and optionally assigns its value to an option.
171
- For more information see [Admin Secrets](/docs/tools/admin#secrets).
171
+ For more information see the [Secrets guide](/docs/guides/secrets) and [Admin Secrets](/docs/tools/admin#secrets).
172
172
  since: 5.3.0
173
173
  parameters:
174
174
  - name: Type
@@ -186,6 +186,8 @@ SECRET:
186
186
  - name: Environment Variable or File Path
187
187
  required: true
188
188
  description: Environment variable name or file path to store secret.
189
+ FILE paths must be under /tmp (or the directory set by the
190
+ OPENC3_SECRET_FILE_DIR environment variable); paths outside of it are rejected.
189
191
  Note that if you use the Option Name to set an option to the secret value,
190
192
  this value doesn't really matter as long as it is unique.
191
193
  values: .*
@@ -284,3 +286,103 @@ SHARD:
284
286
  values: \d+
285
287
  example: |
286
288
  SHARD 0
289
+ BRIDGE:
290
+ summary: Name of the bridge to run this interface on
291
+ description: Run this interface on a bridge host rather than within COSMOS. Note only python is supported.
292
+ since: 7.4.0
293
+ parameters:
294
+ - name: Bridge Name
295
+ required: true
296
+ description: Bridge Name - Typically DEFAULT
297
+ values: .+
298
+ example: |
299
+ BRIDGE DEFAULT
300
+ BRIDGE_PROTOCOL:
301
+ summary: Bridge Protocols modify the bridge interface by processing the data
302
+ description:
303
+ Protocols can be either READ, WRITE, or READ_WRITE. READ protocols act on the data
304
+ received by the interface while write acts on the data before it is sent out. READ_WRITE applies
305
+ the protocol to both reading and writing.<br/><br/>
306
+ For information on creating your own custom protocol please see [Protocols](../configuration/protocols.md)
307
+ since: 7.4.0
308
+ parameters:
309
+ - name: Type
310
+ required: true
311
+ description: Whether to apply the protocol on incoming data, outgoing data, or both
312
+ values: ["READ", "WRITE", "READ_WRITE"]
313
+ - name: Protocol Filename or Classname
314
+ required: true
315
+ description: Ruby or Python filename or class name which implements the protocol
316
+ values: .*
317
+ - name: Protocol specific parameters
318
+ required: false
319
+ description: Additional parameters used by the protocol
320
+ python_example: |
321
+ INTERFACE DATA_INT openc3/interfaces/tcpip_client_interface.py host.docker.internal 8080 8081 10.0 nil BURST
322
+ MAP_TARGET DATA
323
+ BRIDGE_PROTOCOL READ openc3/interfaces/protocols/ignore_packet_protocol.py INST IMAGE # Drop all INST IMAGE packets
324
+ BRIDGE_OPTION:
325
+ summary: Set a parameter on a bridged interface
326
+ description:
327
+ When a bridge option is set the bridge interface class calls the set_option method.
328
+ Custom interfaces can override set_option to handle any additional options they want.
329
+ since: 7.4.0
330
+ parameters:
331
+ - name: Name
332
+ required: true
333
+ description:
334
+ The option to set. OpenC3 defines several options on the core provided
335
+ interfaces. The SerialInterface defines FLOW_CONTROL which can be NONE (default) or RTSCTS
336
+ and DATA_BITS which changes the data bits of the serial interface.
337
+ The TcpipServerInterface and HttpServerInterface define LISTEN_ADDRESS which is the IP address to accept
338
+ connections on (default 0.0.0.0).
339
+ values: .*
340
+ - name: Parameters
341
+ required: false
342
+ description: Parameters to pass to the option
343
+ values: .*
344
+ example: |
345
+ INTERFACE SERIAL_INT serial_interface.rb COM1 COM1 115200 NONE 1 10.0 nil
346
+ BRIDGE DEFAULT
347
+ BRIDGE_OPTION FLOW_CONTROL RTSCTS
348
+ BRIDGE_OPTION DATA_BITS 8
349
+ BRIDGE_SECRET:
350
+ summary: Define a bridge secret needed by this bridge interface
351
+ description:
352
+ Defines a bridge secret for this bridge interface and optionally assigns its value to an option.
353
+ For more information see [Admin Secrets](/docs/tools/admin#secrets).
354
+ since: 7.4.0
355
+ parameters:
356
+ - name: Type
357
+ required: true
358
+ description:
359
+ ENV or FILE. ENV will mount the secret into an environment variable.
360
+ FILE mounts the secret into a file.
361
+ values: .*
362
+ - name: Secret Name
363
+ required: true
364
+ description:
365
+ The name of the secret to retrieve from the Admin / Secrets tab.
366
+ For more information see [Admin Secrets](/docs/tools/admin#secrets).
367
+ values: .*
368
+ - name: Environment Variable or File Path
369
+ required: true
370
+ description: Environment variable name or file path to store secret.
371
+ FILE paths must be under /tmp (or the directory set by the
372
+ OPENC3_SECRET_FILE_DIR environment variable); paths outside of it are rejected.
373
+ Note that if you use the Option Name to set an option to the secret value,
374
+ this value doesn't really matter as long as it is unique.
375
+ values: .*
376
+ - name: Option Name
377
+ required: false
378
+ description: Interface option to pass the secret value. This is the primary way to pass secrets to interfaces.
379
+ values: .*
380
+ - name: Secret Store Name
381
+ required: false
382
+ description: Name of the secret store for stores with multipart keys
383
+ values: .*
384
+ example: |
385
+ INTERFACE SERIAL_INT serial_interface.rb COM1 COM1 115200 NONE 1 10.0 nil
386
+ BRIDGE DEFAULT
387
+ BRIDGE_SECRET ENV USERNAME ENV_USERNAME USERNAME
388
+ BRIDGE_SECRET FILE KEY "/tmp/DATA/cert" KEY
File without changes
@@ -118,7 +118,8 @@ MICROSERVICE:
118
118
  SECRET:
119
119
  summary: Define a secret needed by this microservice
120
120
  description:
121
- Defines a secret for this microservice. For more information see [Admin Secrets](/docs/tools/admin#secrets).
121
+ Defines a secret for this microservice. For more information see the [Secrets guide](/docs/guides/secrets)
122
+ and [Admin Secrets](/docs/tools/admin#secrets).
122
123
  Note that unlike the INTERFACE SECRET, the microservice SECRET does not take an Option Name parameter,
123
124
  because the secret value is injected directly into the microservice process as an environment variable
124
125
  (Type ENV) or written to a file (Type FILE).
@@ -138,7 +139,9 @@ MICROSERVICE:
138
139
  values: .*
139
140
  - name: Environment Variable or File Path
140
141
  required: true
141
- description: Environment variable name or file path to store secret
142
+ description: Environment variable name or file path to store secret.
143
+ FILE paths must be under /tmp (or the directory set by the
144
+ OPENC3_SECRET_FILE_DIR environment variable); paths outside of it are rejected.
142
145
  values: .*
143
146
  - name: Secret Store Name
144
147
  required: false
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -274,6 +274,8 @@ TEMPLATE_FILE:
274
274
  - name: Template File Path
275
275
  required: true
276
276
  description: The relative path to the template file. Filename should generally start with an underscore.
277
+ Absolute paths and paths containing '..' are not allowed. The file must be inside the directory
278
+ containing the definition file.
277
279
  values: .+
278
280
  since: 5.0.10
279
281
  IGNORE_OVERLAP:
File without changes
File without changes
@@ -206,6 +206,9 @@ Decoration Widgets:
206
206
  END
207
207
  FILEDISPLAY:
208
208
  summary: Displays the contents of a target file with syntax highlighting
209
+ description: Files are read from the COSMOS bucket, either the target's installed files or the modified
210
+ copy under targets_modified. In local mode a file created only on the local filesystem
211
+ (plugins/SCOPE/targets_modified) is not in the bucket and cannot be read.
209
212
  since: 6.10.3
210
213
  parameters:
211
214
  - name: File path
@@ -224,6 +227,9 @@ Decoration Widgets:
224
227
  FILEDISPLAY "INST/data/sample.json" 400 200
225
228
  FILECHECKSUM:
226
229
  summary: Displays SHA-256 checksum of one or more files, with comparison if multiple
230
+ description: Files are read from the COSMOS bucket, either the target's installed files or the modified
231
+ copy under targets_modified. In local mode a file created only on the local filesystem
232
+ (plugins/SCOPE/targets_modified) is not in the bucket and cannot be read.
227
233
  since: 6.10.3
228
234
  parameters:
229
235
  - name: File path
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -23,6 +23,7 @@ static ID id_method_reduce_to_single_packet = 0;
23
23
  static ID id_method_replace = 0;
24
24
  static ID id_method_clone = 0;
25
25
  static ID id_method_log_discard = 0;
26
+ static ID id_method_check_buffer_size = 0;
26
27
 
27
28
  static ID id_ivar_data = 0;
28
29
  static ID id_ivar_extra = 0;
@@ -77,6 +78,10 @@ static VALUE burst_protocol_read_data(int argc, VALUE *argv, VALUE self)
77
78
 
78
79
  rb_str_concat(rb_ivar_get(self, id_ivar_data), data);
79
80
 
81
+ /* Bound the memory a peer can make us buffer. Raises if @data has grown
82
+ * past @max_buffer_size, which makes Interface#read disconnect the peer. */
83
+ rb_funcall(self, id_method_check_buffer_size, 0);
84
+
80
85
  /* Maintain extra from last read read_data */
81
86
  if (!((RSTRING_LEN(data) == 0) && (!(RTEST(extra))))) {
82
87
  rb_ivar_set(self, id_ivar_extra, extra);
@@ -301,6 +306,7 @@ void Init_burst_protocol(void)
301
306
  id_method_replace = rb_intern("replace");
302
307
  id_method_clone = rb_intern("clone");
303
308
  id_method_log_discard = rb_intern("log_discard");
309
+ id_method_check_buffer_size = rb_intern("check_buffer_size");
304
310
 
305
311
  id_ivar_data = rb_intern("@data");
306
312
  id_ivar_extra = rb_intern("@extra");
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -35,10 +35,13 @@ VALUE cSegFault = Qnil;
35
35
  #include <string.h>
36
36
  #include <sys/stat.h>
37
37
 
38
+ /* Must be a macro rather than a const int so filename below is a fixed size
39
+ * array rather than a variable length array */
40
+ #define FILENAME_LEN 256
41
+
38
42
  /* Mark that this function does not return (it exits) to remove compiler warning */
39
43
  __attribute__((noreturn)) static void catch_sigsegv(int sig_num)
40
44
  {
41
- const int FILENAME_LEN = 256;
42
45
  char *openc3_log_dir = NULL;
43
46
  time_t rawtime;
44
47
  struct tm timeinfo;
File without changes
File without changes
File without changes