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 'platform/telemetry/src/TelemetryController.js')
-rw-r--r--platform/telemetry/src/TelemetryController.js404
1 files changed, 0 insertions, 404 deletions
diff --git a/platform/telemetry/src/TelemetryController.js b/platform/telemetry/src/TelemetryController.js
deleted file mode 100644
index beebbb186..000000000
--- a/platform/telemetry/src/TelemetryController.js
+++ /dev/null
@@ -1,404 +0,0 @@
-/*****************************************************************************
- * Open MCT, Copyright (c) 2014-2021, 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.
- *****************************************************************************/
-
-/**
- * Module defining TelemetryController. Created by vwoeltje on 11/12/14.
- */
-define(
- [],
- function () {
-
- /**
- * Serves as a reusable controller for views (or parts of views)
- * which need to issue requests for telemetry data and use the
- * results
- *
- * @memberof platform/telemetry
- * @constructor
- * @deprecated use platform/telemetry.TelemetryHandler instead
- */
- function TelemetryController($scope, $q, $timeout, $log) {
-
- // Private to maintain in this scope
- var self = {
- // IDs of domain objects with telemetry
- ids: [],
-
- // Containers for latest responses (id->response)
- // Used internally; see buildResponseContainer
- // for format
- response: {},
-
- // Request fields (id->requests)
- request: {},
-
- // Number of outstanding requests
- pending: 0,
-
- // Array of object metadatas, for easy retrieval
- metadatas: [],
-
- // Interval at which to poll for new data
- interval: 1000,
-
- // Flag tracking whether or not a request
- // is in progress
- refreshing: false,
-
- // Used to track whether a new telemetryUpdate
- // is being issued.
- broadcasting: false,
-
- // Active subscriptions
- subscriptions: [],
-
- // Used for getTelemetryObjects; a reference is
- // stored so that this can be called in a watch
- telemetryObjects: [],
-
- // Whether or not this controller is active; once
- // scope is destroyed, polling should stop.
- active: true
- };
-
- // Broadcast that a telemetryUpdate has occurred.
- function doBroadcast() {
- // This may get called multiple times from
- // multiple objects, so set a flag to suppress
- // multiple simultaneous events from being
- // broadcast, then issue the actual broadcast
- // later (via $timeout)
- if (!self.broadcasting) {
- self.broadcasting = true;
- $timeout(function () {
- self.broadcasting = false;
- $scope.$broadcast("telemetryUpdate");
- });
- }
- }
-
- // Issue a request for new telemetry for one of the
- // objects being tracked by this controller
- function requestTelemetryForId(id, trackPending) {
- var responseObject = self.response[id],
- domainObject = responseObject.domainObject,
- telemetry = domainObject.getCapability('telemetry');
-
- // Callback for when data comes back
- function storeData(data) {
- self.pending -= trackPending ? 1 : 0;
- responseObject.data = data;
- doBroadcast();
- }
-
- self.pending += trackPending ? 1 : 0;
-
- // Shouldn't happen, but isn't fatal,
- // so warn.
- if (!telemetry) {
- $log.warn([
- "Expected telemetry capability for ",
- id,
- " but found none. Cannot request data."
- ].join(""));
-
- // Request won't happen, so don't
- // mark it as pending.
- self.pending -= trackPending ? 1 : 0;
-
- return;
- }
-
- // Issue the request using the object's telemetry capability
- return $q.when(telemetry.requestData(self.request))
- .then(storeData);
- }
-
- // Request telemetry for all objects tracked by this
- // controller. A flag is passed to indicate whether the
- // pending counter should be incremented (this will
- // cause isRequestPending() to change, which we only
- // want to happen for requests which have originated
- // outside of this controller's polling action.)
- function requestTelemetry(trackPending) {
- return $q.all(self.ids.map(function (id) {
- return requestTelemetryForId(id, trackPending);
- }));
- }
-
- // Subscribe to streaming telemetry updates
- function subscribe(telemetryCapability, id) {
- return telemetryCapability.subscribe(function () {
- requestTelemetryForId(id, false);
- });
- }
-
- // Stop listening to active subscriptions
- function unsubscribe() {
- self.subscriptions.forEach(function (s) {
- return s && s();
- });
- self.subscriptions = [];
- }
-
- // Look up domain objects which have telemetry capabilities.
- // This will either be the object in view, or object that
- // this object delegates its telemetry capability to.
- function promiseRelevantDomainObjects(domainObject) {
- // If object has been cleared, there are no relevant
- // telemetry-providing domain objects.
- if (!domainObject) {
- return $q.when([]);
- }
-
- // Otherwise, try delegation first, and attach the
- // object itself if it has a telemetry capability.
- return $q.when(domainObject.useCapability(
- "delegation",
- "telemetry"
- )).then(function (result) {
- var head = domainObject.hasCapability("telemetry")
- ? [domainObject] : [],
- tail = result || [];
-
- return head.concat(tail);
- });
- }
-
- // Build the response containers that are used internally
- // by this controller to track latest responses, etc, for
- // a given domain object.
- function buildResponseContainer(domainObject) {
- var telemetry = domainObject
- && domainObject.getCapability("telemetry"),
- id,
- metadata;
-
- if (telemetry) {
- id = domainObject.getId();
-
- self.subscriptions.push(subscribe(telemetry, id));
-
- metadata = telemetry.getMetadata();
-
- self.response[id] = {
- name: domainObject.getModel().name,
- domainObject: domainObject,
- metadata: metadata,
- pending: 0,
- data: {}
- };
- } else {
- // Shouldn't happen, as we've checked for
- // telemetry capabilities previously, but
- // be defensive.
- $log.warn([
- "Expected telemetry capability for ",
- domainObject.getId(),
- " but none was found."
- ].join(""));
-
- // Create an empty container so subsequent
- // behavior won't hit an exception.
- self.response[domainObject.getId()] = {
- name: domainObject.getModel().name,
- domainObject: domainObject,
- metadata: {},
- pending: 0,
- data: {}
- };
- }
- }
-
- // Build response containers (as above) for all
- // domain objects, and update some controller-internal
- // state to support subsequent calls.
- function buildResponseContainers(domainObjects) {
- // Clear out any existing subscriptions
- unsubscribe();
-
- // Build the containers
- domainObjects.forEach(buildResponseContainer);
-
- // Store the reference to support getTelemetryObjects
- self.telemetryObjects = domainObjects;
-
- // Maintain a list of relevant ids, to convert
- // back from dictionary-like container objects to arrays.
- self.ids = domainObjects.map(function (obj) {
- return obj.getId();
- });
-
- // Keep a reference to all applicable metadata
- // to return from getMetadata
- self.metadatas = self.ids.map(function (id) {
- return self.response[id].metadata;
- });
-
- // Issue a request for the new objects, if we
- // know what our request looks like
- if (self.request) {
- requestTelemetry(true);
- }
- }
-
- // Get relevant telemetry-providing domain objects
- // for the domain object which is represented in this
- // scope. This will be the domain object itself, or
- // its telemetry delegates, or both.
- function getTelemetryObjects(domainObject) {
- unsubscribe();
- promiseRelevantDomainObjects(domainObject)
- .then(buildResponseContainers);
- }
-
- // Handle a polling refresh interval
- function startTimeout() {
- if (!self.refreshing && self.interval !== undefined) {
- self.refreshing = true;
- $timeout(function () {
- if (self.request) {
- requestTelemetry(false);
- }
-
- self.refreshing = false;
-
- if (self.active) {
- startTimeout();
- }
- }, self.interval);
- }
- }
-
- // Stop polling for changes
- function deactivate() {
- unsubscribe();
- self.active = false;
- }
-
- // Watch for a represented domain object
- $scope.$watch("domainObject", getTelemetryObjects);
-
- // Stop polling when destroyed
- $scope.$on("$destroy", deactivate);
-
- // Begin polling for data changes
- startTimeout();
-
- return {
- /**
- * Get all telemetry metadata associated with
- * telemetry-providing domain objects managed by
- * this controller.
- *
- * This will ordered in the
- * same manner as `getTelemetryObjects()` or
- * `getResponse()`; that is, the metadata at a
- * given index will correspond to the telemetry-providing
- * domain object at the same index.
- * @returns {Array} an array of metadata objects
- * @memberof platform/telemetry.TelemetryController#
- */
- getMetadata: function () {
- return self.metadatas;
- },
- /**
- * Get all telemetry-providing domain objects managed by
- * this controller.
- *
- * This will ordered in the
- * same manner as `getMetadata()` or
- * `getResponse()`; that is, the metadata at a
- * given index will correspond to the telemetry-providing
- * domain object at the same index.
- * @returns {DomainObject[]} an array of metadata objects
- * @memberof platform/telemetry.TelemetryController#
- */
- getTelemetryObjects: function () {
- return self.telemetryObjects;
- },
- /**
- * Get the latest telemetry response for a specific
- * domain object (if an argument is given) or for all
- * objects managed by this controller (if no argument
- * is supplied.)
- *
- * In the first form, this returns a single object; in
- * the second form, it returns an array ordered in
- * same manner as `getMetadata()` or
- * `getTelemetryObjects()`; that is, the telemetry
- * response at a given index will correspond to the
- * telemetry-providing domain object at the same index.
- * @returns {Array} an array of responses
- * @memberof platform/telemetry.TelemetryController#
- */
- getResponse: function getResponse(arg) {
- var id = arg && (typeof arg === 'string'
- ? arg : arg.getId());
-
- if (id) {
- return (self.response[id] || {}).data;
- }
-
- return (self.ids || []).map(getResponse);
- },
- /**
- * Check if the latest request (not counting
- * requests from TelemtryController's own polling)
- * is still outstanding. Users of the TelemetryController
- * may use this method as a condition upon which to
- * show user feedback, such as a wait spinner.
- *
- * @returns {boolean} true if the request is still outstanding
- * @memberof platform/telemetry.TelemetryController#
- */
- isRequestPending: function () {
- return self.pending > 0;
- },
- /**
- * Issue a new data request. This will change the
- * request parameters that are passed along to all
- * telemetry capabilities managed by this controller.
- * @memberof platform/telemetry.TelemetryController#
- */
- requestData: function (request) {
- self.request = request || {};
-
- return requestTelemetry(true);
- },
- /**
- * Change the interval at which this controller will
- * perform its polling activity.
- * @param {number} durationMillis the interval at
- * which to poll, in milliseconds
- * @memberof platform/telemetry.TelemetryController#
- */
- setRefreshInterval: function (durationMillis) {
- self.interval = durationMillis;
- startTimeout();
- }
- };
- }
-
- return TelemetryController;
- }
-);