Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nasa/openmct.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/telemetry/TelemetryAPI.js')
-rw-r--r--src/api/telemetry/TelemetryAPI.js88
1 files changed, 34 insertions, 54 deletions
diff --git a/src/api/telemetry/TelemetryAPI.js b/src/api/telemetry/TelemetryAPI.js
index 15cef5b19..c2a392d18 100644
--- a/src/api/telemetry/TelemetryAPI.js
+++ b/src/api/telemetry/TelemetryAPI.js
@@ -27,7 +27,6 @@ import TelemetryMetadataManager from './TelemetryMetadataManager';
import TelemetryValueFormatter from './TelemetryValueFormatter';
import DefaultMetadataProvider from './DefaultMetadataProvider';
import objectUtils from 'objectUtils';
-import _ from 'lodash';
export default class TelemetryAPI {
@@ -73,7 +72,7 @@ export default class TelemetryAPI {
* @returns {boolean} true if the object is a telemetry object.
*/
isTelemetryObject(domainObject) {
- return Boolean(this.findMetadataProvider(domainObject));
+ return Boolean(this.#findMetadataProvider(domainObject));
}
/**
@@ -87,7 +86,7 @@ export default class TelemetryAPI {
* @memberof module:openmct.TelemetryAPI~TelemetryProvider#
*/
canProvideTelemetry(domainObject) {
- return Boolean(this.findSubscriptionProvider(domainObject))
+ return Boolean(this.#findSubscriptionProvider(domainObject))
|| Boolean(this.findRequestProvider(domainObject));
}
@@ -120,7 +119,7 @@ export default class TelemetryAPI {
/**
* @private
*/
- findSubscriptionProvider() {
+ #findSubscriptionProvider() {
const args = Array.prototype.slice.apply(arguments);
function supportsDomainObject(provider) {
return provider.supportsSubscribe.apply(provider, args);
@@ -130,9 +129,10 @@ export default class TelemetryAPI {
}
/**
- * @private
+ * Returns a telemetry request provider that supports
+ * a given domain object and options.
*/
- findRequestProvider(domainObject) {
+ findRequestProvider() {
const args = Array.prototype.slice.apply(arguments);
function supportsDomainObject(provider) {
return provider.supportsRequest.apply(provider, args);
@@ -144,7 +144,7 @@ export default class TelemetryAPI {
/**
* @private
*/
- findMetadataProvider(domainObject) {
+ #findMetadataProvider(domainObject) {
return this.metadataProviders.filter(function (p) {
return p.supportsMetadata(domainObject);
})[0];
@@ -153,7 +153,7 @@ export default class TelemetryAPI {
/**
* @private
*/
- findLimitEvaluator(domainObject) {
+ #findLimitEvaluator(domainObject) {
return this.limitProviders.filter(function (p) {
return p.supportsLimits(domainObject);
})[0];
@@ -161,6 +161,7 @@ export default class TelemetryAPI {
/**
* @private
+ * Though used in TelemetryCollection as well
*/
standardizeRequestOptions(options) {
if (!Object.prototype.hasOwnProperty.call(options, 'start')) {
@@ -174,6 +175,10 @@ export default class TelemetryAPI {
if (!Object.prototype.hasOwnProperty.call(options, 'domain')) {
options.domain = this.openmct.time.timeSystem().key;
}
+
+ if (!Object.prototype.hasOwnProperty.call(options, 'timeContext')) {
+ options.timeContext = this.openmct.time;
+ }
}
/**
@@ -241,7 +246,7 @@ export default class TelemetryAPI {
/**
* Request historical telemetry for a domain object.
* The `options` argument allows you to specify filters
- * (start, end, etc.), sort order, and strategies for retrieving
+ * (start, end, etc.), sort order, time context, and strategies for retrieving
* telemetry (aggregation, latest available, etc.).
*
* @method request
@@ -255,7 +260,7 @@ export default class TelemetryAPI {
*/
async request(domainObject) {
if (this.noRequestProviderForAllObjects) {
- return Promise.resolve([]);
+ return [];
}
if (arguments.length === 1) {
@@ -273,22 +278,24 @@ export default class TelemetryAPI {
if (!provider) {
this.requestAbortControllers.delete(abortController);
- return this.handleMissingRequestProvider(domainObject);
+ return this.#handleMissingRequestProvider(domainObject);
}
arguments[1] = await this.applyRequestInterceptors(domainObject, arguments[1]);
+ try {
+ const telemetry = await provider.request(...arguments);
+
+ return telemetry;
+ } catch (error) {
+ if (error.name !== 'AbortError') {
+ this.openmct.notifications.error('Error requesting telemetry data, see console for details');
+ console.error(error);
+ }
- return provider.request.apply(provider, arguments)
- .catch((rejected) => {
- if (rejected.name !== 'AbortError') {
- this.openmct.notifications.error('Error requesting telemetry data, see console for details');
- console.error(rejected);
- }
-
- return Promise.reject(rejected);
- }).finally(() => {
- this.requestAbortControllers.delete(abortController);
- });
+ throw new Error(error);
+ } finally {
+ this.requestAbortControllers.delete(abortController);
+ }
}
/**
@@ -306,7 +313,7 @@ export default class TelemetryAPI {
* the subscription
*/
subscribe(domainObject, callback, options) {
- const provider = this.findSubscriptionProvider(domainObject);
+ const provider = this.#findSubscriptionProvider(domainObject);
if (!this.subscribeCache) {
this.subscribeCache = {};
@@ -353,7 +360,7 @@ export default class TelemetryAPI {
*/
getMetadata(domainObject) {
if (!this.metadataCache.has(domainObject)) {
- const metadataProvider = this.findMetadataProvider(domainObject);
+ const metadataProvider = this.#findMetadataProvider(domainObject);
if (!metadataProvider) {
return;
}
@@ -370,33 +377,6 @@ export default class TelemetryAPI {
}
/**
- * Return an array of valueMetadatas that are common to all supplied
- * telemetry objects and match the requested hints.
- *
- */
- commonValuesForHints(metadatas, hints) {
- const options = metadatas.map(function (metadata) {
- const values = metadata.valuesForHints(hints);
-
- return _.keyBy(values, 'key');
- }).reduce(function (a, b) {
- const results = {};
- Object.keys(a).forEach(function (key) {
- if (Object.prototype.hasOwnProperty.call(b, key)) {
- results[key] = a[key];
- }
- });
-
- return results;
- });
- const sortKeys = hints.map(function (h) {
- return 'hints.' + h;
- });
-
- return _.sortBy(options, sortKeys);
- }
-
- /**
* Get a value formatter for a given valueMetadata.
*
* @returns {TelemetryValueFormatter}
@@ -450,7 +430,7 @@ export default class TelemetryAPI {
*
* @returns Promise
*/
- handleMissingRequestProvider(domainObject) {
+ #handleMissingRequestProvider(domainObject) {
this.noRequestProviderForAllObjects = this.requestProviders.every(requestProvider => {
const supportsRequest = requestProvider.supportsRequest.apply(requestProvider, arguments);
const hasRequestProvider = Object.prototype.hasOwnProperty.call(requestProvider, 'request') && typeof requestProvider.request === 'function';
@@ -540,7 +520,7 @@ export default class TelemetryAPI {
* @memberof module:openmct.TelemetryAPI~TelemetryProvider#
*/
getLimitEvaluator(domainObject) {
- const provider = this.findLimitEvaluator(domainObject);
+ const provider = this.#findLimitEvaluator(domainObject);
if (!provider) {
return {
evaluate: function () {}
@@ -578,7 +558,7 @@ export default class TelemetryAPI {
* @memberof module:openmct.TelemetryAPI~TelemetryProvider#
*/
getLimits(domainObject) {
- const provider = this.findLimitEvaluator(domainObject);
+ const provider = this.#findLimitEvaluator(domainObject);
if (!provider || !provider.getLimits) {
return {
limits: function () {