[Telemetry] Added LegacyTelemetryProvider to make existing telemetry providers available to the new Telemetry API

This commit is contained in:
Henry 2016-12-06 18:07:21 -08:00
parent 90a7ca8ae5
commit 43132ea6f8
3 changed files with 152 additions and 1 deletions

View File

@ -0,0 +1,139 @@
/*****************************************************************************
* Open MCT, Copyright (c) 2014-2016, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT is licensed under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
* Open MCT includes source code licensed under additional open source
* licenses. See the Open Source Licenses file (LICENSES.md) included with
* this source code distribution or the Licensing information page available
* at runtime from the About dialog for additional information.
*****************************************************************************/
define([
'../objects/object-utils'
], function (
utils
) {
/**
* @implements module:openmct.TelemetryAPI~TelemetryProvider
* @constructor
*/
function LegacyTelemetryProvider(instantiate) {
this.instantiate = instantiate;
}
/**
* Can provide telemetry for all objects that have the "telemetry"
* capability
*
* @see module:openmct.TelemetryAPI~TelemetryProvider#canProvideTelemetry
*/
LegacyTelemetryProvider.prototype.canProvideTelemetry = function (domainObject) {
return this.instantiate(utils.toOldFormat(domainObject),
utils.makeKeyString(domainObject.identifier)).hasCapability("telemetry");
};
function createDatum(metadata, legacySeries, i) {
var datum = {};
metadata.domains.reduce(function (telemetryObject, domain) {
datum[domain.key] = legacySeries.getDomainValue(i, domain.key);
}, datum);
metadata.ranges.reduce(function (telemetryObject, range) {
datum[range.key] = legacySeries.getRangeValue(i, range.key);
}, datum);
return datum;
}
function adaptSeries(metadata, legacySeries) {
var series = [];
for (var i=0; i < legacySeries.getPointCount(); i++) {
series.push(createDatum(metadata, legacySeries, i));
}
return series;
}
/**
* @typedef {object} ConvertedTelemetryObject
* Telemetry data objects are converted from TelemetrySeries. Metadata is used
* to populate the returned object with attributes corresponding to the keys
* of domains and ranges. The attribute values are those returned by calls to
* [TelemetrySeries.getDomainValue()]{@link TelemetrySeries#getDomainValue}
* and [TelemetrySeries.getRangeValue()]{@link TelemetrySeries#getRangeValue}.
*/
/**
* @see module:openmct.TelemetryAPI~TelemetryProvider#request
* @param {module:openmct.DomainObject}
* @param {module:openmct.TelemetryAPI~TelemetryRequest} options
* options for this request. Passed straight through to legacy provider
* @returns {Promise.<ConvertedTelemetryObject[]>} a promise for an array of
* telemetry data.
*/
LegacyTelemetryProvider.prototype.request = function (domainObject, request) {
var oldObject = this.instantiate(utils.toOldFormat(domainObject), utils.makeKeyString(domainObject.identifier));
var capability = oldObject.getCapability("telemetry");
return capability.requestData(request).then(function (telemetrySeries) {
return Promise.resolve(adaptSeries(capability.getMetadata(), telemetrySeries));
}).catch(function (error) {
return Promise.reject(error);
});
};
/**
* @callback LegacyTelemetryProvider~SubscribeCallback
* @param {ConvertedTelemetryObject}
*/
/**
* @see module:openmct.TelemetryAPI~TelemetryProvider#request
* @param {module:openmct.DomainObject}
* @param {LegacyTelemetryProvider~SubscribeCallback} callback will be called with a single datum when
* new data is available.
* @param {module:openmct.TelemetryAPI~TelemetryRequest} options
* options for this request. Passed straight through to legacy provider
* @returns {platform|telemetry.TelemetrySubscription|*}
*/
LegacyTelemetryProvider.prototype.subscribe = function (domainObject, callback, request) {
var oldObject = this.instantiate(utils.toOldFormat(domainObject), utils.makeKeyString(domainObject.identifier));
var capability = oldObject.getCapability("telemetry");
function callbackWrapper(series){
callback(createDatum(capability.getMetadata(), series, series.getPointCount()-1));
}
return capability.subscribe(callbackWrapper, request);
};
function notImplemented () {
console.error("function not implemented");
}
LegacyTelemetryProvider.prototype.properties = notImplemented;
LegacyTelemetryProvider.prototype.limitEvaluator = notImplemented;
LegacyTelemetryProvider.prototype.formatter = notImplemented;
return function (openmct, instantiate) {
// Push onto the start of the default providers array so that it's
// always the last resort
openmct.telemetry.defaultProviders.unshift(
new LegacyTelemetryProvider(instantiate));
};
});

View File

@ -22,12 +22,14 @@
define([
'./TelemetryAPI',
'./LegacyTelemetryProvider',
'legacyRegistry'
], function (
TelemetryAPI,
LegacyTelemetryProvider,
legacyRegistry
) {
legacyRegistry.register('api/telemetry-api', {
legacyRegistry.register('src/api/telemetry', {
name: 'Telemetry API',
description: 'The public Telemetry API',
extensions: {
@ -38,6 +40,14 @@ define([
depends: [
'formatService'
]
},
{
key: "LegacyTelemetryAdapter",
implementation: LegacyTelemetryProvider,
depends: [
"openmct",
"instantiate"
]
}
]
}

View File

@ -25,6 +25,7 @@ define([
'../src/adapter/bundle',
'../src/api/objects/bundle',
'../src/api/telemetry/bundle',
'../example/builtins/bundle',
'../example/composite/bundle',
@ -96,6 +97,7 @@ define([
var DEFAULTS = [
'src/adapter',
'src/api/objects',
'src/api/telemetry',
'platform/framework',
'platform/core',
'platform/representation',