Skip to content

Commit 02dd755

Browse files
jvigliottadavetsay
andauthored
Configurable batching dealy (#300)
Co-authored-by: David Tsay <3614296+davetsay@users.noreply.github.com>
1 parent 643a7a7 commit 02dd755

6 files changed

Lines changed: 29 additions & 28 deletions

File tree

config.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,14 @@
183183
*/
184184
lmstEpoch: Date.UTC(2020, 2, 18, 0, 0, 0),
185185

186+
/*
187+
* subscriptionMCWSFilterDelay: delay in milliseconds for combining filters for the same subscription
188+
* endpoint connection. Smaller value = quicker display of realtime data (ex, 10ms in a
189+
* 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
190+
* (ex, 100ms+ in a high latency environment)
191+
*/
192+
subscriptionMCWSFilterDelay: 100,
193+
186194
/**
187195
* timeSystems: specify the time systems to use.
188196
* Options are 'scet', 'ert', 'sclk', 'msl.sol' and 'lmst'.

src/realtime/MCWSDataProductStreamProvider.js

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@ import MCWSStreamProvider from './MCWSStreamProvider';
55
* @memberof {vista/telemetry}
66
*/
77
class MCWSDataProductStreamProvider extends MCWSStreamProvider {
8-
constructor(openmct, vistaTime, options) {
9-
super(openmct, vistaTime);
10-
this.options = options;
11-
}
12-
138
getUrl(domainObject) {
149
return domainObject.telemetry?.dataProductStreamUrl;
1510
}

src/realtime/MCWSFrameEventStreamProvider.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,6 @@ import MCWSStreamProvider from './MCWSStreamProvider';
55
* @memberof {vista/telemetry}
66
*/
77
class MCWSFrameEventStreamProvider extends MCWSStreamProvider {
8-
/**
9-
* @param {Object} openmct The Open MCT API
10-
* @param {Object} vistaTime The Vista time API
11-
*/
12-
constructor(openmct, vistaTime) {
13-
super(openmct, vistaTime);
14-
}
15-
168
/**
179
* Get the URL for streaming data for this domain object
1810
* @param {Object} domainObject The domain object

src/realtime/MCWSStreamProvider.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,20 @@ import GlobalStaleness from 'services/globalStaleness/globalStaleness';
1616
*/
1717

1818
class MCWSStreamProvider {
19-
constructor(openmct, vistaTime) {
19+
constructor(openmct, vistaTime, options) {
2020
this.openmct = openmct;
2121
this.vistaTime = function () {
2222
return vistaTime;
2323
};
24+
this.options = options;
2425

2526
this.sessions = sessionService();
2627
this.filterService = filterService();
2728

2829
this.subscriptions = {};
2930
this.requests = {};
31+
32+
this.subscriptionMCWSFilterDelay = options?.time?.subscriptionMCWSFilterDelay;
3033
}
3134

3235
processGlobalStaleness(data, latestTimestamp) {
@@ -214,7 +217,8 @@ class MCWSStreamProvider {
214217
key: this.getKey(domainObject),
215218
property: this.getProperty(domainObject),
216219
mcwsVersion: domainObject.telemetry.mcwsVersion,
217-
extraFilterTerms: options?.filters ? this.serializeFilters(options.filters) : undefined
220+
extraFilterTerms: options?.filters ? this.serializeFilters(options.filters) : undefined,
221+
subscriptionMCWSFilterDelay: this.subscriptionMCWSFilterDelay
218222
};
219223

220224
function unsubscribe() {

src/realtime/MCWSStreamWorkerScript.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@
2727
* @param {Object} extraFilterTerms additional filter terms
2828
* @param {Object} globalFilters global filters to apply
2929
*/
30-
constructor(url, property, topic, extraFilterTerms, globalFilters) {
30+
constructor(url, property, topic, extraFilterTerms, globalFilters, subscriptionMCWSFilterDelay) {
3131
this.url = url;
3232
this.topic = topic;
3333
this.subscribers = {};
3434
this.property = property;
3535
this.extraFilterTerms = extraFilterTerms;
3636
this.globalFilters = globalFilters;
37+
this.subscriptionMCWSFilterDelay = subscriptionMCWSFilterDelay ?? 100;
3738
}
3839

3940
/**
@@ -140,7 +141,7 @@
140141
this.pending = setTimeout(() => {
141142
this.pending = undefined;
142143
this.reconnect();
143-
}, 100);
144+
}, this.subscriptionMCWSFilterDelay);
144145
}
145146

146147
/**
@@ -244,7 +245,7 @@
244245
* @param {MCWSStreamSubscription} subscription the subscription to obtain
245246
*/
246247
subscribe(subscription) {
247-
const { url, key, property, extraFilterTerms } = subscription;
248+
const { url, key, property, extraFilterTerms, subscriptionMCWSFilterDelay } = subscription;
248249
const cacheKey = this.generateCacheKey(url, property, extraFilterTerms);
249250

250251
if (!this.connections[cacheKey]) {
@@ -253,7 +254,8 @@
253254
property,
254255
this.activeTopic,
255256
extraFilterTerms,
256-
this.activeGlobalFilters
257+
this.activeGlobalFilters,
258+
subscriptionMCWSFilterDelay
257259
);
258260
}
259261

src/realtime/plugin.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@ function RealtimeTelemetryPlugin(vistaTime, options) {
1414
return function install(openmct) {
1515
filterService(openmct, options.globalFilters);
1616

17-
openmct.telemetry.addProvider(new MCWSChannelStreamProvider(openmct, vistaTime));
18-
openmct.telemetry.addProvider(new MCWSEVRStreamProvider(openmct, vistaTime));
19-
openmct.telemetry.addProvider(new MCWSEVRLevelStreamProvider(openmct, vistaTime));
20-
openmct.telemetry.addProvider(new MCWSCommandStreamProvider(openmct, vistaTime));
21-
openmct.telemetry.addProvider(new MCWSPacketSummaryEventProvider(openmct, vistaTime));
17+
openmct.telemetry.addProvider(new MCWSChannelStreamProvider(openmct, vistaTime, options));
18+
openmct.telemetry.addProvider(new MCWSEVRStreamProvider(openmct, vistaTime, options));
19+
openmct.telemetry.addProvider(new MCWSEVRLevelStreamProvider(openmct, vistaTime, options));
20+
openmct.telemetry.addProvider(new MCWSCommandStreamProvider(openmct, vistaTime, options));
21+
openmct.telemetry.addProvider(new MCWSPacketSummaryEventProvider(openmct, vistaTime, options));
2222
openmct.telemetry.addProvider(new MCWSDataProductStreamProvider(openmct, vistaTime, options));
23-
openmct.telemetry.addProvider(new MCWSMessageStreamProvider(openmct, vistaTime));
24-
openmct.telemetry.addProvider(new MCWSFrameSummaryStreamProvider(openmct, vistaTime));
25-
openmct.telemetry.addProvider(new MCWSFrameEventStreamProvider(openmct, vistaTime));
26-
openmct.telemetry.addProvider(new MCWSAlarmMessageStreamProvider(openmct, vistaTime));
23+
openmct.telemetry.addProvider(new MCWSMessageStreamProvider(openmct, vistaTime, options));
24+
openmct.telemetry.addProvider(new MCWSFrameSummaryStreamProvider(openmct, vistaTime, options));
25+
openmct.telemetry.addProvider(new MCWSFrameEventStreamProvider(openmct, vistaTime, options));
26+
openmct.telemetry.addProvider(new MCWSAlarmMessageStreamProvider(openmct, vistaTime, options));
2727
}
2828
}
2929

0 commit comments

Comments
 (0)