Skip to content

Commit 1e7570d

Browse files
committed
Bug Fix: When a browser reconnects after losing a WebSocket connection, push a full data update to resync. Ref #302
1 parent fb266b6 commit 1e7570d

4 files changed

Lines changed: 37 additions & 4 deletions

File tree

htdocs/js/comm.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ app.comm = {
99
statusTimeoutSec: 60,
1010
socket: null,
1111
commandQueue: [],
12+
attempt: 0,
1213

1314
init: function() {
1415
// connect to server via socket.io
@@ -42,6 +43,7 @@ app.comm = {
4243
this.disconnect();
4344

4445
Debug.trace('comm', "WebSocket Connect: " + url);
46+
this.attempt++;
4547

4648
// custom socket abstraction layer
4749
var socket = this.socket = {
@@ -78,7 +80,7 @@ app.comm = {
7880
Debug.trace('comm', "WebSocket connected successfully");
7981

8082
// authenticate websocket now
81-
socket.emit( 'authenticate', {} );
83+
socket.emit( 'authenticate', { attempt: self.attempt } );
8284
};
8385

8486
socket.ws.onmessage = function (event) {

htdocs/js/pages/PageUtils.class.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4609,8 +4609,8 @@ Page.PageUtils = class PageUtils extends Page.Base {
46094609
break;
46104610

46114611
case 'group':
4612-
pairs.push([ ' ' ]);
4613-
nice_id = ' ';
4612+
pairs.push([ '-' ]);
4613+
nice_id = '-';
46144614
break;
46154615
}
46164616
for (var idy = 0, ley = pairs.length; idy < ley; idy++) {

htdocs/js/pages/Servers.class.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ Page.Servers = class Servers extends Page.ServerUtils {
212212
this.applyTableFilters();
213213
this.addPageDescription();
214214
this.checkAllSatelliteVersions();
215+
this.setupBoxButtonFloater();
215216

216217
SingleSelect.init( this.div.find('#fe_es_filter') );
217218

@@ -2098,6 +2099,8 @@ Page.Servers = class Servers extends Page.ServerUtils {
20982099
this.raf = false;
20992100
}
21002101

2102+
this.cleanupBoxButtonFloater();
2103+
21012104
this.div.html( '' );
21022105
return true;
21032106
}

lib/comm.js

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ class Communication {
231231

232232
case 'authenticate':
233233
// user (human) is trying to authenticate
234-
this.logComm(9, "Incoming socket auth request from client");
234+
this.logComm(9, "Incoming socket auth request from client", data);
235235

236236
// handle case when we are not master, send back retry command
237237
if (!this.master) {
@@ -272,6 +272,34 @@ class Communication {
272272

273273
self.logComm(6, "User socket has authenticated successfully: " + socket.id, { username: user.username });
274274
socket.send( 'login', { version: self.server.__version } );
275+
276+
// update essential client data if this is a reconnect
277+
if (data.attempt && (data.attempt > 1)) {
278+
self.logComm(6, `Socket reconnected (${data.attempt}), sending full client data update`);
279+
socket.send( 'update', {
280+
activeAlerts: self.activeAlerts,
281+
serverCache: self.serverCache,
282+
283+
servers: self.servers,
284+
groups: self.groups,
285+
monitors: self.monitors,
286+
alerts: self.alerts,
287+
288+
categories: self.categories,
289+
channels: self.channels,
290+
web_hooks: self.web_hooks,
291+
buckets: self.buckets,
292+
secrets: self.secrets, // just metadata, no actual secrets in here
293+
events: self.events,
294+
plugins: self.plugins,
295+
tags: self.tags,
296+
roles: self.roles,
297+
298+
state: self.state,
299+
stats: self.stats,
300+
masters: self.getMasterPeerData()
301+
} );
302+
}
275303
} ); // loadSession
276304
break;
277305

0 commit comments

Comments
 (0)