openc3 5.5.2 → 5.6.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.

Potentially problematic release.


This version of openc3 might be problematic. Click here for more details.

Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/bin/openc3cli +167 -69
  3. data/data/config/_interfaces.yaml +1 -6
  4. data/data/config/interface_modifiers.yaml +55 -4
  5. data/data/config/microservice.yaml +30 -3
  6. data/ext/openc3/ext/crc/crc.c +82 -1
  7. data/lib/openc3/api/cmd_api.rb +19 -7
  8. data/lib/openc3/api/tlm_api.rb +13 -12
  9. data/lib/openc3/bridge/bridge_config.rb +4 -4
  10. data/lib/openc3/config/config_parser.rb +1 -0
  11. data/lib/openc3/conversions/unix_time_conversion.rb +3 -1
  12. data/lib/openc3/ext/.keep +0 -0
  13. data/lib/openc3/interfaces/interface.rb +54 -26
  14. data/lib/openc3/interfaces/serial_interface.rb +4 -5
  15. data/lib/openc3/interfaces/simulated_target_interface.rb +4 -4
  16. data/lib/openc3/interfaces/stream_interface.rb +2 -2
  17. data/lib/openc3/interfaces/tcpip_client_interface.rb +4 -3
  18. data/lib/openc3/interfaces/tcpip_server_interface.rb +18 -19
  19. data/lib/openc3/interfaces/udp_interface.rb +10 -4
  20. data/lib/openc3/io/json_api.rb +72 -0
  21. data/lib/openc3/io/serial_driver.rb +4 -5
  22. data/lib/openc3/logs/buffered_packet_log_writer.rb +2 -4
  23. data/lib/openc3/logs/log_writer.rb +9 -8
  24. data/lib/openc3/logs/packet_log_reader.rb +8 -1
  25. data/lib/openc3/logs/packet_log_writer.rb +3 -4
  26. data/lib/openc3/logs/stream_log.rb +116 -0
  27. data/lib/openc3/logs/stream_log_pair.rb +70 -0
  28. data/lib/openc3/microservices/cleanup_microservice.rb +1 -1
  29. data/lib/openc3/microservices/decom_microservice.rb +17 -2
  30. data/lib/openc3/microservices/interface_decom_common.rb +42 -0
  31. data/lib/openc3/microservices/interface_microservice.rb +24 -17
  32. data/lib/openc3/microservices/router_microservice.rb +46 -4
  33. data/lib/openc3/migrations/20221202214600_add_target_names.rb +1 -1
  34. data/lib/openc3/migrations/20230319154100_log_stream.rb +40 -0
  35. data/lib/openc3/migrations/20230413101100_remove_log.rb +30 -0
  36. data/lib/openc3/models/gem_model.rb +2 -2
  37. data/lib/openc3/models/interface_model.rb +13 -14
  38. data/lib/openc3/models/metadata_model.rb +1 -1
  39. data/lib/openc3/models/note_model.rb +1 -1
  40. data/lib/openc3/models/plugin_model.rb +3 -2
  41. data/lib/openc3/operators/operator.rb +2 -0
  42. data/lib/openc3/packets/commands.rb +2 -0
  43. data/lib/openc3/packets/packet_config.rb +3 -2
  44. data/lib/openc3/packets/parsers/xtce_converter.rb +2 -1
  45. data/lib/openc3/script/gems.rb +125 -0
  46. data/lib/openc3/script/plugins.rb +186 -0
  47. data/lib/openc3/script/screen.rb +119 -0
  48. data/lib/openc3/script/script.rb +3 -0
  49. data/lib/openc3/script/script_runner.rb +19 -8
  50. data/lib/openc3/script/suite_results.rb +2 -2
  51. data/lib/openc3/script/web_socket_api.rb +5 -1
  52. data/lib/openc3/streams/serial_stream.rb +14 -11
  53. data/lib/openc3/streams/tcpip_client_stream.rb +5 -2
  54. data/lib/openc3/streams/tcpip_socket_stream.rb +37 -71
  55. data/lib/openc3/streams/web_socket_client_stream.rb +5 -3
  56. data/lib/openc3/system/system.rb +2 -0
  57. data/lib/openc3/topics/interface_topic.rb +13 -4
  58. data/lib/openc3/topics/router_topic.rb +6 -6
  59. data/lib/openc3/topics/telemetry_decom_topic.rb +10 -1
  60. data/lib/openc3/utilities/bucket_utilities.rb +12 -5
  61. data/lib/openc3/utilities/cli_generator.rb +56 -4
  62. data/lib/openc3/utilities/crc.rb +42 -7
  63. data/lib/openc3/utilities/process_manager.rb +3 -1
  64. data/lib/openc3/utilities/ruby_lex_utils.rb +265 -504
  65. data/lib/openc3/version.rb +6 -6
  66. data/templates/conversion/conversion.rb +10 -2
  67. data/templates/microservice/microservices/TEMPLATE/microservice.rb +1 -1
  68. data/templates/plugin/Rakefile +8 -1
  69. data/templates/widget/.browserslistrc +16 -0
  70. data/templates/widget/.eslintrc.js +43 -0
  71. data/templates/widget/.nycrc +3 -0
  72. data/templates/widget/.prettierrc.js +5 -0
  73. data/templates/widget/LICENSE.txt +20 -0
  74. data/templates/widget/Rakefile +24 -0
  75. data/templates/widget/babel.config.json +11 -0
  76. data/templates/widget/package.json +35 -0
  77. data/templates/widget/src/Widget.vue +46 -0
  78. data/templates/widget/vue.config.js +25 -0
  79. data/templates/widget/yarn.lock +8938 -0
  80. metadata +23 -4
  81. data/lib/openc3/io/raw_logger.rb +0 -170
  82. data/lib/openc3/io/raw_logger_pair.rb +0 -80
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openc3
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.2
4
+ version: 5.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Melton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-03-16 00:00:00.000000000 Z
12
+ date: 2023-04-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -811,6 +811,7 @@ files:
811
811
  - lib/openc3/core_ext/stringio.rb
812
812
  - lib/openc3/core_ext/tempfile.rb
813
813
  - lib/openc3/core_ext/time.rb
814
+ - lib/openc3/ext/.keep
814
815
  - lib/openc3/interfaces.rb
815
816
  - lib/openc3/interfaces/interface.rb
816
817
  - lib/openc3/interfaces/linc_interface.rb
@@ -833,6 +834,7 @@ files:
833
834
  - lib/openc3/interfaces/udp_interface.rb
834
835
  - lib/openc3/io/buffered_file.rb
835
836
  - lib/openc3/io/io_multiplexer.rb
837
+ - lib/openc3/io/json_api.rb
836
838
  - lib/openc3/io/json_api_object.rb
837
839
  - lib/openc3/io/json_drb.rb
838
840
  - lib/openc3/io/json_drb_object.rb
@@ -840,8 +842,6 @@ files:
840
842
  - lib/openc3/io/json_rpc.rb
841
843
  - lib/openc3/io/openc3_snmp.rb
842
844
  - lib/openc3/io/posix_serial_driver.rb
843
- - lib/openc3/io/raw_logger.rb
844
- - lib/openc3/io/raw_logger_pair.rb
845
845
  - lib/openc3/io/serial_driver.rb
846
846
  - lib/openc3/io/stderr.rb
847
847
  - lib/openc3/io/stdout.rb
@@ -854,9 +854,12 @@ files:
854
854
  - lib/openc3/logs/packet_log_constants.rb
855
855
  - lib/openc3/logs/packet_log_reader.rb
856
856
  - lib/openc3/logs/packet_log_writer.rb
857
+ - lib/openc3/logs/stream_log.rb
858
+ - lib/openc3/logs/stream_log_pair.rb
857
859
  - lib/openc3/logs/text_log_writer.rb
858
860
  - lib/openc3/microservices/cleanup_microservice.rb
859
861
  - lib/openc3/microservices/decom_microservice.rb
862
+ - lib/openc3/microservices/interface_decom_common.rb
860
863
  - lib/openc3/microservices/interface_microservice.rb
861
864
  - lib/openc3/microservices/log_microservice.rb
862
865
  - lib/openc3/microservices/microservice.rb
@@ -871,6 +874,8 @@ files:
871
874
  - lib/openc3/microservices/trigger_group_microservice.rb
872
875
  - lib/openc3/migrations/20221202214600_add_target_names.rb
873
876
  - lib/openc3/migrations/20221210174900_convert_to_multi.rb
877
+ - lib/openc3/migrations/20230319154100_log_stream.rb
878
+ - lib/openc3/migrations/20230413101100_remove_log.rb
874
879
  - lib/openc3/models/activity_model.rb
875
880
  - lib/openc3/models/auth_model.rb
876
881
  - lib/openc3/models/cvt_model.rb
@@ -939,8 +944,11 @@ files:
939
944
  - lib/openc3/script/commands.rb
940
945
  - lib/openc3/script/exceptions.rb
941
946
  - lib/openc3/script/extract.rb
947
+ - lib/openc3/script/gems.rb
942
948
  - lib/openc3/script/limits.rb
943
949
  - lib/openc3/script/metadata.rb
950
+ - lib/openc3/script/plugins.rb
951
+ - lib/openc3/script/screen.rb
944
952
  - lib/openc3/script/script.rb
945
953
  - lib/openc3/script/script_runner.rb
946
954
  - lib/openc3/script/storage.rb
@@ -1031,6 +1039,17 @@ files:
1031
1039
  - templates/target/targets/TARGET/procedures/procedure.rb
1032
1040
  - templates/target/targets/TARGET/screens/status.txt
1033
1041
  - templates/target/targets/TARGET/target.txt
1042
+ - templates/widget/.browserslistrc
1043
+ - templates/widget/.eslintrc.js
1044
+ - templates/widget/.nycrc
1045
+ - templates/widget/.prettierrc.js
1046
+ - templates/widget/LICENSE.txt
1047
+ - templates/widget/Rakefile
1048
+ - templates/widget/babel.config.json
1049
+ - templates/widget/package.json
1050
+ - templates/widget/src/Widget.vue
1051
+ - templates/widget/vue.config.js
1052
+ - templates/widget/yarn.lock
1034
1053
  homepage: https://github.com/OpenC3/openc3
1035
1054
  licenses:
1036
1055
  - AGPL-3.0-only
@@ -1,170 +0,0 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2022 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU Affero General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
- #
11
- # This program is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU Affero General Public License for more details.
15
-
16
- # Modified by OpenC3, Inc.
17
- # All changes Copyright 2022, OpenC3, Inc.
18
- # All Rights Reserved
19
- #
20
- # This file may also be used under the terms of a commercial license
21
- # if purchased from OpenC3, Inc.
22
-
23
- require 'thread'
24
- require 'socket' # For gethostname
25
- require 'openc3/config/config_parser'
26
-
27
- module OpenC3
28
- # Creates a log file of raw data for either reads or writes. Can automatically
29
- # cycle the log based on when the log file reaches a predefined size.
30
- class RawLogger
31
- # @return [String] The filename of the log
32
- attr_reader :filename
33
-
34
- # @return [Queue] Queue for asynchronous logging
35
- attr_reader :queue
36
-
37
- # @return [Boolean] Is logging enabled?
38
- attr_reader :logging_enabled
39
-
40
- # @return [String] Original name passed to raw logger
41
- attr_reader :orig_name
42
-
43
- # The allowable log types
44
- LOG_TYPES = [:READ, :WRITE]
45
-
46
- # The cycle time interval. Cycle times are only checked at this level of
47
- # granularity.
48
- CYCLE_TIME_INTERVAL = 60
49
-
50
- # @param log_name [String] The name of the raw logger. Typically matches the
51
- # name of the corresponding interface
52
- # @param log_type [Symbol] The type of log to create. Must be :READ
53
- # or :WRITE.
54
- # @param log_directory [String] The directory to store the log files.
55
- # @param logging_enabled [Boolean] Whether to enable raw logging
56
- # @param cycle_size [Integer] The size in bytes before creating a new log file.
57
- def initialize(
58
- log_name,
59
- log_type,
60
- log_directory,
61
- logging_enabled = false,
62
- cycle_size = 2000000000
63
- )
64
- raise "log_type must be :READ or :WRITE" unless LOG_TYPES.include? log_type
65
-
66
- @log_type = log_type
67
- @orig_name = log_name
68
- @log_name = (log_name.to_s.downcase + '_raw_' + @log_type.to_s.downcase + '_' + self.object_id.to_s).freeze
69
- @log_directory = log_directory
70
- @cycle_size = ConfigParser.handle_nil(cycle_size)
71
- @cycle_size = Integer(@cycle_size) if @cycle_size
72
- @mutex = Mutex.new
73
- @file = nil
74
- @filename = nil
75
- @start_time = Time.now.sys
76
- @logging_enabled = ConfigParser.handle_true_false(logging_enabled)
77
- end
78
-
79
- # Set the raw logger name
80
- # @param log_name [String] new name
81
- def name=(log_name)
82
- @orig_name = log_name
83
- @log_name = (log_name.to_s.downcase + '_raw_' + @log_type.to_s.downcase + '_' + self.object_id.to_s).freeze
84
- end
85
-
86
- # Write data to the log file.
87
- #
88
- # If no log file currently exists in the filesystem, a new file will be
89
- # created.
90
- #
91
- # Writing a log file is a critical operation so the entire method is
92
- # wrapped with a rescue and handled with handle_critical_exception
93
- #
94
- # @param data [String] The data to write to the log file
95
- def write(data)
96
- if @logging_enabled
97
- return if !data or data.length <= 0
98
-
99
- need_new_file = false
100
- @mutex.synchronize do
101
- if !@file or (@cycle_size and (@file.stat.size + data.length) > @cycle_size)
102
- need_new_file = true
103
- end
104
- end
105
- start_new_file() if need_new_file
106
- @mutex.synchronize { @file.write(data) if @file }
107
- end
108
- rescue => err
109
- Logger.instance.error "Error writing #{@filename} : #{err.formatted}"
110
- OpenC3.handle_critical_exception(err)
111
- end
112
-
113
- # Starts a new log file by closing the existing log file. New log files are
114
- # not created until data is written by {#write} so this does not
115
- # immediately create a log file on the filesystem.
116
- def start
117
- close_file() unless (Time.now.sys - @start_time) < 1.0 # Prevent close/open too fast
118
- @mutex.synchronize { @logging_enabled = true }
119
- end
120
-
121
- # Stops all logging and closes the current log file.
122
- def stop
123
- @mutex.synchronize { @logging_enabled = false }
124
- close_file()
125
- end
126
-
127
- # Create a clone of this object with a new name
128
- def clone
129
- raw_logger = super()
130
- raw_logger.name = raw_logger.orig_name
131
- raw_logger
132
- end
133
-
134
- protected
135
-
136
- # Starting a new log file is a critical operation so the entire method is
137
- # wrapped with a rescue and handled with handle_critical_exception
138
- def start_new_file
139
- close_file()
140
- @mutex.synchronize do
141
- @filename = File.join(@log_directory, File.build_timestamped_filename([@log_name], '.bin'))
142
- @file = File.new(@filename, 'wb')
143
- @start_time = Time.now.sys
144
- Logger.instance.info "Raw Log File Opened : #{@filename}"
145
- end
146
- rescue => err
147
- Logger.instance.error "Error opening #{@filename} : #{err.formatted}"
148
- @logging_enabled = false
149
- OpenC3.handle_critical_exception(err)
150
- end
151
-
152
- # Closing a log file isn't critical so we just log an error
153
- def close_file
154
- @mutex.synchronize do
155
- if @file
156
- begin
157
- @file.close unless @file.closed?
158
- File.chmod(0444, @file.path) # Make file read only
159
- Logger.instance.info "Raw Log File Closed : #{@filename}"
160
- rescue => err
161
- Logger.instance.error "Error closing #{@filename} : #{err.formatted}"
162
- end
163
-
164
- @file = nil
165
- @filename = nil
166
- end
167
- end
168
- end
169
- end
170
- end
@@ -1,80 +0,0 @@
1
- # encoding: ascii-8bit
2
-
3
- # Copyright 2022 Ball Aerospace & Technologies Corp.
4
- # All Rights Reserved.
5
- #
6
- # This program is free software; you can modify and/or redistribute it
7
- # under the terms of the GNU Affero General Public License
8
- # as published by the Free Software Foundation; version 3 with
9
- # attribution addendums as found in the LICENSE.txt
10
- #
11
- # This program is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU Affero General Public License for more details.
15
-
16
- # Modified by OpenC3, Inc.
17
- # All changes Copyright 2022, OpenC3, Inc.
18
- # All Rights Reserved
19
- #
20
- # This file may also be used under the terms of a commercial license
21
- # if purchased from OpenC3, Inc.
22
-
23
- require 'openc3/io/raw_logger'
24
-
25
- module OpenC3
26
- # Holds a read/write pair of raw loggers
27
- class RawLoggerPair
28
- # @return [RawLogger] The read logger
29
- attr_accessor :read_logger
30
- # @return [RawLogger] The write logger
31
- attr_accessor :write_logger
32
-
33
- # @param name [String] name to be added to log filenames
34
- # @param log_directory [String] The directory to store the log files
35
- # @param params [Array] raw log writer parameters or empty array
36
- def initialize(name, log_directory, params = [])
37
- if params.empty?
38
- raw_logger_class = RawLogger
39
- else
40
- raw_logger_class = OpenC3.require_class(params[0])
41
- end
42
- if params[1]
43
- @read_logger = raw_logger_class.new(name, :READ, log_directory, *params[1..-1])
44
- @write_logger = raw_logger_class.new(name, :WRITE, log_directory, *params[1..-1])
45
- else
46
- @read_logger = raw_logger_class.new(name, :READ, log_directory)
47
- @write_logger = raw_logger_class.new(name, :WRITE, log_directory)
48
- end
49
- end
50
-
51
- # Change the raw logger name
52
- # @param name [String] new name
53
- def name=(name)
54
- @read_logger.name = name
55
- @write_logger.name = name
56
- end
57
-
58
- # Start raw logging
59
- def start
60
- @read_logger.start
61
- @write_logger.start
62
- end
63
-
64
- # Close any open raw data log files
65
- def stop
66
- @read_logger.stop
67
- @write_logger.stop
68
- end
69
-
70
- # Clone the raw logger pair
71
- def clone
72
- raw_logger_pair = super()
73
- raw_logger_pair.read_logger = @read_logger.clone
74
- raw_logger_pair.write_logger = @write_logger.clone
75
- raw_logger_pair.read_logger.start if @read_logger.logging_enabled
76
- raw_logger_pair.write_logger.start if @write_logger.logging_enabled
77
- raw_logger_pair
78
- end
79
- end
80
- end