cosmos 5.0.2.pre.beta2 → 5.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/bin/cosmos +1 -1
  3. data/data/config/microservice.yaml +47 -35
  4. data/data/config/plugins.yaml +3 -150
  5. data/data/config/target.yaml +70 -0
  6. data/data/config/tool.yaml +37 -31
  7. data/lib/cosmos/api/api.rb +1 -25
  8. data/lib/cosmos/api/cmd_api.rb +17 -6
  9. data/lib/cosmos/api/config_api.rb +10 -4
  10. data/lib/cosmos/api/limits_api.rb +1 -1
  11. data/lib/cosmos/api/settings_api.rb +19 -7
  12. data/lib/cosmos/api/target_api.rb +2 -2
  13. data/lib/cosmos/api/tlm_api.rb +69 -41
  14. data/lib/cosmos/config/config_parser.rb +19 -22
  15. data/lib/cosmos/config/meta_config_parser.rb +1 -1
  16. data/lib/cosmos/conversions/generic_conversion.rb +2 -2
  17. data/lib/cosmos/conversions/polynomial_conversion.rb +5 -8
  18. data/lib/cosmos/conversions/segmented_polynomial_conversion.rb +26 -9
  19. data/lib/cosmos/io/json_drb.rb +5 -1
  20. data/lib/cosmos/logs/log_writer.rb +2 -2
  21. data/lib/cosmos/microservices/cleanup_microservice.rb +28 -29
  22. data/lib/cosmos/microservices/decom_microservice.rb +1 -1
  23. data/lib/cosmos/microservices/interface_microservice.rb +0 -1
  24. data/lib/cosmos/microservices/microservice.rb +3 -3
  25. data/lib/cosmos/microservices/reducer_microservice.rb +12 -10
  26. data/lib/cosmos/models/cvt_model.rb +6 -6
  27. data/lib/cosmos/models/gem_model.rb +3 -3
  28. data/lib/cosmos/models/info_model.rb +1 -1
  29. data/lib/cosmos/models/interface_status_model.rb +1 -1
  30. data/lib/cosmos/models/metadata_model.rb +42 -216
  31. data/lib/cosmos/models/metric_model.rb +2 -2
  32. data/lib/cosmos/models/microservice_model.rb +1 -1
  33. data/lib/cosmos/models/microservice_status_model.rb +1 -1
  34. data/lib/cosmos/models/model.rb +16 -16
  35. data/lib/cosmos/models/note_model.rb +124 -0
  36. data/lib/cosmos/models/ping_model.rb +2 -1
  37. data/lib/cosmos/models/plugin_model.rb +1 -1
  38. data/lib/cosmos/models/process_status_model.rb +1 -1
  39. data/lib/cosmos/models/scope_model.rb +9 -26
  40. data/lib/cosmos/models/settings_model.rb +55 -0
  41. data/lib/cosmos/models/sorted_model.rb +165 -0
  42. data/lib/cosmos/models/target_model.rb +120 -13
  43. data/lib/cosmos/models/tool_config_model.rb +38 -0
  44. data/lib/cosmos/models/tool_model.rb +1 -1
  45. data/lib/cosmos/models/widget_model.rb +1 -1
  46. data/lib/cosmos/operators/microservice_operator.rb +2 -1
  47. data/lib/cosmos/packets/packet.rb +23 -0
  48. data/lib/cosmos/packets/packet_config.rb +2 -2
  49. data/lib/cosmos/packets/packet_item.rb +57 -0
  50. data/lib/cosmos/packets/packet_item_limits.rb +14 -2
  51. data/lib/cosmos/packets/parsers/packet_item_parser.rb +1 -1
  52. data/lib/cosmos/packets/parsers/packet_parser.rb +1 -1
  53. data/lib/cosmos/packets/parsers/xtce_parser.rb +1 -1
  54. data/lib/cosmos/packets/structure_item.rb +10 -1
  55. data/lib/cosmos/script/api_shared.rb +30 -25
  56. data/lib/cosmos/script/calendar.rb +26 -15
  57. data/lib/cosmos/script/commands.rb +5 -7
  58. data/lib/cosmos/script/script.rb +19 -39
  59. data/lib/cosmos/script/storage.rb +92 -105
  60. data/lib/cosmos/system/system.rb +2 -1
  61. data/lib/cosmos/tools/table_manager/table_item.rb +1 -1
  62. data/lib/cosmos/top_level.rb +5 -1
  63. data/lib/cosmos/topics/autonomic_topic.rb +2 -2
  64. data/lib/cosmos/topics/calendar_topic.rb +1 -1
  65. data/lib/cosmos/topics/command_decom_topic.rb +35 -1
  66. data/lib/cosmos/topics/command_topic.rb +6 -4
  67. data/lib/cosmos/topics/interface_topic.rb +8 -8
  68. data/lib/cosmos/topics/limits_event_topic.rb +5 -3
  69. data/lib/cosmos/topics/notifications_topic.rb +1 -1
  70. data/lib/cosmos/topics/router_topic.rb +9 -9
  71. data/lib/cosmos/topics/telemetry_decom_topic.rb +5 -1
  72. data/lib/cosmos/topics/telemetry_topic.rb +1 -1
  73. data/lib/cosmos/topics/timeline_topic.rb +1 -1
  74. data/lib/cosmos/topics/topic.rb +23 -8
  75. data/lib/cosmos/utilities/logger.rb +4 -3
  76. data/lib/cosmos/utilities/metric.rb +32 -26
  77. data/lib/cosmos/utilities/s3.rb +61 -0
  78. data/lib/cosmos/utilities/s3_file_cache.rb +12 -6
  79. data/lib/cosmos/utilities/store.rb +1 -0
  80. data/lib/cosmos/utilities/store_autoload.rb +25 -134
  81. data/lib/cosmos/version.rb +6 -5
  82. data/templates/plugin-template/plugin.gemspec +0 -2
  83. metadata +9 -6
  84. data/lib/cosmos/models/narrative_model.rb +0 -280
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d4390bab17eaae8211e4f962d86736d5c3a421a019c5111f977fc223c7389ef
4
- data.tar.gz: bdda929cc3e78a3ba006dec4cc125cd90a666adb986ac64581d4106cb73f470a
3
+ metadata.gz: 5a561fd5492c1b282759d45170da4e687b4e53eea086804bde1c549a75a8bdd5
4
+ data.tar.gz: c88407b16125e7ef2fb9764dd14338f6508e2fbde1567ff3b7d23b24f1b7dd2a
5
5
  SHA512:
6
- metadata.gz: '009d045601a68a022b85e0e6c691640c3c796f3276608b0cd749f4ff5cedda2629990b36a2e5aefb6360f05a6874b0587a90579dcf6c5d4919e0b8d913de40d8'
7
- data.tar.gz: e68942874d1957d51f6ab7f355c24220edbdf082aa8b3b441d20997e6fb7f870c5837026cb1a75c8e2a43ff5e7044094c78887c5e24632e053cdeadfb2d51a44
6
+ metadata.gz: f80a81b27f8c00611a730ef329b4c4afc01e572419ee03d1c7621295e2670a1e829d41511ee4a82af5874d43d32f7b51280281c26310ee8f1e79e767e987c542
7
+ data.tar.gz: 14f36f225ac641ca74dac4eca580ffad8e6ffea7d69bed1c685d387db0ff6d3977c6ad8b148b8a8117914bd7752914423d2691aa899b0ec902fde5c25f4e931a
data/bin/cosmos CHANGED
@@ -99,7 +99,7 @@ def generate(args)
99
99
  end
100
100
  base_name.sub!("target.rb", target_lib_filename)
101
101
  base_name.sub!("plugin.gemspec", "#{plugin_name}.gemspec")
102
- output = ERB.new(File.read(file)).result(b)
102
+ output = ERB.new(File.read(file), trim_mode: "-").result(b)
103
103
  File.open(base_name, 'w') do |file|
104
104
  file.write output
105
105
  end
@@ -2,65 +2,77 @@
2
2
  MICROSERVICE:
3
3
  summary: Defines a new microservice
4
4
  example: MICROSERVICE EXAMPLE example-microservice
5
+ description: Defines a microservice that the plugin adds to the COSMOS system. Microservices are background software processes that perform persistent processing.
5
6
  parameters:
6
- - name: Folder Name
7
+ - name: Microservice Folder Name
8
+ description: The exact name of the microservice folder in the plugin. ie. microservices/<Microservice Folder Name>
7
9
  required: true
8
- description: The target folder where the microservice is located
9
- values: .*
10
- - name: Name
10
+ values: .+
11
+ - name: Microservice Name
12
+ description: The specific name of this instance of the microservice in the COSMOS system
11
13
  required: true
12
- description: The microservice name
13
- values: .*
14
+ values: .+
14
15
  modifiers:
15
16
  ENV:
16
- summary: Environment variable
17
+ summary: Sets an environment variable in the microservice.
17
18
  parameters:
18
- - name: Name
19
+ - name: Key
19
20
  required: true
20
21
  description: Environment variable name
21
- values: .*
22
+ values: .+
22
23
  - name: Value
23
24
  required: true
24
25
  description: Environment variable value
25
- values: .*
26
+ values: .+
26
27
  WORK_DIR:
27
- summary: Directory to start the microservice in (CWD)
28
+ summary: Set the working directory
29
+ description: Working directory to run the microservice CMD in. Can be a path relative to the microservice folder in the plugin, or an absolute path in the container the microservice runs in.
28
30
  parameters:
29
- - name: Path
31
+ - name: Directory
30
32
  required: true
31
- description: Relative path from the target directory
32
- values: .*
33
+ description: Working directory to run the microservice CMD in. Can be a path relative to the microservice folder in the plugin, or an absolute path in the container the microservice runs in.
34
+ values: .+
33
35
  TOPIC:
34
- summary: Topic the microservice should process data from
36
+ summary: Associate a Redis topic
37
+ description: Redis topic to associate with this microservice. Standard COSMOS microservices such as decom_microservice use this information to know what packet streams to subscribe to. The TOPIC keyword can be used as many times as necessary to associate all needed topics.
35
38
  parameters:
36
- - name: Name
39
+ - name: Topic Name
37
40
  required: true
38
- description: Topic name
39
- values: .*
41
+ description: Redis Topic to associate with the microservice
42
+ values: .+
40
43
  TARGET_NAME:
41
- summary: Target which this microservice processes
44
+ summary: Associate a COSMOS target
45
+ description: COSMOS target to associate with the microservice. For standard COSMOS microservices such as decom_microservice this causes the target configuration to get loaded into the container for the microservice.
42
46
  parameters:
43
- - name: Name
47
+ - name: Target Name
44
48
  required: true
45
- description: Target name
46
- values: .*
49
+ description: COSMOS target to associate with the microservice
50
+ values: .+
47
51
  CMD:
48
- summary: Command to run which starts the microservice
52
+ summary: Command line to execute to run the microservice.
53
+ description: Command line to execute to run the microservice.
49
54
  parameters:
50
- - name: Executable
55
+ - name: Args
51
56
  required: true
52
- description: Executable to call
53
- values: .*
54
- - name: Command parameters
55
- required: false
56
- description: Additional parameters used by the command
57
+ description: One or more arguments to exec to run the microservice.
58
+ values: .+
57
59
  OPTION:
58
- summary: Options to pass to the underlying microservice (used by InterfaceMicroservice, etc.)
60
+ summary: Pass an option to the microservice
61
+ description: Generic key/value(s) options to pass to the microservice. These take the form of KEYWORD/PARAMS like a line in a COSMOS configuration file. Multiple OPTION keywords can be used to pass multiple options to the microservice.
59
62
  parameters:
60
- - name: Name
63
+ - name: Option Name
64
+ required: true
65
+ description: Name of the option
66
+ values: .+
67
+ - name: Option Value(s)
61
68
  required: true
62
- description: Option name
63
- values: .*
64
- - name: Values
69
+ description: One or more values to associate with the option
70
+ values: .+
71
+ CONTAINER:
72
+ summary: Docker Container.
73
+ description: Container to execute and run the microservice in.
74
+ parameters:
75
+ - name: Args
65
76
  required: false
66
- description: Option values
77
+ description: Name of the container
78
+ values: .+
@@ -65,153 +65,6 @@ ROUTER:
65
65
  <%= MetaConfigParser.load('_interfaces.yaml').to_meta_config_yaml(8) %>
66
66
  documentation: Additional parameters are required. Please see the [Interfaces](/docs/v5/interfaces)
67
67
  documentation for more details.
68
- TARGET:
69
- summary: Define a target
70
- description: Defines a target that the plugin adds to the COSMOS system. Targets are entities that COSMOS can send commands to and receive telemetry from.
71
- parameters:
72
- - name: Target Folder Name
73
- description: The exact name of the target folder in the plugin. ie. targets/<Target Folder Name>
74
- required: true
75
- values: .+
76
- - name: Target Name
77
- description: The specific name of this instance of the target in the COSMOS system
78
- required: true
79
- values: .+
80
- MICROSERVICE:
81
- summary: Define a microservice
82
- description: Defines a microservice that the plugin adds to the COSMOS system. Microservices are background software processes that perform persistent processing.
83
- parameters:
84
- - name: Microservice Folder Name
85
- description: The exact name of the microservice folder in the plugin. ie. microservices/<Microservice Folder Name>
86
- required: true
87
- values: .+
88
- - name: Microservice Name
89
- description: The specific name of this instance of the microservice in the COSMOS system
90
- required: true
91
- values: .+
92
- modifiers:
93
- ENV:
94
- summary: Sets an environment variable in the microservice.
95
- description: Sets an environment variable in the microservice.
96
- parameters:
97
- - name: Key
98
- required: true
99
- description: Name of the environment variable
100
- values: .+
101
- - name: Value
102
- required: true
103
- description: Value of the environment variable
104
- values: .+
105
- WORK_DIR:
106
- summary: Set the working directory
107
- description: Working directory to run the microservice CMD in. Can be a path relative to the microservice folder in the plugin, or an absolute path in the container the microservice runs in.
108
- parameters:
109
- - name: Directory
110
- required: true
111
- description: Working directory to run the microservice CMD in. Can be a path relative to the microservice folder in the plugin, or an absolute path in the container the microservice runs in.
112
- values: .+
113
- TOPIC:
114
- summary: Associate a Redis topic
115
- description: Redis topic to associate with this microservice. Standard COSMOS microservices such as decom_microservice use this information to know what packet streams to subscribe to. The TOPIC keyword can be used as many times as necessary to associate all needed topics.
116
- parameters:
117
- - name: Topic Name
118
- required: true
119
- description: Redis Topic to associate with the microservice
120
- values: .+
121
- TARGET_NAME:
122
- summary: Associate a COSMOS target
123
- description: COSMOS target to associate with the microservice. For standard COSMOS microservices such as decom_microservice this causes the target configuration to get loaded into the container for the microservice.
124
- parameters:
125
- - name: Target Name
126
- required: true
127
- description: COSMOS target to associate with the microservice
128
- values: .+
129
- CMD:
130
- summary: Command line to execute to run the microservice.
131
- description: Command line to execute to run the microservice.
132
- parameters:
133
- - name: Args
134
- required: true
135
- description: One or more arguments to exec to run the microservice.
136
- values: .+
137
- CONTAINER:
138
- summary: Docker Container.
139
- description: Container to execute and run the microservice in.
140
- parameters:
141
- - name: Args
142
- required: false
143
- description: Name of the container
144
- values: .+
145
- OPTION:
146
- summary: Pass an option to the microservice
147
- description: Generic key/value(s) options to pass to the microservice. These take the form of KEYWORD/PARAMS like a line in a COSMOS configuration file. Multiple OPTION keywords can be used to pass multiple options to the microservice.
148
- parameters:
149
- - name: Option Name
150
- required: true
151
- description: Name of the option
152
- values: .+
153
- - name: Option Value(s)
154
- required: true
155
- description: One or more values to associate with the option
156
- values: .+
157
- TOOL:
158
- summary: Define a tool
159
- description: Defines a tool that the plugin adds to the COSMOS 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.
160
- parameters:
161
- - name: Tool Folder Name
162
- description: The exact name of the tool folder in the plugin. ie. tools/<Tool Folder Name>
163
- required: true
164
- values: .+
165
- - name: Tool Name
166
- description: Name of the tool that is displayed in the COSMOS Navigation menu
167
- required: true
168
- values: .+
169
- modifiers:
170
- URL:
171
- summary: Url used to access the tool
172
- description: The relative url used to access the tool. Defaults to "/tools/<Tool Folder Name>".
173
- parameters:
174
- - name: Url
175
- required: true
176
- description: The url. If not given defaults to tools/<Tool Folder Name>. Generally should not be given unless linking to external tools.
177
- values: .+
178
- INLINE_URL:
179
- summary: Internal url to load a tool
180
- description: The url of the javascript file used to load the tool into single-SPA. Defaults to "js/app.js".
181
- parameters:
182
- - name: Url
183
- required: true
184
- description: The inline url. If not given defaults to js/app.js. Generally should not be given unless using a non-standard filename.
185
- values: .+
186
- WINDOW:
187
- summary: How to display the tool when navigated to
188
- description: The window mode used to display the tool. Currently supported modes are INLINE which opens the tool internally without refreshing the page using the Single-SPA framework, and NEW which opens the tool in a new TAB. A future release will support IFRAME to open external tools in an Iframe within COSMOS.
189
- parameters:
190
- - name: Window Mode
191
- required: true
192
- description: INLINE, NEW, or IFRAME
193
- values: .+
194
- ICON:
195
- summary: Set tool icon
196
- description: Icon shown next to the tool name in the COSMOS navigation menu.
197
- parameters:
198
- - name: Icon Name
199
- required: true
200
- description: Icon to display next to the tool name. Icons come from Font Awesome, Material Design, and Astro. See https://vuetifyjs.com/en/components/icons/
201
- values: .+
202
- CATEGORY:
203
- summary: Category for the tool
204
- description: Associates the tool with a category. In a future release this will be able to organize tools into submenus in the Navigation menu.
205
- parameters:
206
- - name: Category Name
207
- required: true
208
- description: Category to associate the tool with
209
- values: .+
210
- SHOWN:
211
- summary: Show the tool or not
212
- description: Whether or not the tool is shown in the Navigation menu. Should generally be true, except for the cosmos base tool.
213
- parameters:
214
- - name: Shown
215
- required: true
216
- description: Whether or not the tool is shown. TRUE or FALSE
217
- values: .+
68
+ <%= MetaConfigParser.load('target.yaml').to_meta_config_yaml() %>
69
+ <%= MetaConfigParser.load('microservice.yaml').to_meta_config_yaml() %>
70
+ <%= MetaConfigParser.load('tool.yaml').to_meta_config_yaml() %>
@@ -28,6 +28,13 @@ TARGET:
28
28
  required: true
29
29
  description: Maximum file size in bytes (default = 50_000_000)
30
30
  values: \d+
31
+ CMD_LOG_RETAIN_TIME:
32
+ summary: How long to keep raw command logs in seconds.
33
+ parameters:
34
+ - name: Time
35
+ required: true
36
+ description: Number of seconds to keep raw command logs (default = nil = Forever)
37
+ values: \d+
31
38
  CMD_DECOM_LOG_CYCLE_TIME:
32
39
  summary: Command decommutation logs can be cycled on a time interval.
33
40
  parameters:
@@ -42,6 +49,13 @@ TARGET:
42
49
  required: true
43
50
  description: Maximum file size in bytes (default = 50_000_000)
44
51
  values: \d+
52
+ CMD_DECOM_LOG_RETAIN_TIME:
53
+ summary: How long to keep decom command logs in seconds.
54
+ parameters:
55
+ - name: Time
56
+ required: true
57
+ description: Number of seconds to keep decom command logs (default = nil = Forever)
58
+ values: \d+
45
59
  TLM_LOG_CYCLE_TIME:
46
60
  summary: Telemetry binary logs can be cycled on a time interval.
47
61
  parameters:
@@ -56,6 +70,13 @@ TARGET:
56
70
  required: true
57
71
  description: Maximum file size in bytes (default = 50_000_000)
58
72
  values: \d+
73
+ TLM_LOG_RETAIN_TIME:
74
+ summary: How long to keep raw telemetry logs in seconds.
75
+ parameters:
76
+ - name: Time
77
+ required: true
78
+ description: Number of seconds to keep raw telemetry logs (default = nil = Forever)
79
+ values: \d+
59
80
  TLM_DECOM_LOG_CYCLE_TIME:
60
81
  summary: Telemetry decommutation logs can be cycled on a time interval.
61
82
  parameters:
@@ -70,3 +91,52 @@ TARGET:
70
91
  required: true
71
92
  description: Maximum file size in bytes (default = 50_000_000)
72
93
  values: \d+
94
+ TLM_DECOM_LOG_RETAIN_TIME:
95
+ summary: How long to keep decom telemetry logs in seconds.
96
+ parameters:
97
+ - name: Time
98
+ required: true
99
+ description: Number of seconds to keep decom telemetry logs (default = nil = Forever)
100
+ values: \d+
101
+ REDUCED_MINUTE_LOG_RETAIN_TIME:
102
+ summary: How long to keep reduced minute telemetry logs in seconds.
103
+ parameters:
104
+ - name: Time
105
+ required: true
106
+ description: Number of seconds to keep reduced minute telemetry logs (default = nil = Forever)
107
+ values: \d+
108
+ REDUCED_HOUR_LOG_RETAIN_TIME:
109
+ summary: How long to keep reduced hour telemetry logs in seconds.
110
+ parameters:
111
+ - name: Time
112
+ required: true
113
+ description: Number of seconds to keep reduced hour telemetry logs (default = nil = Forever)
114
+ values: \d+
115
+ REDUCED_DAY_LOG_RETAIN_TIME:
116
+ summary: How long to keep reduced day telemetry logs in seconds.
117
+ parameters:
118
+ - name: Time
119
+ required: true
120
+ description: Number of seconds to keep reduced day telemetry logs (default = nil = Forever)
121
+ values: \d+
122
+ LOG_RETAIN_TIME:
123
+ summary: How long to keep all regular telemetry logs in seconds.
124
+ parameters:
125
+ - name: Time
126
+ required: true
127
+ description: Number of seconds to keep all regular telemetry logs (default = nil = Forever)
128
+ values: \d+
129
+ REDUCED_LOG_RETAIN_TIME:
130
+ summary: How long to keep all reduced telemetry logs in seconds.
131
+ parameters:
132
+ - name: Time
133
+ required: true
134
+ description: Number of seconds to keep all reduced telemetry logs (default = nil = Forever)
135
+ values: \d+
136
+ CLEANUP_POLL_TIME:
137
+ summary: Period at which to run the cleanup process.
138
+ parameters:
139
+ - name: Time
140
+ required: true
141
+ description: Number of seconds between runs of the cleanup process (default = 900 = 15 minutes)
142
+ values: \d+
@@ -1,57 +1,63 @@
1
1
  ---
2
2
  TOOL:
3
- summary: Defines a new tool
3
+ summary: Define a tool
4
4
  example: TOOL DEMO Demo
5
+ description: Defines a tool that the plugin adds to the COSMOS 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.
5
6
  parameters:
6
- - name: Folder Name
7
+ - name: Tool Folder Name
8
+ description: The exact name of the tool folder in the plugin. ie. tools/<Tool Folder Name>
7
9
  required: true
8
- description: The folder where the tool is located relative to the tools folder in the plugin
9
- values: .*
10
- - name: Name
10
+ values: .+
11
+ - name: Tool Name
12
+ description: Name of the tool that is displayed in the COSMOS Navigation menu
11
13
  required: true
12
- description: The tool name displayed in the Nav bar
13
- values: .*
14
+ values: .+
14
15
  modifiers:
15
16
  URL:
16
- summary: Url to reach the tool relative to the tools Folder Name, or absolute
17
+ summary: Url used to access the tool
18
+ description: The relative url used to access the tool. Defaults to "/tools/<Tool Folder Name>".
17
19
  parameters:
18
- - name: URL
20
+ - name: Url
19
21
  required: true
20
- description: URL
21
- values: .*
22
+ description: The url. If not given defaults to tools/<Tool Folder Name>. Generally should not be given unless linking to external tools.
23
+ values: .+
22
24
  INLINE_URL:
23
- summary: Single SPA url to reach the tool
24
- example: js/app.js
25
+ summary: Internal url to load a tool
26
+ description: The url of the javascript file used to load the tool into single-SPA. Defaults to "js/app.js".
25
27
  parameters:
26
- - name: URL
28
+ - name: Url
27
29
  required: true
28
- description: URL
29
- values: .*
30
- ICON:
31
- summary: Icon used to display the tool link
32
- parameters:
33
- - name: Name
34
- required: true
35
- description: Material design icon name (https://materialdesignicons.com/)
36
- values: .*
30
+ description: The inline url. If not given defaults to js/app.js. Generally should not be given unless using a non-standard filename.
31
+ values: .+
37
32
  WINDOW:
38
- summary: How the tool should be displayed
33
+ summary: How to display the tool when navigated to
34
+ description: The window mode used to display the tool. INLINE opens the tool internally without refreshing the page using the Single-SPA framework. IFRAME opens external tools in an Iframe within COSMOS. NEW opens the tool in a new TAB.
39
35
  parameters:
40
- - name: Mode
36
+ - name: Window Mode
41
37
  required: true
42
38
  description: Tool display mode
43
39
  values: ["INLINE", "IFRAME", "NEW"]
40
+ ICON:
41
+ summary: Set tool icon
42
+ description: Icon shown next to the tool name in the COSMOS navigation menu.
43
+ parameters:
44
+ - name: Icon Name
45
+ required: true
46
+ description: Icon to display next to the tool name. Icons come from Font Awesome, Material Design (https://materialdesignicons.com/), and Astro.
47
+ values: .+
44
48
  CATEGORY:
45
- summary: Category to place the tool into
49
+ summary: Category for the tool
50
+ description: Associates the tool with a category. In a future release this will be able to organize tools into submenus in the Navigation menu.
46
51
  parameters:
47
- - name: Category
52
+ - name: Category Name
48
53
  required: true
49
- description: Name of a category to organize a tool into
50
- values: .*
54
+ description: Category to associate the tool with
55
+ values: .+
51
56
  SHOWN:
52
- summary: Is the Tool Shown in the Nav Bar
57
+ summary: Show the tool or not
58
+ description: Whether or not the tool is shown in the Navigation menu. Should generally be true, except for the cosmos base tool.
53
59
  parameters:
54
60
  - name: Shown
55
61
  required: true
56
- description: Is Shown?
62
+ description: Whether or not the tool is shown. TRUE or FALSE
57
63
  values: ["true", "false"]
@@ -28,36 +28,12 @@ require 'cosmos/api/settings_api'
28
28
  require 'cosmos/api/target_api'
29
29
  require 'cosmos/api/tlm_api'
30
30
  require 'cosmos/utilities/authorization'
31
+ require 'cosmos/topics/topic'
31
32
 
32
33
  module Cosmos
33
34
  module Api
34
35
  include Extract
35
36
  include Authorization
36
37
  include ApiShared
37
-
38
- # PRIVATE - Shared by cmd_api and tlm_api
39
-
40
- def _get_cnt(topic)
41
- _, packet = Store.instance.read_topic_last(topic)
42
- packet ? packet["received_count"].to_i : 0
43
- end
44
-
45
- def get_all_cmd_tlm_info(type, scope:, token:)
46
- authorize(permission: 'system', scope: scope, token: token)
47
- result = []
48
- keys = []
49
- count = 0
50
- loop do
51
- count, part = Store.scan(0, :match => "#{scope}__#{type}__*", :count => 1000)
52
- keys.concat(part)
53
- break if count.to_i == 0
54
- end
55
- keys.each do |key|
56
- _, _, target, packet = key.gsub(/{|}/, '').split('__') # split off scope and type
57
- result << [target, packet, _get_cnt(key)]
58
- end
59
- # Return the results sorted by target, packet
60
- result.sort_by { |a| [a[0], a[1]] }
61
- end
62
38
  end
63
39
  end
@@ -35,6 +35,7 @@ module Cosmos
35
35
  'cmd_raw_no_checks',
36
36
  'send_raw',
37
37
  'get_all_commands',
38
+ 'get_all_commands_list',
38
39
  'get_command',
39
40
  'get_parameter',
40
41
  'get_cmd_buffer',
@@ -194,7 +195,7 @@ module Cosmos
194
195
  authorize(permission: 'cmd_info', target_name: target_name, packet_name: command_name, scope: scope, token: token)
195
196
  TargetModel.packet(target_name, command_name, type: :CMD, scope: scope)
196
197
  topic = "#{scope}__COMMAND__{#{target_name}}__#{command_name}"
197
- msg_id, msg_hash = Store.instance.read_topic_last(topic)
198
+ msg_id, msg_hash = Topic.get_newest_message(topic)
198
199
  if msg_id
199
200
  msg_hash['buffer'] = msg_hash['buffer'].b
200
201
  return msg_hash
@@ -212,6 +213,16 @@ module Cosmos
212
213
  TargetModel.packets(target_name, type: :CMD, scope: scope)
213
214
  end
214
215
 
216
+ # Returns an array of all the command names and their descriptions
217
+ #
218
+ # @since 5.0.3
219
+ # @param target_name [String] Name of the target
220
+ # @return [Array<Hash>] Array of all commands as a hash
221
+ def get_all_commands_list(target_name, scope: $cosmos_scope, token: $cosmos_token)
222
+ authorize(permission: 'cmd_info', target_name: target_name, scope: scope, token: token)
223
+ TargetModel.all_packet_name_descriptions(target_name, type: :CMD, scope: scope)
224
+ end
225
+
215
226
  # Returns a hash of the given command
216
227
  #
217
228
  # @since 5.0.0
@@ -291,7 +302,7 @@ module Cosmos
291
302
  # @return [Varies] value
292
303
  def get_cmd_value(target_name, command_name, parameter_name, value_type = :CONVERTED, scope: $cosmos_scope, token: $cosmos_token)
293
304
  authorize(permission: 'cmd_info', target_name: target_name, packet_name: command_name, scope: scope, token: token)
294
- Store.instance.get_cmd_item(target_name, command_name, parameter_name, type: value_type, scope: scope)
305
+ CommandDecomTopic.get_cmd_item(target_name, command_name, parameter_name, type: value_type, scope: scope)
295
306
  end
296
307
 
297
308
  # Returns the time the most recent command was sent
@@ -304,7 +315,7 @@ module Cosmos
304
315
  def get_cmd_time(target_name = nil, command_name = nil, scope: $cosmos_scope, token: $cosmos_token)
305
316
  authorize(permission: 'cmd_info', target_name: target_name, packet_name: command_name, scope: scope, token: token)
306
317
  if target_name and command_name
307
- time = Store.instance.get_cmd_item(target_name, command_name, 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
318
+ time = CommandDecomTopic.get_cmd_item(target_name, command_name, 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
308
319
  [target_name, command_name, time.to_i, ((time.to_f - time.to_i) * 1_000_000).to_i]
309
320
  else
310
321
  if target_name.nil?
@@ -316,7 +327,7 @@ module Cosmos
316
327
  time = 0
317
328
  command_name = nil
318
329
  TargetModel.packets(target_name, type: :CMD, scope: scope).each do |packet|
319
- cur_time = Store.instance.get_cmd_item(target_name, packet["packet_name"], 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
330
+ cur_time = CommandDecomTopic.get_cmd_item(target_name, packet["packet_name"], 'RECEIVED_TIMESECONDS', type: :CONVERTED, scope: scope)
320
331
  next unless cur_time
321
332
 
322
333
  if cur_time > time
@@ -338,7 +349,7 @@ module Cosmos
338
349
  def get_cmd_cnt(target_name, command_name, scope: $cosmos_scope, token: $cosmos_token)
339
350
  authorize(permission: 'system', target_name: target_name, packet_name: command_name, scope: scope, token: token)
340
351
  TargetModel.packet(target_name, command_name, type: :CMD, scope: scope)
341
- _get_cnt("#{scope}__COMMAND__{#{target_name}}__#{command_name}")
352
+ Topic.get_cnt("#{scope}__COMMAND__{#{target_name}}__#{command_name}")
342
353
  end
343
354
 
344
355
  # Get information on all command packets
@@ -351,7 +362,7 @@ module Cosmos
351
362
  TargetModel.packets(target_name, type: :CMD, scope: scope).each do | packet |
352
363
  command_name = packet['packet_name']
353
364
  key = "#{scope}__COMMAND__{#{target_name}}__#{command_name}"
354
- result << [target_name, command_name, _get_cnt(key)]
365
+ result << [target_name, command_name, Topic.get_cnt(key)]
355
366
  end
356
367
  end
357
368
  # Return the results sorted by target, packet
@@ -17,6 +17,8 @@
17
17
  # enterprise edition license of COSMOS if purchased from the
18
18
  # copyright holder
19
19
 
20
+ require 'cosmos/models/tool_config_model'
21
+
20
22
  module Cosmos
21
23
  module Api
22
24
  WHITELIST ||= []
@@ -34,19 +36,23 @@ module Cosmos
34
36
  end
35
37
 
36
38
  def list_configs(tool, scope: $cosmos_scope, token: $cosmos_token)
37
- Store.instance.hkeys("#{scope}__config__#{tool}")
39
+ authorize(permission: 'system', scope: scope, token: token)
40
+ ToolConfigModel.list_configs(tool, scope: scope)
38
41
  end
39
42
 
40
43
  def load_config(tool, name, scope: $cosmos_scope, token: $cosmos_token)
41
- Store.instance.hget("#{scope}__config__#{tool}", name)
44
+ authorize(permission: 'system', scope: scope, token: token)
45
+ ToolConfigModel.load_config(tool, name, scope: scope)
42
46
  end
43
47
 
44
48
  def save_config(tool, name, data, scope: $cosmos_scope, token: $cosmos_token)
45
- Store.instance.hset("#{scope}__config__#{tool}", name, data)
49
+ authorize(permission: 'system_set', scope: scope, token: token)
50
+ ToolConfigModel.save_config(tool, name, data, scope: scope)
46
51
  end
47
52
 
48
53
  def delete_config(tool, name, scope: $cosmos_scope, token: $cosmos_token)
49
- Store.instance.hdel("#{scope}__config__#{tool}", name)
54
+ authorize(permission: 'system_set', scope: scope, token: token)
55
+ ToolConfigModel.delete_config(tool, name, scope: scope)
50
56
  end
51
57
  end
52
58
  end
@@ -64,7 +64,7 @@ module Cosmos
64
64
  targets.each do |target_name|
65
65
  get_all_telemetry(target_name, scope: scope).each do |packet|
66
66
  topic = "#{scope}__TELEMETRY__{#{target_name}}__#{packet['packet_name']}"
67
- _, msg_hash = Store.get_newest_message(topic)
67
+ _, msg_hash = Topic.get_newest_message(topic)
68
68
  unless msg_hash && msg_hash['time'].to_i > stale_time
69
69
  next if with_limits_only && packet['items'].find { |item| item['limits'] }.nil?
70
70