Skip to content

Commit b36c234

Browse files
davetsayPeter Di Pasqualejvigliotta
authored
Backmerge v5.3.1 into main (#305)
Co-authored-by: Peter Di Pasquale <peter.di.pasquale@jpl.nasa.gov> Co-authored-by: Jamie V <jamie.j.vigliotta@nasa.gov>
1 parent 7b13eb2 commit b36c234

18 files changed

Lines changed: 903 additions & 756 deletions

config.js

Lines changed: 129 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,14 @@
181181
*/
182182
lmstEpoch: Date.UTC(2020, 2, 18, 0, 0, 0),
183183

184+
/*
185+
* subscriptionMCWSFilterDelay: delay in milliseconds for combining filters for the same subscription
186+
* endpoint connection. Smaller value = quicker display of realtime data (ex, 10ms in a
187+
* low latency environment), higher value = avoids potentially creating and subsequently tearing down new websocket connections if filter changes are happening faster than server response times
188+
* (ex, 100ms+ in a high latency environment)
189+
*/
190+
subscriptionMCWSFilterDelay: 100,
191+
184192
/**
185193
* timeSystems: specify the time systems to use.
186194
* Options are 'scet', 'ert', 'sclk', 'msl.sol' and 'lmst'.
@@ -193,83 +201,137 @@
193201
*
194202
* key property is required and other options are optional
195203
* timeSystem:
196-
* * key: string, required
204+
* * key: string, required. Time system. Options are 'scet', 'ert', 'sclk', 'msl.sol' and 'lmst'.
197205
* * limit: number, optional - maximum duration between start and end bounds allow
198-
* * presets: array, optional - preset bounds for convenience
199-
* * * preset:
200-
* * * * label: string, descriptive label for preset
206+
* * modeSettings: object, optional - presets for convenience.
207+
* * * fixed: object, optional - valid objects are bounds objects and presets array.
208+
* * * realtime: object, optional - valid objects are clockOffsets and presets array.
209+
* * * lad:object, optional - valid objects are clockoffsets.
210+
* * * *
211+
* * * * Optional objects:
201212
* * * * bounds: start and end bounds for preset as numbers
202-
* * * * * * * * start and end can be declared as a number or a function returning a number
203-
*
213+
* * * * * * * * start: and end: can be declared as a number or a function returning a number
214+
* * * * presets: array of objects consisting of:
215+
* * * * * bounds: - required.
216+
* * * * * label: - required, string
217+
* * * * clockOffsets: object, optional. Start and end relative to active clock.
218+
* * * * start: and end: numbers relative to active clock's 0. Start is negative, end is positive.
204219
* *advanced** example configuration below
205220
*
206221
timeSystems: [
207-
{
208-
key:'scet',
209-
presets: [
210-
{
211-
label: 'Last 2 hours',
212-
bounds: {
213-
start: Date.now() - 1000 * 60 * 60 * 2,
214-
end: Date.now()
215-
}
222+
{
223+
key:'scet',
224+
modeSettings:{
225+
fixed:{
226+
bounds:{
227+
// 1 day ago
228+
start: new Date(
229+
Date.UTC(
230+
new Date().getUTCFullYear(),
231+
new Date().getUTCMonth(),
232+
new Date().getUTCDate()
233+
) - 1 * 864e5
234+
).getTime(),
235+
end: new Date(
236+
Date.UTC(
237+
new Date().getUTCFullYear(),
238+
new Date().getUTCMonth(),
239+
new Date().getUTCDate()
240+
) + 864e5 - 1
241+
).getTime()
216242
},
217-
{
218-
label: 'Last 1 hour',
219-
bounds: {
220-
start: Date.now() - 1000 * 60 * 60,
221-
end: Date.now()
222-
}
243+
presets:[
244+
{
245+
label: 'Last 2 hours (SCET Recorded)',
246+
bounds: {
247+
start: () => Date.now() - 1000 * 60 * 60 * 2,
248+
end: () => Date.now()
223249
}
224-
],
225-
limit: 1000 * 60 * 60 * 6
226-
},
227-
{
228-
key:'ert',
229-
presets: [
230-
{
231-
label: 'Last 2 hours',
232-
bounds: {
233-
start: Date.now() - 1000 * 60 * 60 * 2,
234-
end: Date.now()
235-
}
236-
},
237-
{
238-
label: 'Last 1 hour',
239-
bounds: {
240-
start: Date.now() - 1000 * 60 * 60,
241-
end: Date.now()
242-
}
250+
},
251+
]
252+
},
253+
realtime:{
254+
clockOffsets:{
255+
start: -60 * 60 * 1000,
256+
end: 5 * 60 * 1000
257+
},
258+
presets:[
259+
{
260+
label: 'Last 2 hours (SCET Realtime)',
261+
bounds: {
262+
start: -60 * 60 * 1000 * 2,
263+
end: 5 * 60 * 1000
243264
}
244-
],
245-
limit: 1000 * 60 * 60 * 6
265+
}
266+
]
267+
},
268+
lad:{
269+
clockOffsets:{
270+
start: -60 * 60 * 1000,
271+
end: 5 * 60 * 1000
272+
},
273+
},
274+
},
275+
limit: 1000 * 60 * 60 * 60
276+
},
277+
{
278+
key:'ert',
279+
modeSettings:{
280+
fixed:{
281+
bounds:{
282+
// 1 day ago
283+
start: new Date(
284+
Date.UTC(
285+
new Date().getUTCFullYear(),
286+
new Date().getUTCMonth(),
287+
new Date().getUTCDate()
288+
) - 1 * 864e5
289+
).getTime(),
290+
// today
291+
end: new Date(
292+
Date.UTC(
293+
new Date().getUTCFullYear(),
294+
new Date().getUTCMonth(),
295+
new Date().getUTCDate()
296+
) + 864e5 - 1
297+
).getTime()
246298
},
247-
{
248-
key:'sclk',
249-
presets: [
250-
{
251-
label: 'Last 2 hours',
252-
bounds: {
253-
start: Date.now() - 1000 * 60 * 60 * 2,
254-
end: Date.now()
255-
}
256-
},
257-
{
258-
label: 'Last 1 hour',
259-
bounds: {
260-
start: Date.now() - 1000 * 60 * 60,
261-
end: Date.now()
262-
}
263-
}
264-
],
265-
limit: 1000 / 5 * 60 * 60 * 6
299+
presets:[
300+
{
301+
label: 'Last 2 hours (ERT Recorded)',
302+
bounds: {
303+
start: Date.now() - 1000 * 60 * 60 * 2,
304+
end: Date.now()
305+
}
306+
},
307+
]
266308
},
267-
{
268-
key:'lmst',
269-
presets: []
270-
}
271-
],
272-
*/
309+
realtime:{
310+
clockOffsets:{
311+
start: -60 * 60 * 1000,
312+
end: 5 * 60 * 1000
313+
},
314+
presets:[
315+
{
316+
label: 'Last 2 hours (ERT Realtime)',
317+
bounds: {
318+
start: -60 * 60 * 1000 * 2,
319+
end: 5 * 60 * 1000
320+
}
321+
}
322+
]
323+
},
324+
lad:{
325+
clockOffsets:{
326+
start: -60 * 60 * 1000,
327+
end: 5 * 60 * 1000
328+
},
329+
},
330+
},
331+
limit: 1000 * 60 * 60 * 60
332+
}
333+
],
334+
*/
273335

274336
/**
275337
* allowRealtime: whether or not to allow utc-relative time conductor.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"mini-css-extract-plugin": "2.7.6",
4040
"moment": "2.30.1",
4141
"node-bourbon": "^4.2.3",
42-
"openmct": "nasa/openmct#omm-r5.3.0-rc3",
42+
"openmct": "nasa/openmct#omm-r5.3.1",
4343
"prettier": "3.4.2",
4444
"printj": "1.3.1",
4545
"raw-loader": "^0.5.1",

src/AMMOSPlugins.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ define([
9595
openmct.install(RealtimeSessions.default());
9696

9797
openmct.install(new HistoricalTelemetryPlugin(options));
98-
openmct.install(new RealtimeTelemetryPlugin(vistaTime, options));
98+
openmct.install(new RealtimeTelemetryPlugin.default(vistaTime, options));
9999
openmct.install(new TypePlugin.default());
100100
openmct.install(new TaxonomyPlugin(options.taxonomy));
101101
openmct.install(new LinkPlugin(options));
Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,23 @@
1-
define(['./MCWSStreamProvider'], function (MCWSStreamProvider) {
2-
'use strict';
1+
import MCWSStreamProvider from './MCWSStreamProvider';
32

4-
/**
5-
* Provides real-time streaming DataProduct data.
6-
* @constructor
7-
* @augments {MCWSStreamProvider}
8-
* @memberof {vista/telemetry}
9-
*/
10-
var MCWSAlarmMessageStreamProvider = MCWSStreamProvider.extend({
11-
constructor: function (openmct, vistaTime) {
12-
MCWSStreamProvider.call(this, openmct, vistaTime);
13-
}
14-
});
15-
16-
MCWSAlarmMessageStreamProvider.prototype.getUrl = function (domainObject) {
17-
return domainObject.telemetry && domainObject.telemetry.alarmMessageStreamUrl;
18-
};
3+
/**
4+
* Provides real-time streaming DataProduct data.
5+
* @memberof {vista/telemetry}
6+
*/
7+
class MCWSAlarmMessageStreamProvider extends MCWSStreamProvider {
8+
getUrl(domainObject) {
9+
return domainObject.telemetry?.alarmMessageStreamUrl;
10+
}
1911

20-
MCWSAlarmMessageStreamProvider.prototype.getKey = function (domainObject) {
12+
getKey(domainObject) {
2113
return domainObject.telemetry.key;
22-
};
14+
}
2315

24-
MCWSAlarmMessageStreamProvider.prototype.getProperty = function (domainObject) {
16+
getProperty(domainObject) {
2517
return domainObject.telemetry.property;
26-
};
27-
28-
MCWSAlarmMessageStreamProvider.prototype.notifyWorker = function (key, value) {
29-
MCWSStreamProvider.prototype.notifyWorker.call(this, key, value);
30-
};
18+
}
3119

32-
MCWSAlarmMessageStreamProvider.prototype.subscribe = function (domainObject, callback, options) {
20+
subscribe(domainObject, callback, options) {
3321
let { telemetry: { alarmLevel = 'any' } = {} } = domainObject;
3422
alarmLevel = alarmLevel.toUpperCase();
3523
let objects = [
@@ -68,14 +56,12 @@ define(['./MCWSStreamProvider'], function (MCWSStreamProvider) {
6856
object.telemetry.values = domainObject.telemetry.values;
6957
});
7058

71-
let unsubscribers = objects.map((object) =>
72-
MCWSStreamProvider.prototype.subscribe.call(this, object, callback, options)
73-
);
59+
let unsubscribers = objects.map((object) => super.subscribe(object, callback, options));
7460

7561
return () => {
7662
unsubscribers.forEach((unsubscribe) => unsubscribe());
7763
};
78-
};
64+
}
65+
}
7966

80-
return MCWSAlarmMessageStreamProvider;
81-
});
67+
export default MCWSAlarmMessageStreamProvider;
Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
1-
define(['./MCWSStreamProvider'], function (MCWSStreamProvider) {
2-
'use strict';
1+
import MCWSStreamProvider from './MCWSStreamProvider';
32

4-
/**
5-
* Provides real-time streaming channel data.
6-
* @constructor
7-
* @augments {MCWSStreamProvider}
8-
* @memberof {vista/telemetry}
9-
*/
10-
var MCWSChannelStreamProvider = MCWSStreamProvider.extend({});
3+
/**
4+
* Provides real-time streaming channel data.
5+
* @memberof {vista/telemetry}
6+
*/
7+
class MCWSChannelStreamProvider extends MCWSStreamProvider {
8+
getUrl(domainObject) {
9+
return domainObject.telemetry?.channelStreamUrl;
10+
}
1111

12-
MCWSChannelStreamProvider.prototype.getUrl = function (domainObject) {
13-
return domainObject.telemetry && domainObject.telemetry.channelStreamUrl;
14-
};
15-
16-
MCWSChannelStreamProvider.prototype.getKey = function (domainObject) {
12+
getKey(domainObject) {
1713
return domainObject.telemetry.channel_id;
18-
};
14+
}
1915

20-
MCWSChannelStreamProvider.prototype.getProperty = function () {
16+
getProperty() {
2117
return 'channel_id';
22-
};
18+
}
19+
}
2320

24-
return MCWSChannelStreamProvider;
25-
});
21+
export default MCWSChannelStreamProvider;
Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
1-
define(['./MCWSStreamProvider'], function (MCWSStreamProvider) {
2-
'use strict';
1+
import MCWSStreamProvider from './MCWSStreamProvider';
32

4-
/**
5-
* Provides real-time streaming CommandEvent data.
6-
* @constructor
7-
* @augments {MCWSStreamProvider}
8-
* @memberof {vista/telemetry}
9-
*/
10-
var MCWSCommandStreamProvider = MCWSStreamProvider.extend({});
3+
/**
4+
* Provides real-time streaming CommandEvent data.
5+
* @memberof {vista/telemetry}
6+
*/
7+
class MCWSCommandStreamProvider extends MCWSStreamProvider {
8+
getUrl(domainObject) {
9+
return domainObject.telemetry?.commandEventStreamUrl;
10+
}
1111

12-
MCWSCommandStreamProvider.prototype.getUrl = function (domainObject) {
13-
return domainObject.telemetry && domainObject.telemetry.commandEventStreamUrl;
14-
};
15-
16-
MCWSCommandStreamProvider.prototype.getKey = function (domainObject) {
12+
getKey() {
1713
// We return undefined so that we can match on undefined properties.
1814
return undefined;
19-
};
15+
}
2016

21-
MCWSCommandStreamProvider.prototype.getProperty = function () {
17+
getProperty() {
2218
// We just want something that returns undefined so it matches the
2319
// key above. Hacky.
2420
return 'some_undefined_property';
25-
};
21+
}
22+
}
2623

27-
return MCWSCommandStreamProvider;
28-
});
24+
export default MCWSCommandStreamProvider;

0 commit comments

Comments
 (0)