mirror of
https://github.com/nasa/openmct.git
synced 2025-01-31 00:23:54 +00:00
Warn user if telemetry not all telemetry metadata matches time system (#4996)
* warn user if telemetry not all telemetry metadata matches time system * create spec file for telemetry collections * Add tests (#4999) - Test for warn if metadata does not match active TimeSystem - Test for no warn if metadata matches active TimeSystem * unset timeKey if no matching domain found * Extract errors to constants file and update tests Co-authored-by: Jesse Mazzella <jesse.d.mazzella@nasa.gov>
This commit is contained in:
parent
09da373d1c
commit
03e7d912be
@ -22,11 +22,7 @@
|
||||
|
||||
import _ from 'lodash';
|
||||
import EventEmitter from 'EventEmitter';
|
||||
|
||||
const ERRORS = {
|
||||
TIMESYSTEM_KEY: 'All telemetry metadata must have a telemetry value with a key that matches the key of the active time system.',
|
||||
LOADED: 'Telemetry Collection has already been loaded.'
|
||||
};
|
||||
import { LOADED_ERROR, TIMESYSTEM_KEY_NOTIFICATION, TIMESYSTEM_KEY_WARNING } from './constants';
|
||||
|
||||
/** Class representing a Telemetry Collection. */
|
||||
|
||||
@ -61,7 +57,7 @@ export class TelemetryCollection extends EventEmitter {
|
||||
*/
|
||||
load() {
|
||||
if (this.loaded) {
|
||||
this._error(ERRORS.LOADED);
|
||||
this._error(LOADED_ERROR);
|
||||
}
|
||||
|
||||
this._setTimeSystem(this.openmct.time.timeSystem());
|
||||
@ -267,6 +263,10 @@ export class TelemetryCollection extends EventEmitter {
|
||||
this.lastBounds = bounds;
|
||||
|
||||
if (isTick) {
|
||||
if (this.timeKey === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
// need to check futureBuffer and need to check
|
||||
// if anything has fallen out of bounds
|
||||
let startIndex = 0;
|
||||
@ -306,7 +306,6 @@ export class TelemetryCollection extends EventEmitter {
|
||||
if (added.length > 0) {
|
||||
this.emit('add', added);
|
||||
}
|
||||
|
||||
} else {
|
||||
// user bounds change, reset
|
||||
this._reset();
|
||||
@ -326,12 +325,16 @@ export class TelemetryCollection extends EventEmitter {
|
||||
let domains = this.metadata.valuesForHints(['domain']);
|
||||
let domain = domains.find((d) => d.key === timeSystem.key);
|
||||
|
||||
if (domain === undefined) {
|
||||
this._error(ERRORS.TIMESYSTEM_KEY);
|
||||
if (domain !== undefined) {
|
||||
// timeKey is used to create a dummy datum used for sorting
|
||||
this.timeKey = domain.source;
|
||||
} else {
|
||||
this.timeKey = undefined;
|
||||
|
||||
this._warn(TIMESYSTEM_KEY_WARNING);
|
||||
this.openmct.notifications.alert(TIMESYSTEM_KEY_NOTIFICATION);
|
||||
}
|
||||
|
||||
// timeKey is used to create a dummy datum used for sorting
|
||||
this.timeKey = domain.source; // this defaults to key if no source is set
|
||||
let metadataValue = this.metadata.value(timeSystem.key) || { format: timeSystem.key };
|
||||
let valueFormatter = this.openmct.telemetry.getValueFormatter(metadataValue);
|
||||
|
||||
@ -402,4 +405,8 @@ export class TelemetryCollection extends EventEmitter {
|
||||
_error(message) {
|
||||
throw new Error(message);
|
||||
}
|
||||
|
||||
_warn(message) {
|
||||
console.warn(message);
|
||||
}
|
||||
}
|
||||
|
101
src/api/telemetry/TelemetryCollectionSpec.js
Normal file
101
src/api/telemetry/TelemetryCollectionSpec.js
Normal file
@ -0,0 +1,101 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2014-2022, 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.
|
||||
*****************************************************************************/
|
||||
|
||||
import {
|
||||
createOpenMct,
|
||||
resetApplicationState
|
||||
} from 'utils/testing';
|
||||
import { TIMESYSTEM_KEY_WARNING } from './constants';
|
||||
|
||||
describe('Telemetry Collection', () => {
|
||||
let openmct;
|
||||
let mockMetadataProvider;
|
||||
let mockMetadata = {};
|
||||
let domainObject;
|
||||
|
||||
beforeEach(done => {
|
||||
openmct = createOpenMct();
|
||||
openmct.on('start', done);
|
||||
|
||||
domainObject = {
|
||||
identifier: {
|
||||
key: 'a',
|
||||
namespace: 'b'
|
||||
},
|
||||
type: 'sample-type'
|
||||
};
|
||||
|
||||
mockMetadataProvider = {
|
||||
key: 'mockMetadataProvider',
|
||||
supportsMetadata() {
|
||||
return true;
|
||||
},
|
||||
getMetadata() {
|
||||
return mockMetadata;
|
||||
}
|
||||
};
|
||||
|
||||
openmct.telemetry.addProvider(mockMetadataProvider);
|
||||
openmct.startHeadless();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
return resetApplicationState();
|
||||
});
|
||||
|
||||
it('Warns if telemetry metadata does not match the active timesystem', () => {
|
||||
mockMetadata.values = [
|
||||
{
|
||||
key: 'foo',
|
||||
name: 'Bar',
|
||||
hints: {
|
||||
domain: 1
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
const telemetryCollection = openmct.telemetry.requestCollection(domainObject);
|
||||
spyOn(telemetryCollection, '_warn');
|
||||
telemetryCollection.load();
|
||||
|
||||
expect(telemetryCollection._warn).toHaveBeenCalledOnceWith(TIMESYSTEM_KEY_WARNING);
|
||||
});
|
||||
|
||||
it('Does not warn if telemetry metadata matches the active timesystem', () => {
|
||||
mockMetadata.values = [
|
||||
{
|
||||
key: 'utc',
|
||||
name: 'Timestamp',
|
||||
format: 'utc',
|
||||
hints: {
|
||||
domain: 1
|
||||
}
|
||||
}
|
||||
];
|
||||
|
||||
const telemetryCollection = openmct.telemetry.requestCollection(domainObject);
|
||||
spyOn(telemetryCollection, '_warn');
|
||||
telemetryCollection.load();
|
||||
|
||||
expect(telemetryCollection._warn).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
25
src/api/telemetry/constants.js
Normal file
25
src/api/telemetry/constants.js
Normal file
@ -0,0 +1,25 @@
|
||||
/*****************************************************************************
|
||||
* Open MCT, Copyright (c) 2014-2022, 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.
|
||||
*****************************************************************************/
|
||||
|
||||
export const TIMESYSTEM_KEY_WARNING = 'All telemetry metadata must have a telemetry value with a key that matches the key of the active time system.';
|
||||
export const TIMESYSTEM_KEY_NOTIFICATION = 'Telemetry metadata does not match the active time system.';
|
||||
export const LOADED_ERROR = 'Telemetry Collection has already been loaded.';
|
Loading…
x
Reference in New Issue
Block a user