openc3 5.11.3 → 5.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/bin/openc3cli +26 -12
- data/data/config/_id_items.yaml +6 -4
- data/data/config/_id_params.yaml +9 -6
- data/data/config/_items.yaml +6 -4
- data/data/config/_params.yaml +3 -2
- data/data/config/interface_modifiers.yaml +1 -1
- data/data/config/microservice.yaml +10 -1
- data/data/config/plugins.yaml +13 -3
- data/data/config/target.yaml +9 -0
- data/data/config/target_config.yaml +12 -0
- data/data/config/tool.yaml +12 -3
- data/lib/openc3/api/api.rb +1 -1
- data/lib/openc3/api/cmd_api.rb +24 -24
- data/lib/openc3/api/config_api.rb +12 -12
- data/lib/openc3/api/limits_api.rb +4 -3
- data/lib/openc3/api/settings_api.rb +5 -2
- data/lib/openc3/api/tlm_api.rb +7 -10
- data/lib/openc3/conversions/unix_time_conversion.rb +8 -6
- data/lib/openc3/interfaces/tcpip_server_interface.rb +0 -7
- data/lib/openc3/io/json_drb.rb +3 -2
- data/lib/openc3/io/json_rpc.rb +6 -6
- data/lib/openc3/logs/buffered_packet_log_writer.rb +4 -2
- data/lib/openc3/logs/packet_log_writer.rb +22 -7
- data/lib/openc3/microservices/cleanup_microservice.rb +8 -1
- data/lib/openc3/microservices/decom_microservice.rb +1 -1
- data/lib/openc3/microservices/interface_microservice.rb +2 -2
- data/lib/openc3/microservices/microservice.rb +5 -2
- data/lib/openc3/microservices/reaction_microservice.rb +1 -0
- data/lib/openc3/microservices/timeline_microservice.rb +7 -5
- data/lib/openc3/migrations/20231022000000_tlm_viewer_config.rb +22 -0
- data/lib/openc3/models/activity_model.rb +21 -3
- data/lib/openc3/models/cvt_model.rb +2 -1
- data/lib/openc3/models/gem_model.rb +4 -1
- data/lib/openc3/models/interface_model.rb +11 -5
- data/lib/openc3/models/metadata_model.rb +11 -0
- data/lib/openc3/models/microservice_model.rb +16 -3
- data/lib/openc3/models/model.rb +18 -0
- data/lib/openc3/models/note_model.rb +11 -0
- data/lib/openc3/models/plugin_model.rb +18 -0
- data/lib/openc3/models/python_package_model.rb +104 -0
- data/lib/openc3/models/scope_model.rb +2 -0
- data/lib/openc3/models/sorted_model.rb +17 -8
- data/lib/openc3/models/target_model.rb +53 -18
- data/lib/openc3/models/tool_config_model.rb +9 -3
- data/lib/openc3/models/tool_model.rb +22 -7
- data/lib/openc3/models/widget_model.rb +19 -3
- data/lib/openc3/operators/microservice_operator.rb +2 -0
- data/lib/openc3/packets/limits.rb +6 -18
- data/lib/openc3/packets/packet.rb +1 -0
- data/lib/openc3/packets/parsers/format_string_parser.rb +4 -4
- data/lib/openc3/packets/parsers/limits_parser.rb +4 -4
- data/lib/openc3/packets/parsers/limits_response_parser.rb +5 -5
- data/lib/openc3/packets/parsers/processor_parser.rb +4 -4
- data/lib/openc3/packets/parsers/state_parser.rb +3 -3
- data/lib/openc3/script/api_shared.rb +50 -32
- data/lib/openc3/script/calendar.rb +109 -0
- data/lib/openc3/script/commands.rb +1 -8
- data/lib/openc3/script/{gems.rb → packages.rb} +20 -16
- data/lib/openc3/script/script.rb +49 -38
- data/lib/openc3/system/system.rb +2 -0
- data/lib/openc3/system/target.rb +10 -1
- data/lib/openc3/top_level.rb +2 -2
- data/lib/openc3/utilities/aws_bucket.rb +3 -2
- data/lib/openc3/utilities/bucket_file_cache.rb +1 -1
- data/lib/openc3/utilities/local_mode.rb +3 -1
- data/lib/openc3/utilities/logger.rb +1 -1
- data/lib/openc3/utilities/ruby_lex_utils.rb +0 -8
- data/lib/openc3/version.rb +6 -6
- data/templates/tool_angular/package.json +14 -14
- data/templates/tool_angular/yarn.lock +282 -129
- data/templates/tool_react/package.json +11 -11
- data/templates/tool_react/yarn.lock +353 -300
- data/templates/tool_svelte/package.json +12 -12
- data/templates/tool_svelte/src/services/openc3-api.js +16 -60
- data/templates/tool_svelte/yarn.lock +338 -212
- data/templates/tool_vue/package.json +9 -9
- data/templates/tool_vue/yarn.lock +55 -41
- data/templates/widget/package.json +10 -10
- data/templates/widget/yarn.lock +59 -45
- metadata +36 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 056635373017dd511a8d049e778f59c7548c62dbae9b905effb03d447a0775ae
|
4
|
+
data.tar.gz: bfe11cbba1792a9741d06f0c3ea9365757d5a3fac0f873cb2a86597796521a11
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d113e832989cef2126d880d5bfb5281185bcf4d393066c8a58797c9178d49165be1c5179609baf665b4bc51d698c1dbd9ed038c580f20c66ac9bdd532eb03d15
|
7
|
+
data.tar.gz: 6c6010c3310998627247edb81bd3958206e1756d87973a0c601183bc3f50ad8fddd1a2d22fd85d2368c9094a59f7e27f1031b80606f4bce0839d373a71213cf5
|
data/Gemfile
CHANGED
@@ -7,11 +7,11 @@ gem 'ruby-termios', '>= 0.9' if RbConfig::CONFIG['target_os'] !~ /mswin|mingw|cy
|
|
7
7
|
gemspec :name => 'openc3'
|
8
8
|
|
9
9
|
# Include the rails gems for the convenience of custom microservice plugins
|
10
|
-
gem 'rails', '~> 7.
|
10
|
+
gem 'rails', '~> 7.1.0'
|
11
11
|
gem 'bootsnap', '>= 1.9.3', require: false
|
12
12
|
gem 'rack-cors', '~> 2.0'
|
13
13
|
gem 'tzinfo-data'
|
14
14
|
gem 'rspec-rails', '~> 6.0'
|
15
15
|
gem 'simplecov', '~> 0.20'
|
16
16
|
gem 'simplecov-cobertura', '~> 2.1'
|
17
|
-
gem 'mock_redis', '0.
|
17
|
+
gem 'mock_redis', '0.39'
|
data/bin/openc3cli
CHANGED
@@ -72,7 +72,8 @@ def print_usage
|
|
72
72
|
puts " cli bridge CONFIG_FILENAME # Run COSMOS host bridge"
|
73
73
|
puts " cli bridgegem gem_name variable1=value1 variable2=value2 # Runs bridge using gem bridge.txt"
|
74
74
|
puts " cli bridgesetup CONFIG_FILENAME # Create a default config file"
|
75
|
-
puts " cli
|
75
|
+
puts " cli pkginstall PKGFILENAME SCOPE # Install loaded package (Ruby gem or python package)"
|
76
|
+
puts " cli pkguninstall PKGFILENAME SCOPE # Uninstall loaded package (Ruby gem or python package)"
|
76
77
|
puts " cli rubysloc # Counts Ruby SLOC recursively. Run with --help for more info."
|
77
78
|
puts " cli xtce_converter # Convert to and from the XTCE format. Run with --help for more info."
|
78
79
|
puts " cli cstol_converter # Converts CSTOL files (.prc) to COSMOS. Run with --help for more info."
|
@@ -507,30 +508,43 @@ def unload_plugin(plugin_name, scope:)
|
|
507
508
|
end
|
508
509
|
end
|
509
510
|
|
510
|
-
def
|
511
|
+
def cli_pkg_install(filename, scope:)
|
511
512
|
scope ||= 'DEFAULT'
|
512
513
|
check_environment()
|
513
514
|
if $openc3_in_cluster
|
514
|
-
|
515
|
+
if File.extname(filename) == '.gem'
|
516
|
+
OpenC3::GemModel.install(filename, scope: scope)
|
517
|
+
else
|
518
|
+
OpenC3::PythonPackageModel.install(filename, scope: scope)
|
519
|
+
end
|
515
520
|
else
|
516
521
|
# Outside Cluster
|
517
522
|
require 'openc3/script'
|
518
|
-
process_name =
|
523
|
+
process_name = package_install(filename, scope: scope)
|
519
524
|
print "Installing..."
|
520
525
|
wait_process_complete(process_name)
|
521
526
|
end
|
522
527
|
end
|
523
528
|
|
524
|
-
def
|
529
|
+
def cli_pkg_uninstall(filename, scope:)
|
525
530
|
scope ||= 'DEFAULT'
|
526
531
|
check_environment()
|
527
532
|
if $openc3_in_cluster
|
528
|
-
|
533
|
+
if File.extname(filename) == '.rb'
|
534
|
+
OpenC3::GemModel.destroy(filename)
|
535
|
+
else
|
536
|
+
OpenC3::PythonPackageModel.destroy(filename, scope: scope)
|
537
|
+
end
|
529
538
|
else
|
530
539
|
# Outside Cluster
|
531
540
|
require 'openc3/script'
|
532
|
-
|
533
|
-
|
541
|
+
process_name = package_uninstall(filename, scope: scope)
|
542
|
+
if File.extname(filename) == '.rb'
|
543
|
+
puts "Uninstalled"
|
544
|
+
else
|
545
|
+
print "Uninstalling..."
|
546
|
+
wait_process_complete(process_name)
|
547
|
+
end
|
534
548
|
end
|
535
549
|
end
|
536
550
|
|
@@ -637,11 +651,11 @@ if not ARGV[0].nil? # argument(s) given
|
|
637
651
|
when 'unload'
|
638
652
|
unload_plugin(ARGV[1], scope: ARGV[2])
|
639
653
|
|
640
|
-
when 'geminstall'
|
641
|
-
|
654
|
+
when 'pkginstall', 'geminstall'
|
655
|
+
cli_pkg_install(ARGV[1], scope: ARGV[2])
|
642
656
|
|
643
|
-
when 'gemuninstall'
|
644
|
-
|
657
|
+
when 'pkguninstall', 'gemuninstall'
|
658
|
+
cli_pkg_uninstall(ARGV[1], scope: ARGV[2])
|
645
659
|
|
646
660
|
when 'generate'
|
647
661
|
OpenC3::CliGenerator.generate(ARGV[1..-1])
|
data/data/config/_id_items.yaml
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
---
|
2
2
|
- name: Bit Size
|
3
3
|
required: true
|
4
|
-
description:
|
4
|
+
description:
|
5
|
+
Bit size of this telemetry item. Zero or Negative values may be used
|
5
6
|
to indicate that a string fills the packet up to the offset from the end of
|
6
7
|
the packet specified by this value. If Bit Offset is 0 and Bit Size is 0 then
|
7
8
|
this is a derived parameter and the Data Type must be set to 'DERIVED'.
|
@@ -17,9 +18,10 @@
|
|
17
18
|
- name: Description
|
18
19
|
required: false
|
19
20
|
description: Description for this telemetry item which must be enclosed with quotes
|
20
|
-
values:
|
21
|
+
values: '[''"].*[''"]'
|
21
22
|
- name: Endianness
|
22
23
|
required: false
|
23
|
-
description:
|
24
|
-
|
24
|
+
description:
|
25
|
+
Indicates if the item is to be interpreted in Big Endian or Little Endian format.
|
26
|
+
See guide on [Little Endian Bitfields](../guides/little-endian-bitfields.md).
|
25
27
|
values: <%= %w(BIG_ENDIAN LITTLE_ENDIAN) %>
|
data/data/config/_id_params.yaml
CHANGED
@@ -22,17 +22,19 @@
|
|
22
22
|
values: .*
|
23
23
|
- name: ID Value
|
24
24
|
required: true
|
25
|
-
description:
|
25
|
+
description:
|
26
|
+
Identification value for this parameter. The binary data must
|
26
27
|
match this value for the buffer to be identified as this packet.
|
27
28
|
values: .*
|
28
29
|
- name: Description
|
29
30
|
required: false
|
30
31
|
description: Description for this parameter which must be enclosed with quotes
|
31
|
-
values:
|
32
|
+
values: '[''"].*[''"]'
|
32
33
|
- name: Endianness
|
33
34
|
required: false
|
34
|
-
description:
|
35
|
-
|
35
|
+
description:
|
36
|
+
Indicates if the data in this command is to be sent in Big Endian or Little Endian format.
|
37
|
+
See guide on [Little Endian Bitfields](../guides/little-endian-bitfields.md).
|
36
38
|
values: <%= %w(BIG_ENDIAN LITTLE_ENDIAN) %>
|
37
39
|
UINT:
|
38
40
|
parameters: *params
|
@@ -44,13 +46,14 @@
|
|
44
46
|
parameters: &sparams
|
45
47
|
- name: Default Value
|
46
48
|
required: true
|
47
|
-
description:
|
49
|
+
description:
|
50
|
+
Default value for this parameter. You must provide a default
|
48
51
|
but if you mark the parameter REQUIRED then scripts will be forced to specify a value.
|
49
52
|
values: .*
|
50
53
|
- name: Description
|
51
54
|
required: false
|
52
55
|
description: Description for this parameter which must be enclosed with quotes
|
53
|
-
values:
|
56
|
+
values: '[''"].*[''"]'
|
54
57
|
- name: Endianness
|
55
58
|
required: false
|
56
59
|
description: Indicates if the data in this command is to be sent in Big Endian or Little Endian format
|
data/data/config/_items.yaml
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
---
|
2
2
|
- name: Bit Size
|
3
3
|
required: true
|
4
|
-
description:
|
4
|
+
description:
|
5
|
+
Bit size of this telemetry item. Zero or Negative values may be used
|
5
6
|
to indicate that a string fills the packet up to the offset from the end of
|
6
7
|
the packet specified by this value. If Bit Offset is 0 and Bit Size is 0 then
|
7
8
|
this is a derived parameter and the Data Type must be set to 'DERIVED'.
|
@@ -13,9 +14,10 @@
|
|
13
14
|
- name: Description
|
14
15
|
required: false
|
15
16
|
description: Description for this telemetry item which must be enclosed with quotes
|
16
|
-
values:
|
17
|
+
values: '[''"].*[''"]'
|
17
18
|
- name: Endianness
|
18
19
|
required: false
|
19
|
-
description:
|
20
|
-
|
20
|
+
description:
|
21
|
+
Indicates if the item is to be interpreted in Big Endian or Little Endian format.
|
22
|
+
See guide on [Little Endian Bitfields](../guides/little-endian-bitfields.md).
|
21
23
|
values: <%= %w(BIG_ENDIAN LITTLE_ENDIAN) %>
|
data/data/config/_params.yaml
CHANGED
@@ -32,8 +32,9 @@
|
|
32
32
|
values: '[''"].*[''"]'
|
33
33
|
- name: Endianness
|
34
34
|
required: false
|
35
|
-
description:
|
36
|
-
|
35
|
+
description:
|
36
|
+
Indicates if the data in this command is to be sent in Big Endian or Little Endian format.
|
37
|
+
See guide on [Little Endian Bitfields](../guides/little-endian-bitfields.md).
|
37
38
|
values: <%= %w(BIG_ENDIAN LITTLE_ENDIAN) %>
|
38
39
|
UINT:
|
39
40
|
parameters: *params
|
@@ -93,7 +93,7 @@ PROTOCOL:
|
|
93
93
|
Protocols can be either READ, WRITE, or READ_WRITE. READ protocols act on the data
|
94
94
|
received by the interface while write acts on the data before it is sent out. READ_WRITE applies
|
95
95
|
the protocol to both reading and writing.<br/><br/>
|
96
|
-
For information on creating your own custom protocol please see
|
96
|
+
For information on creating your own custom protocol please see [Protocols](../configuration/protocols.md)
|
97
97
|
since: 4.0.0
|
98
98
|
parameters:
|
99
99
|
- name: Type
|
@@ -4,7 +4,7 @@ MICROSERVICE:
|
|
4
4
|
description: Defines a microservice that the plugin adds to the OpenC3 system. Microservices are background software processes that perform persistent processing.
|
5
5
|
parameters:
|
6
6
|
- name: Microservice Folder Name
|
7
|
-
description: The exact name of the microservice folder in the plugin. ie. microservices
|
7
|
+
description: The exact name of the microservice folder in the plugin. ie. microservices/MicroserviceFolderName
|
8
8
|
required: true
|
9
9
|
values: .+
|
10
10
|
- name: Microservice Name
|
@@ -148,3 +148,12 @@ MICROSERVICE:
|
|
148
148
|
example: |
|
149
149
|
MICROSERVICE CFDP CFDP
|
150
150
|
ROUTE_PREFIX /cfdp
|
151
|
+
DISABLE_ERB:
|
152
|
+
summary: Disable ERB processing
|
153
|
+
description: Disable ERB processing for the entire microservice or a set of regular expressions over its filenames
|
154
|
+
since: 5.12.0
|
155
|
+
parameters:
|
156
|
+
- name: Regex
|
157
|
+
required: false
|
158
|
+
description: Regex to match against filenames. If match, then no ERB processing
|
159
|
+
values: .+
|
data/data/config/plugins.yaml
CHANGED
@@ -40,7 +40,7 @@ INTERFACE:
|
|
40
40
|
description: Ruby file to use when instantiating the interface.
|
41
41
|
values:
|
42
42
|
<%= MetaConfigParser.load('_interfaces.yaml').to_meta_config_yaml(8) %>
|
43
|
-
documentation: Additional parameters are required. Please see the [Interfaces](/
|
43
|
+
documentation: Additional parameters are required. Please see the [Interfaces](../configuration/interfaces.md)
|
44
44
|
documentation for more details.
|
45
45
|
ROUTER:
|
46
46
|
modifiers:
|
@@ -60,7 +60,7 @@ ROUTER:
|
|
60
60
|
description: Ruby file to use when instantiating the interface.
|
61
61
|
values:
|
62
62
|
<%= MetaConfigParser.load('_interfaces.yaml').to_meta_config_yaml(8) %>
|
63
|
-
documentation: Additional parameters are required. Please see the [Interfaces](/
|
63
|
+
documentation: Additional parameters are required. Please see the [Interfaces](../configuration/interfaces.md)
|
64
64
|
documentation for more details.
|
65
65
|
<%= MetaConfigParser.load('target.yaml').to_meta_config_yaml() %>
|
66
66
|
<%= MetaConfigParser.load('microservice.yaml').to_meta_config_yaml() %>
|
@@ -71,7 +71,17 @@ WIDGET:
|
|
71
71
|
description: Defines a custom widget that can be used in Telemetry Viewer screens.
|
72
72
|
parameters:
|
73
73
|
- name: Widget Name
|
74
|
-
description: The name of the widget wil be used to build a path to the widget implementation. For example, `WIDGET HELLOWORLD` will find the as-built file tools/widgets/HelloworldWidget/HelloworldWidget.umd.min.js. See the [Custom Widgets](/
|
74
|
+
description: The name of the widget wil be used to build a path to the widget implementation. For example, `WIDGET HELLOWORLD` will find the as-built file tools/widgets/HelloworldWidget/HelloworldWidget.umd.min.js. See the [Custom Widgets](../guides/custom-widgets.md)
|
75
75
|
guide for more details.
|
76
76
|
required: true
|
77
77
|
values: .+
|
78
|
+
modifiers:
|
79
|
+
DISABLE_ERB:
|
80
|
+
summary: Disable ERB processing
|
81
|
+
description: Disable ERB processing for the entire widget or a set of regular expressions over its filenames
|
82
|
+
since: 5.12.0
|
83
|
+
parameters:
|
84
|
+
- name: Regex
|
85
|
+
required: false
|
86
|
+
description: Regex to match against filenames. If match, then no ERB processing
|
87
|
+
values: .+
|
data/data/config/target.yaml
CHANGED
@@ -187,3 +187,12 @@ TARGET:
|
|
187
187
|
description: The packet name. Does not apply to
|
188
188
|
REDUCER or CLEANUP target microservice types.
|
189
189
|
values: .*
|
190
|
+
DISABLE_ERB:
|
191
|
+
summary: Disable ERB processing
|
192
|
+
description: Disable ERB processing for the entire target or a set of regular expressions over its filenames
|
193
|
+
since: 5.12.0
|
194
|
+
parameters:
|
195
|
+
- name: Regex
|
196
|
+
required: false
|
197
|
+
description: Regex to match against filenames. If match, then no ERB processing
|
198
|
+
values: .+
|
@@ -1,4 +1,16 @@
|
|
1
1
|
---
|
2
|
+
LANGUAGE:
|
3
|
+
summary: Programming language of the target interfaces and microservices
|
4
|
+
description: The target language must be either Ruby or Python. The language
|
5
|
+
determines how the target's interfaces and microservices are run. Note that
|
6
|
+
both Ruby and Python still use ERB to perform templating.
|
7
|
+
example: LANGUAGE python
|
8
|
+
parameters:
|
9
|
+
- language: Programming language
|
10
|
+
required: true
|
11
|
+
description: Ruby or Python
|
12
|
+
values: ["ruby", "python"]
|
13
|
+
since: 5.11.1
|
2
14
|
REQUIRE:
|
3
15
|
summary: Requires a Ruby file
|
4
16
|
description:
|
data/data/config/tool.yaml
CHANGED
@@ -5,7 +5,7 @@ TOOL:
|
|
5
5
|
description: Defines a tool that the plugin adds to the OpenC3 system. Tools are web based applications that make use of the Single-SPA javascript library that allows them to by dynamically added to the running system as independent frontend microservices.
|
6
6
|
parameters:
|
7
7
|
- name: Tool Folder Name
|
8
|
-
description: The exact name of the tool folder in the plugin. ie. tools
|
8
|
+
description: The exact name of the tool folder in the plugin. ie. tools/ToolFolderName
|
9
9
|
required: true
|
10
10
|
values: .+
|
11
11
|
- name: Tool Name
|
@@ -15,11 +15,11 @@ TOOL:
|
|
15
15
|
modifiers:
|
16
16
|
URL:
|
17
17
|
summary: Url used to access the tool
|
18
|
-
description: The relative url used to access the tool. Defaults to "/tools
|
18
|
+
description: The relative url used to access the tool. Defaults to "/tools/ToolFolderName".
|
19
19
|
parameters:
|
20
20
|
- name: Url
|
21
21
|
required: true
|
22
|
-
description: The url. If not given defaults to tools
|
22
|
+
description: The url. If not given defaults to tools/ToolFolderName. Generally should not be given unless linking to external tools.
|
23
23
|
values: .+
|
24
24
|
INLINE_URL:
|
25
25
|
summary: Internal url to load a tool
|
@@ -70,3 +70,12 @@ TOOL:
|
|
70
70
|
required: true
|
71
71
|
description: Numerical position
|
72
72
|
values: \d+
|
73
|
+
DISABLE_ERB:
|
74
|
+
summary: Disable ERB processing
|
75
|
+
description: Disable ERB processing for the entire tool or a set of regular expressions over its filenames
|
76
|
+
since: 5.12.0
|
77
|
+
parameters:
|
78
|
+
- name: Regex
|
79
|
+
required: false
|
80
|
+
description: Regex to match against filenames. If match, then no ERB processing
|
81
|
+
values: .+
|
data/lib/openc3/api/api.rb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
# GNU Affero General Public License for more details.
|
15
15
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
|
-
# All changes Copyright
|
17
|
+
# All changes Copyright 2023, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
19
|
#
|
20
20
|
# This file may also be used under the terms of a commercial license
|
data/lib/openc3/api/cmd_api.rb
CHANGED
@@ -62,39 +62,39 @@ module OpenC3
|
|
62
62
|
#
|
63
63
|
# Favor the first syntax where possible as it is more succinct.
|
64
64
|
def cmd(*args, **kwargs)
|
65
|
-
|
65
|
+
_cmd_implementation('cmd', *args, range_check: true, hazardous_check: true, raw: false, **kwargs)
|
66
66
|
end
|
67
67
|
def cmd_raw(*args, **kwargs)
|
68
|
-
|
68
|
+
_cmd_implementation('cmd_raw', *args, range_check: true, hazardous_check: true, raw: true, **kwargs)
|
69
69
|
end
|
70
70
|
|
71
71
|
# Send a command packet to a target without performing any value range
|
72
72
|
# checks on the parameters. Useful for testing to allow sending command
|
73
73
|
# parameters outside the allowable range as defined in the configuration.
|
74
74
|
def cmd_no_range_check(*args, **kwargs)
|
75
|
-
|
75
|
+
_cmd_implementation('cmd_no_range_check', *args, range_check: false, hazardous_check: true, raw: false, **kwargs)
|
76
76
|
end
|
77
77
|
def cmd_raw_no_range_check(*args, **kwargs)
|
78
|
-
|
78
|
+
_cmd_implementation('cmd_raw_no_range_check', *args, range_check: false, hazardous_check: true, raw: true, **kwargs)
|
79
79
|
end
|
80
80
|
|
81
81
|
# Send a command packet to a target without performing any hazardous checks
|
82
82
|
# both on the command itself and its parameters. Useful in scripts to
|
83
83
|
# prevent popping up warnings to the user.
|
84
84
|
def cmd_no_hazardous_check(*args, **kwargs)
|
85
|
-
|
85
|
+
_cmd_implementation('cmd_no_hazardous_check', *args, range_check: true, hazardous_check: false, raw: false, **kwargs)
|
86
86
|
end
|
87
87
|
def cmd_raw_no_hazardous_check(*args, **kwargs)
|
88
|
-
|
88
|
+
_cmd_implementation('cmd_raw_no_hazardous_check', *args, range_check: true, hazardous_check: false, raw: true, **kwargs)
|
89
89
|
end
|
90
90
|
|
91
91
|
# Send a command packet to a target without performing any value range
|
92
92
|
# checks or hazardous checks both on the command itself and its parameters.
|
93
93
|
def cmd_no_checks(*args, **kwargs)
|
94
|
-
|
94
|
+
_cmd_implementation('cmd_no_checks', *args, range_check: false, hazardous_check: false, raw: false, **kwargs)
|
95
95
|
end
|
96
96
|
def cmd_raw_no_checks(*args, **kwargs)
|
97
|
-
|
97
|
+
_cmd_implementation('cmd_raw_no_checks', *args, range_check: false, hazardous_check: false, raw: true, **kwargs)
|
98
98
|
end
|
99
99
|
|
100
100
|
# Build a command binary
|
@@ -285,7 +285,7 @@ module OpenC3
|
|
285
285
|
target_name = target_name.upcase
|
286
286
|
command_name = command_name.upcase
|
287
287
|
time = CommandDecomTopic.get_cmd_item(target_name, command_name, 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
|
288
|
-
[target_name, command_name, time.to_i, ((time.to_f - time.to_i) * 1_000_000).to_i]
|
288
|
+
return [target_name, command_name, time.to_i, ((time.to_f - time.to_i) * 1_000_000).to_i]
|
289
289
|
else
|
290
290
|
if target_name.nil?
|
291
291
|
targets = TargetModel.names(scope: scope)
|
@@ -293,21 +293,22 @@ module OpenC3
|
|
293
293
|
target_name = target_name.upcase
|
294
294
|
targets = [target_name]
|
295
295
|
end
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
TargetModel.packets(
|
300
|
-
cur_time = CommandDecomTopic.get_cmd_item(
|
296
|
+
time = 0
|
297
|
+
command_name = nil
|
298
|
+
targets.each do |cur_target|
|
299
|
+
TargetModel.packets(cur_target, type: :CMD, scope: scope).each do |packet|
|
300
|
+
cur_time = CommandDecomTopic.get_cmd_item(cur_target, packet["packet_name"], 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
|
301
301
|
next unless cur_time
|
302
302
|
|
303
303
|
if cur_time > time
|
304
304
|
time = cur_time
|
305
305
|
command_name = packet["packet_name"]
|
306
|
+
target_name = cur_target
|
306
307
|
end
|
307
308
|
end
|
308
|
-
target_name = nil unless command_name
|
309
|
-
return [target_name, command_name, time.to_i, ((time.to_f - time.to_i) * 1_000_000).to_i]
|
310
309
|
end
|
310
|
+
target_name = nil unless command_name
|
311
|
+
return [target_name, command_name, time.to_i, ((time.to_f - time.to_i) * 1_000_000).to_i]
|
311
312
|
end
|
312
313
|
end
|
313
314
|
|
@@ -330,6 +331,9 @@ module OpenC3
|
|
330
331
|
# @return [Numeric] Transmit count for the command
|
331
332
|
def get_cmd_cnts(target_commands, scope: $openc3_scope, token: $openc3_token)
|
332
333
|
authorize(permission: 'system', scope: scope, token: token)
|
334
|
+
unless target_commands.is_a?(Array) and target_commands[0].is_a?(Array)
|
335
|
+
raise "get_cmd_cnts takes an array of arrays containing target, packet_name, e.g. [['INST', 'COLLECT'], ['INST', 'ABORT']]"
|
336
|
+
end
|
333
337
|
counts = []
|
334
338
|
target_commands.each do |target_name, command_name|
|
335
339
|
target_name = target_name.upcase
|
@@ -343,7 +347,7 @@ module OpenC3
|
|
343
347
|
# PRIVATE implementation details
|
344
348
|
###########################################################################
|
345
349
|
|
346
|
-
def
|
350
|
+
def _cmd_implementation(method_name, *args, range_check:, hazardous_check:, raw:, timeout: nil, log_message: nil,
|
347
351
|
scope: $openc3_scope, token: $openc3_token, **kwargs)
|
348
352
|
extract_string_kwargs_to_args(args, kwargs)
|
349
353
|
unless [nil, true, false].include?(log_message)
|
@@ -399,17 +403,13 @@ module OpenC3
|
|
399
403
|
end
|
400
404
|
end
|
401
405
|
if log_message
|
402
|
-
Logger.info(
|
406
|
+
Logger.info(_build_cmd_output_string(method_name, target_name, cmd_name, cmd_params, packet), scope: scope)
|
403
407
|
end
|
404
408
|
CommandTopic.send_command(command, timeout: timeout, scope: scope)
|
405
409
|
end
|
406
410
|
|
407
|
-
def
|
408
|
-
|
409
|
-
output_string = 'cmd_raw("'
|
410
|
-
else
|
411
|
-
output_string = 'cmd("'
|
412
|
-
end
|
411
|
+
def _build_cmd_output_string(method_name, target_name, cmd_name, cmd_params, packet)
|
412
|
+
output_string = "#{method_name}(\""
|
413
413
|
output_string << target_name + ' ' + cmd_name
|
414
414
|
if cmd_params.nil? or cmd_params.empty?
|
415
415
|
output_string << '")'
|
@@ -14,10 +14,10 @@
|
|
14
14
|
# GNU Affero General Public License for more details.
|
15
15
|
|
16
16
|
# Modified by OpenC3, Inc.
|
17
|
-
# All changes Copyright
|
17
|
+
# All changes Copyright 2023, OpenC3, Inc.
|
18
18
|
# All Rights Reserved
|
19
19
|
#
|
20
|
-
# This file may also be used under the terms of a commercial license
|
20
|
+
# This file may also be used under the terms of a commercial license
|
21
21
|
# if purchased from OpenC3, Inc.
|
22
22
|
|
23
23
|
require 'openc3/models/tool_config_model'
|
@@ -26,16 +26,16 @@ module OpenC3
|
|
26
26
|
module Api
|
27
27
|
WHITELIST ||= []
|
28
28
|
WHITELIST.concat([
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
29
|
+
'config_tool_names',
|
30
|
+
'list_configs',
|
31
|
+
'load_config',
|
32
|
+
'save_config',
|
33
|
+
'delete_config'
|
34
|
+
])
|
35
|
+
|
36
|
+
def config_tool_names(scope: $openc3_scope, token: $openc3_token)
|
37
|
+
authorize(permission: 'system', scope: scope, token: token)
|
38
|
+
ToolConfigModel.config_tool_names(scope: scope)
|
39
39
|
end
|
40
40
|
|
41
41
|
def list_configs(tool, scope: $openc3_scope, token: $openc3_token)
|
@@ -109,10 +109,11 @@ module OpenC3
|
|
109
109
|
# @param args [String|Array<String>] See the description for calling style
|
110
110
|
# @return [Boolean] Whether limits are enable for the itme
|
111
111
|
def limits_enabled?(*args, scope: $openc3_scope, token: $openc3_token)
|
112
|
-
target_name, packet_name, item_name =
|
112
|
+
target_name, packet_name, item_name = _tlm_process_args(args, 'limits_enabled?', scope: scope)
|
113
113
|
authorize(permission: 'tlm', target_name: target_name, packet_name: packet_name, scope: scope, token: token)
|
114
114
|
return TargetModel.packet_item(target_name, packet_name, item_name, scope: scope)['limits']['enabled'] ? true : false
|
115
115
|
end
|
116
|
+
alias limits_enabled limits_enabled?
|
116
117
|
|
117
118
|
# Enable limits checking for a telemetry item
|
118
119
|
#
|
@@ -124,7 +125,7 @@ module OpenC3
|
|
124
125
|
#
|
125
126
|
# @param args [String|Array<String>] See the description for calling style
|
126
127
|
def enable_limits(*args, scope: $openc3_scope, token: $openc3_token)
|
127
|
-
target_name, packet_name, item_name =
|
128
|
+
target_name, packet_name, item_name = _tlm_process_args(args, 'enable_limits', scope: scope)
|
128
129
|
authorize(permission: 'tlm_set', target_name: target_name, packet_name: packet_name, scope: scope, token: token)
|
129
130
|
packet = TargetModel.packet(target_name, packet_name, scope: scope)
|
130
131
|
found_item = nil
|
@@ -157,7 +158,7 @@ module OpenC3
|
|
157
158
|
#
|
158
159
|
# @param args [String|Array<String>] See the description for calling style
|
159
160
|
def disable_limits(*args, scope: $openc3_scope, token: $openc3_token)
|
160
|
-
target_name, packet_name, item_name =
|
161
|
+
target_name, packet_name, item_name = _tlm_process_args(args, 'disable_limits', scope: scope)
|
161
162
|
authorize(permission: 'tlm_set', target_name: target_name, packet_name: packet_name, scope: scope, token: token)
|
162
163
|
packet = TargetModel.packet(target_name, packet_name, scope: scope)
|
163
164
|
found_item = nil
|
@@ -30,7 +30,8 @@ module OpenC3
|
|
30
30
|
'get_all_settings',
|
31
31
|
'get_setting',
|
32
32
|
'get_settings',
|
33
|
-
'
|
33
|
+
'set_setting',
|
34
|
+
'save_setting' # DEPRECATED
|
34
35
|
])
|
35
36
|
|
36
37
|
def list_settings(scope: $openc3_scope, token: $openc3_token)
|
@@ -60,10 +61,12 @@ module OpenC3
|
|
60
61
|
result
|
61
62
|
end
|
62
63
|
|
63
|
-
def
|
64
|
+
def set_setting(name, data, scope: $openc3_scope, token: $openc3_token)
|
64
65
|
authorize(permission: 'admin', scope: scope, token: token)
|
65
66
|
SettingModel.set({ name: name, data: data }, scope: scope)
|
66
67
|
LocalMode.save_setting(scope, name, data)
|
67
68
|
end
|
69
|
+
# save_setting is DEPRECATED
|
70
|
+
alias save_setting set_setting
|
68
71
|
end
|
69
72
|
end
|