mirror of
https://github.com/nasa/openmct.git
synced 2025-06-13 12:48:14 +00:00
[Telemetry] Legacy adapter handles source remap
Update the Legacy Telemetry Adapter to handle source remapping for telemetry which has it. fixes https://github.com/nasa/openmct/issues/1724
This commit is contained in:
@ -25,10 +25,12 @@
|
|||||||
*/
|
*/
|
||||||
define(
|
define(
|
||||||
[
|
[
|
||||||
'../../../src/api/objects/object-utils'
|
'../../../src/api/objects/object-utils',
|
||||||
|
'lodash'
|
||||||
],
|
],
|
||||||
function (
|
function (
|
||||||
objectUtils
|
objectUtils,
|
||||||
|
_
|
||||||
) {
|
) {
|
||||||
|
|
||||||
var ZERO = function () {
|
var ZERO = function () {
|
||||||
@ -189,14 +191,17 @@ define(
|
|||||||
return fullRequest;
|
return fullRequest;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function asSeries(telemetry, defaultDomain, defaultRange, sourceMap) {
|
||||||
|
function getValue(index, key) {
|
||||||
|
return telemetry[index][sourceMap[key].source];
|
||||||
|
}
|
||||||
|
|
||||||
function asSeries(telemetry, defaultDomain, defaultRange) {
|
|
||||||
return {
|
return {
|
||||||
getRangeValue: function (index, range) {
|
getRangeValue: function (index, range) {
|
||||||
return telemetry[index][range || defaultRange];
|
return getValue(index, range || defaultRange);
|
||||||
},
|
},
|
||||||
getDomainValue: function (index, domain) {
|
getDomainValue: function (index, domain) {
|
||||||
return telemetry[index][domain || defaultDomain];
|
return getValue(index, domain || defaultDomain);
|
||||||
},
|
},
|
||||||
getPointCount: function () {
|
getPointCount: function () {
|
||||||
return telemetry.length;
|
return telemetry.length;
|
||||||
@ -223,9 +228,11 @@ define(
|
|||||||
var telemetryAPI = this.openmct.telemetry;
|
var telemetryAPI = this.openmct.telemetry;
|
||||||
|
|
||||||
var metadata = telemetryAPI.getMetadata(domainObject);
|
var metadata = telemetryAPI.getMetadata(domainObject);
|
||||||
var defaultDomain = metadata.valuesForHints(['domain'])[0].source;
|
var defaultDomain = metadata.valuesForHints(['domain'])[0].key;
|
||||||
var defaultRange = metadata.valuesForHints(['range'])[0];
|
var defaultRange = metadata.valuesForHints(['range'])[0];
|
||||||
defaultRange = defaultRange ? defaultRange.source : undefined;
|
defaultRange = defaultRange ? defaultRange.key : undefined;
|
||||||
|
|
||||||
|
var sourceMap = _.indexBy(metadata.values(), 'key');
|
||||||
|
|
||||||
var isLegacyProvider = telemetryAPI.findRequestProvider(domainObject) ===
|
var isLegacyProvider = telemetryAPI.findRequestProvider(domainObject) ===
|
||||||
telemetryAPI.legacyProvider;
|
telemetryAPI.legacyProvider;
|
||||||
@ -250,7 +257,7 @@ define(
|
|||||||
requestTelemetryFromService().then(getRelevantResponse);
|
requestTelemetryFromService().then(getRelevantResponse);
|
||||||
} else {
|
} else {
|
||||||
return telemetryAPI.request(domainObject, fullRequest).then(function (telemetry) {
|
return telemetryAPI.request(domainObject, fullRequest).then(function (telemetry) {
|
||||||
return asSeries(telemetry, defaultDomain, defaultRange);
|
return asSeries(telemetry, defaultDomain, defaultRange, sourceMap);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -286,15 +293,17 @@ define(
|
|||||||
var telemetryAPI = this.openmct.telemetry;
|
var telemetryAPI = this.openmct.telemetry;
|
||||||
|
|
||||||
var metadata = telemetryAPI.getMetadata(domainObject);
|
var metadata = telemetryAPI.getMetadata(domainObject);
|
||||||
var defaultDomain = metadata.valuesForHints(['domain'])[0].source;
|
var defaultDomain = metadata.valuesForHints(['domain'])[0].key;
|
||||||
var defaultRange = metadata.valuesForHints(['range'])[0];
|
var defaultRange = metadata.valuesForHints(['range'])[0];
|
||||||
defaultRange = defaultRange ? defaultRange.source : undefined;
|
defaultRange = defaultRange ? defaultRange.key : undefined;
|
||||||
|
|
||||||
|
var sourceMap = _.indexBy(metadata.values(), 'key');
|
||||||
|
|
||||||
var isLegacyProvider = telemetryAPI.findSubscriptionProvider(domainObject) ===
|
var isLegacyProvider = telemetryAPI.findSubscriptionProvider(domainObject) ===
|
||||||
telemetryAPI.legacyProvider;
|
telemetryAPI.legacyProvider;
|
||||||
|
|
||||||
function update(telemetry) {
|
function update(telemetry) {
|
||||||
callback(asSeries([telemetry], defaultDomain, defaultRange));
|
callback(asSeries([telemetry], defaultDomain, defaultRange, sourceMap));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unpack the relevant telemetry series
|
// Unpack the relevant telemetry series
|
||||||
|
@ -34,6 +34,7 @@ define(
|
|||||||
mockUnsubscribe,
|
mockUnsubscribe,
|
||||||
telemetry,
|
telemetry,
|
||||||
mockTelemetryAPI,
|
mockTelemetryAPI,
|
||||||
|
mockMetadata,
|
||||||
mockAPI;
|
mockAPI;
|
||||||
|
|
||||||
function mockPromise(value) {
|
function mockPromise(value) {
|
||||||
@ -90,14 +91,23 @@ define(
|
|||||||
"findRequestProvider",
|
"findRequestProvider",
|
||||||
"findSubscriptionProvider"
|
"findSubscriptionProvider"
|
||||||
]);
|
]);
|
||||||
mockTelemetryAPI.getMetadata.andReturn({
|
|
||||||
valuesForHints: function (hint) {
|
mockMetadata = jasmine.createSpyObj('telemetryMetadata', [
|
||||||
var metadatum = {};
|
'valuesForHints',
|
||||||
metadatum[hint] = "foo";
|
'values'
|
||||||
return [metadatum];
|
]);
|
||||||
}
|
|
||||||
|
mockMetadata.valuesForHints.andCallFake(function (hints) {
|
||||||
|
var hint = hints[0];
|
||||||
|
var metadatum = {
|
||||||
|
key: 'default' + hint
|
||||||
|
};
|
||||||
|
metadatum[hint] = "foo";
|
||||||
|
return [metadatum];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mockTelemetryAPI.getMetadata.andReturn(mockMetadata);
|
||||||
|
|
||||||
mockAPI = {
|
mockAPI = {
|
||||||
telemetry: mockTelemetryAPI,
|
telemetry: mockTelemetryAPI,
|
||||||
time: {
|
time: {
|
||||||
@ -150,8 +160,8 @@ define(
|
|||||||
key: "testKey", // from model
|
key: "testKey", // from model
|
||||||
start: 42, // from argument
|
start: 42, // from argument
|
||||||
domain: 'mockTimeSystem',
|
domain: 'mockTimeSystem',
|
||||||
domains: [{ domain: "foo" }],
|
domains: [{ domain: "foo", key: 'defaultdomain' }],
|
||||||
ranges: [{ range: "foo" }]
|
ranges: [{ range: "foo", key: 'defaultrange' }]
|
||||||
}]);
|
}]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -172,8 +182,8 @@ define(
|
|||||||
start: 0,
|
start: 0,
|
||||||
end: 1,
|
end: 1,
|
||||||
domain: 'mockTimeSystem',
|
domain: 'mockTimeSystem',
|
||||||
domains: [{ domain: "foo" }],
|
domains: [{ domain: "foo", key: 'defaultdomain' }],
|
||||||
ranges: [{ range: "foo" }]
|
ranges: [{ range: "foo", key: 'defaultrange' }]
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -191,8 +201,8 @@ define(
|
|||||||
start: 0,
|
start: 0,
|
||||||
end: 1,
|
end: 1,
|
||||||
domain: 'mockTimeSystem',
|
domain: 'mockTimeSystem',
|
||||||
domains: [{ domain: "foo" }],
|
domains: [{ domain: "foo", key: 'defaultdomain' }],
|
||||||
ranges: [{ range: "foo" }]
|
ranges: [{ range: "foo", key: 'defaultrange' }]
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -240,6 +250,21 @@ define(
|
|||||||
var mockProvider = {};
|
var mockProvider = {};
|
||||||
var dunzo = false;
|
var dunzo = false;
|
||||||
|
|
||||||
|
mockMetadata.values.andReturn([
|
||||||
|
{
|
||||||
|
key: 'defaultrange',
|
||||||
|
source: 'prop1'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'defaultdomain',
|
||||||
|
source: 'prop2'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'prop3',
|
||||||
|
source: 'prop3'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
mockTelemetryAPI.findRequestProvider.andReturn(mockProvider);
|
mockTelemetryAPI.findRequestProvider.andReturn(mockProvider);
|
||||||
mockTelemetryAPI.request.andReturn(Promise.resolve(mockTelemetry));
|
mockTelemetryAPI.request.andReturn(Promise.resolve(mockTelemetry));
|
||||||
|
|
||||||
@ -257,6 +282,18 @@ define(
|
|||||||
expect(returnedTelemetry.getDomainValue).toBeDefined();
|
expect(returnedTelemetry.getDomainValue).toBeDefined();
|
||||||
expect(returnedTelemetry.getRangeValue).toBeDefined();
|
expect(returnedTelemetry.getRangeValue).toBeDefined();
|
||||||
expect(returnedTelemetry.getPointCount()).toBe(2);
|
expect(returnedTelemetry.getPointCount()).toBe(2);
|
||||||
|
// Default domain + remap should work.
|
||||||
|
expect(returnedTelemetry.getDomainValue(0)).toBe('val2');
|
||||||
|
expect(returnedTelemetry.getDomainValue(1)).toBe('val5');
|
||||||
|
// explicit domain should work
|
||||||
|
expect(returnedTelemetry.getDomainValue(0, 'prop3')).toBe('val3');
|
||||||
|
expect(returnedTelemetry.getDomainValue(1, 'prop3')).toBe('val6');
|
||||||
|
// default range + remap should work
|
||||||
|
expect(returnedTelemetry.getRangeValue(0)).toBe('val1');
|
||||||
|
expect(returnedTelemetry.getRangeValue(1)).toBe('val4');
|
||||||
|
// explicit range should work
|
||||||
|
expect(returnedTelemetry.getRangeValue(0, 'prop3')).toBe('val3');
|
||||||
|
expect(returnedTelemetry.getRangeValue(1, 'prop3')).toBe('val6');
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
@ -275,8 +312,8 @@ define(
|
|||||||
start: 0,
|
start: 0,
|
||||||
end: 1,
|
end: 1,
|
||||||
domain: 'mockTimeSystem',
|
domain: 'mockTimeSystem',
|
||||||
domains: [{ domain: "foo" }],
|
domains: [{ domain: "foo", key: "defaultdomain" }],
|
||||||
ranges: [{ range: "foo" }]
|
ranges: [{ range: "foo", key: "defaultrange" }]
|
||||||
}]
|
}]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user