Skip to content

Commit 265380e

Browse files
committed
Move logic for getting all packet items to backend
1 parent 0fce806 commit 265380e

File tree

4 files changed

+78
-56
lines changed

4 files changed

+78
-56
lines changed

openc3-cosmos-init/plugins/packages/openc3-js-common/src/services/openc3Api.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,10 @@ export default class OpenC3Api {
287287
return this.exec('get_all_tlm_names', [target_name])
288288
}
289289

290+
get_all_tlm_items_metadata(target_name) {
291+
return this.exec('get_all_tlm_items_metadata', [target_name])
292+
}
293+
290294
async get_tlm_packet(target_name, packet_name, value_type, stale_time = 30) {
291295
const data = await this.exec('get_tlm_packet', [target_name, packet_name], {
292296
type: value_type,

openc3-cosmos-init/plugins/packages/openc3-vue-common/src/components/TargetPacketItemChooser.vue

Lines changed: 49 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -412,62 +412,57 @@ export default {
412412
return
413413
}
414414
this.internalDisabled = true
415-
this.itemNames = []
416-
const packetsToGet =
417-
this.selectedPacketName === 'LATEST'
418-
? this.packetNames.map((packet) => packet.value)
419-
: [this.selectedPacketName]
420-
const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'
421-
const getPacketItemPromises = packetsToGet.map((packetName) =>
422-
this.api[cmd](this.selectedTargetName, packetName),
423-
)
424-
Promise.all(getPacketItemPromises)
425-
.then((packets) => {
426-
const theseItems = []
427-
packets.forEach((packet) => {
428-
const itemsToAdd = packet.items
429-
.map((item) => {
430-
let label = item.name
431-
if (item.data_type == 'DERIVED') {
432-
label += ' *'
433-
}
434-
return [
435-
{
436-
label: label,
437-
value: item.name,
438-
description: item.description,
439-
array: item.array_size / item.bit_size,
440-
},
441-
]
442-
})
443-
.reduce((result, item) => {
444-
return result.concat(item)
445-
}, [])
446-
theseItems.unshift(...itemsToAdd)
447-
})
448-
theseItems.sort((a, b) => (a.label > b.label ? 1 : -1))
449-
if (this.allowAll) {
450-
theseItems.unshift(this.ALL)
451-
}
452-
if (!this.selectedItemName) {
453-
this.selectedItemName = theseItems[0].value
454-
}
455-
this.description = theseItems[0].description
456-
return theseItems
457-
})
458-
.then((itemNames) => {
459-
this.itemNames = itemNames
460-
this.itemIsArray()
461-
this.$emit('on-set', {
462-
targetName: this.selectedTargetName,
463-
packetName: this.selectedPacketName,
464-
itemName: this.selectedItemNameWIndex,
465-
valueType: this.selectedValueType,
466-
reduced: this.selectedReduced,
467-
reducedType: this.selectedReducedType,
415+
416+
let getItemsPromise
417+
if (this.selectedPacketName === 'LATEST') {
418+
getItemsPromise = this.api.get_all_tlm_items_metadata(
419+
this.selectedTargetName,
420+
)
421+
} else {
422+
const cmd = this.mode === 'tlm' ? 'get_tlm' : 'get_cmd'
423+
getItemsPromise = this.api[cmd](
424+
this.selectedTargetName,
425+
this.selectedPacketName,
426+
).then((packet) => packet.items)
427+
}
428+
getItemsPromise.then((items) => {
429+
this.itemNames = items
430+
.map((item) => {
431+
let label = item.name
432+
if (item.data_type == 'DERIVED') {
433+
label += ' *'
434+
}
435+
return [
436+
{
437+
label: label,
438+
value: item.name,
439+
description: item.description,
440+
array: item.array_size / item.bit_size,
441+
},
442+
]
468443
})
469-
this.internalDisabled = false
444+
.reduce((result, item) => {
445+
return result.concat(item)
446+
}, [])
447+
this.itemNames.sort((a, b) => (a.label > b.label ? 1 : -1))
448+
if (this.allowAll) {
449+
this.itemNames.unshift(this.ALL)
450+
}
451+
if (!this.selectedItemName) {
452+
this.selectedItemName = this.itemNames[0].value
453+
}
454+
this.description = this.itemNames[0].description
455+
this.itemIsArray()
456+
this.$emit('on-set', {
457+
targetName: this.selectedTargetName,
458+
packetName: this.selectedPacketName,
459+
itemName: this.selectedItemNameWIndex,
460+
valueType: this.selectedValueType,
461+
reduced: this.selectedReduced,
462+
reducedType: this.selectedReducedType,
470463
})
464+
this.internalDisabled = false
465+
})
471466
},
472467
itemIsArray: function () {
473468
let i = this.itemNames.findIndex(

openc3/lib/openc3/api/tlm_api.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ module Api
4848
'get_all_telemetry', # DEPRECATED
4949
'get_all_tlm_names',
5050
'get_all_telemetry_names', # DEPRECATED
51+
'get_all_tlm_items_metadata',
5152
'get_tlm',
5253
'get_telemetry', # DEPRECATED
5354
'get_item',
@@ -314,6 +315,14 @@ def get_all_tlm_names(target_name, hidden: false, manual: false, scope: $openc3_
314315
end
315316
alias get_all_telemetry_names get_all_tlm_names
316317

318+
# Returns an array of all the item hashes for every packet in a target
319+
#
320+
# @param target_name [String] Name of the taret
321+
# @return [Array<String>] Array of all telemetry item names
322+
def get_all_tlm_items_metadata(target_name, manual: false, scope: $openc3_scope, token: $openc3_token)
323+
TargetModel.all_items_metadata(target_name, scope: scope)
324+
end
325+
317326
# Returns a telemetry packet hash
318327
#
319328
# @since 5.0.0

openc3/lib/openc3/models/target_model.rb

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ def self.packet(target_name, packet_name, type: :TLM, scope:)
204204
JSON.parse(json, :allow_nan => true, :create_additions => true)
205205
end
206206

207-
# @return [Array>Hash>] All packet hashes under the target_name
207+
# @return [Array<Hash>] All packet hashes under the target_name
208208
def self.packets(target_name, type: :TLM, scope:)
209209
raise "Unknown type #{type} for #{target_name}" unless VALID_TYPES.include?(type)
210210
raise "Target '#{target_name}' does not exist for scope: #{scope}" unless get(name: target_name, scope: scope)
@@ -217,7 +217,7 @@ def self.packets(target_name, type: :TLM, scope:)
217217
result
218218
end
219219

220-
# @return [Array>Hash>] All packet hashes under the target_name
220+
# @return [Array<Hash>] All packet hashes under the target_name
221221
def self.all_packet_name_descriptions(target_name, type: :TLM, scope:)
222222
self.packets(target_name, type: type, scope: scope).map! { |hash| hash.slice("packet_name", "description") }
223223
end
@@ -257,6 +257,20 @@ def self.packet_items(target_name, packet_name, items, type: :TLM, scope:)
257257
found
258258
end
259259

260+
# @return [Array<Hash>] All the item hashes for every packet in a target
261+
def self.all_items_metadata(target_name, type: :TLM, scope:)
262+
items = []
263+
packets = packets(target_name, type: type, scope: scope)
264+
items += packets.flat_map do |packet|
265+
packet['items'].map do |item|
266+
item.slice('name', 'description', 'data_type', 'array_size', 'bit_size')
267+
end
268+
end
269+
items.uniq! { |i| i['name'] } # since this would be used by `<target_name> LATEST <item_name>`
270+
items.sort_by! { |i| i['name'] }
271+
items
272+
end
273+
260274
# @return [Hash{String => Array<Array<String, String, String>>}]
261275
def self.limits_groups(scope:)
262276
groups = Store.hgetall("#{scope}__limits_groups")

0 commit comments

Comments
 (0)