diff options
Diffstat (limited to 'src/api/telemetry/TelemetryAPI.js')
-rw-r--r-- | src/api/telemetry/TelemetryAPI.js | 88 |
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 () { |