Skip to content

Commit 8754c43

Browse files
authored
Merge pull request nasa#1725 from nasa/legacy-telem-source-mapping
[Telemetry] Legacy adapter handles source remap
2 parents 1419c75 + ca8cad0 commit 8754c43

File tree

2 files changed

+71
-25
lines changed

2 files changed

+71
-25
lines changed

platform/telemetry/src/TelemetryCapability.js

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@
2525
*/
2626
define(
2727
[
28-
'../../../src/api/objects/object-utils'
28+
'../../../src/api/objects/object-utils',
29+
'lodash'
2930
],
3031
function (
31-
objectUtils
32+
objectUtils,
33+
_
3234
) {
3335

3436
var ZERO = function () {
@@ -189,14 +191,17 @@ define(
189191
return fullRequest;
190192
};
191193

194+
function asSeries(telemetry, defaultDomain, defaultRange, sourceMap) {
195+
function getValue(index, key) {
196+
return telemetry[index][sourceMap[key].source];
197+
}
192198

193-
function asSeries(telemetry, defaultDomain, defaultRange) {
194199
return {
195200
getRangeValue: function (index, range) {
196-
return telemetry[index][range || defaultRange];
201+
return getValue(index, range || defaultRange);
197202
},
198203
getDomainValue: function (index, domain) {
199-
return telemetry[index][domain || defaultDomain];
204+
return getValue(index, domain || defaultDomain);
200205
},
201206
getPointCount: function () {
202207
return telemetry.length;
@@ -223,9 +228,11 @@ define(
223228
var telemetryAPI = this.openmct.telemetry;
224229

225230
var metadata = telemetryAPI.getMetadata(domainObject);
226-
var defaultDomain = metadata.valuesForHints(['domain'])[0].source;
231+
var defaultDomain = metadata.valuesForHints(['domain'])[0].key;
227232
var defaultRange = metadata.valuesForHints(['range'])[0];
228-
defaultRange = defaultRange ? defaultRange.source : undefined;
233+
defaultRange = defaultRange ? defaultRange.key : undefined;
234+
235+
var sourceMap = _.indexBy(metadata.values(), 'key');
229236

230237
var isLegacyProvider = telemetryAPI.findRequestProvider(domainObject) ===
231238
telemetryAPI.legacyProvider;
@@ -250,7 +257,7 @@ define(
250257
requestTelemetryFromService().then(getRelevantResponse);
251258
} else {
252259
return telemetryAPI.request(domainObject, fullRequest).then(function (telemetry) {
253-
return asSeries(telemetry, defaultDomain, defaultRange);
260+
return asSeries(telemetry, defaultDomain, defaultRange, sourceMap);
254261
});
255262
}
256263
};
@@ -286,15 +293,17 @@ define(
286293
var telemetryAPI = this.openmct.telemetry;
287294

288295
var metadata = telemetryAPI.getMetadata(domainObject);
289-
var defaultDomain = metadata.valuesForHints(['domain'])[0].source;
296+
var defaultDomain = metadata.valuesForHints(['domain'])[0].key;
290297
var defaultRange = metadata.valuesForHints(['range'])[0];
291-
defaultRange = defaultRange ? defaultRange.source : undefined;
298+
defaultRange = defaultRange ? defaultRange.key : undefined;
299+
300+
var sourceMap = _.indexBy(metadata.values(), 'key');
292301

293302
var isLegacyProvider = telemetryAPI.findSubscriptionProvider(domainObject) ===
294303
telemetryAPI.legacyProvider;
295304

296305
function update(telemetry) {
297-
callback(asSeries([telemetry], defaultDomain, defaultRange));
306+
callback(asSeries([telemetry], defaultDomain, defaultRange, sourceMap));
298307
}
299308

300309
// Unpack the relevant telemetry series

platform/telemetry/test/TelemetryCapabilitySpec.js

Lines changed: 51 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ define(
3434
mockUnsubscribe,
3535
telemetry,
3636
mockTelemetryAPI,
37+
mockMetadata,
3738
mockAPI;
3839

3940
function mockPromise(value) {
@@ -90,14 +91,23 @@ define(
9091
"findRequestProvider",
9192
"findSubscriptionProvider"
9293
]);
93-
mockTelemetryAPI.getMetadata.andReturn({
94-
valuesForHints: function (hint) {
95-
var metadatum = {};
96-
metadatum[hint] = "foo";
97-
return [metadatum];
98-
}
94+
95+
mockMetadata = jasmine.createSpyObj('telemetryMetadata', [
96+
'valuesForHints',
97+
'values'
98+
]);
99+
100+
mockMetadata.valuesForHints.andCallFake(function (hints) {
101+
var hint = hints[0];
102+
var metadatum = {
103+
key: 'default' + hint
104+
};
105+
metadatum[hint] = "foo";
106+
return [metadatum];
99107
});
100108

109+
mockTelemetryAPI.getMetadata.andReturn(mockMetadata);
110+
101111
mockAPI = {
102112
telemetry: mockTelemetryAPI,
103113
time: {
@@ -150,8 +160,8 @@ define(
150160
key: "testKey", // from model
151161
start: 42, // from argument
152162
domain: 'mockTimeSystem',
153-
domains: [{ domain: "foo" }],
154-
ranges: [{ range: "foo" }]
163+
domains: [{ domain: "foo", key: 'defaultdomain' }],
164+
ranges: [{ range: "foo", key: 'defaultrange' }]
155165
}]);
156166
});
157167

@@ -172,8 +182,8 @@ define(
172182
start: 0,
173183
end: 1,
174184
domain: 'mockTimeSystem',
175-
domains: [{ domain: "foo" }],
176-
ranges: [{ range: "foo" }]
185+
domains: [{ domain: "foo", key: 'defaultdomain' }],
186+
ranges: [{ range: "foo", key: 'defaultrange' }]
177187
});
178188
});
179189

@@ -191,8 +201,8 @@ define(
191201
start: 0,
192202
end: 1,
193203
domain: 'mockTimeSystem',
194-
domains: [{ domain: "foo" }],
195-
ranges: [{ range: "foo" }]
204+
domains: [{ domain: "foo", key: 'defaultdomain' }],
205+
ranges: [{ range: "foo", key: 'defaultrange' }]
196206
});
197207
});
198208

@@ -240,6 +250,21 @@ define(
240250
var mockProvider = {};
241251
var dunzo = false;
242252

253+
mockMetadata.values.andReturn([
254+
{
255+
key: 'defaultrange',
256+
source: 'prop1'
257+
},
258+
{
259+
key: 'defaultdomain',
260+
source: 'prop2'
261+
},
262+
{
263+
key: 'prop3',
264+
source: 'prop3'
265+
}
266+
]);
267+
243268
mockTelemetryAPI.findRequestProvider.andReturn(mockProvider);
244269
mockTelemetryAPI.request.andReturn(Promise.resolve(mockTelemetry));
245270

@@ -257,6 +282,18 @@ define(
257282
expect(returnedTelemetry.getDomainValue).toBeDefined();
258283
expect(returnedTelemetry.getRangeValue).toBeDefined();
259284
expect(returnedTelemetry.getPointCount()).toBe(2);
285+
// Default domain + remap should work.
286+
expect(returnedTelemetry.getDomainValue(0)).toBe('val2');
287+
expect(returnedTelemetry.getDomainValue(1)).toBe('val5');
288+
// explicit domain should work
289+
expect(returnedTelemetry.getDomainValue(0, 'prop3')).toBe('val3');
290+
expect(returnedTelemetry.getDomainValue(1, 'prop3')).toBe('val6');
291+
// default range + remap should work
292+
expect(returnedTelemetry.getRangeValue(0)).toBe('val1');
293+
expect(returnedTelemetry.getRangeValue(1)).toBe('val4');
294+
// explicit range should work
295+
expect(returnedTelemetry.getRangeValue(0, 'prop3')).toBe('val3');
296+
expect(returnedTelemetry.getRangeValue(1, 'prop3')).toBe('val6');
260297
});
261298

262299
});
@@ -275,8 +312,8 @@ define(
275312
start: 0,
276313
end: 1,
277314
domain: 'mockTimeSystem',
278-
domains: [{ domain: "foo" }],
279-
ranges: [{ range: "foo" }]
315+
domains: [{ domain: "foo", key: "defaultdomain" }],
316+
ranges: [{ range: "foo", key: "defaultrange" }]
280317
}]
281318
);
282319

0 commit comments

Comments
 (0)