diff options
author | kelvinp <kelvinp@chromium.org> | 2016-01-14 13:03:39 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-14 22:03:04 +0000 |
commit | b955d57a3e2ebe18885e8fde2de699e12adb09d5 (patch) | |
tree | 5ae164f6b03b8399fd80f7d917bf25085d8bf9d8 /remoting | |
parent | 0a0f23505ad40946651827740fbc09bf06bddf3b (diff) | |
download | chromium_src-b955d57a3e2ebe18885e8fde2de699e12adb09d5.zip chromium_src-b955d57a3e2ebe18885e8fde2de699e12adb09d5.tar.gz chromium_src-b955d57a3e2ebe18885e8fde2de699e12adb09d5.tar.bz2 |
Measures host heartbeat freshness.
This CL reports the time elapsed between the host's last heartbeat to
the beginning of a Me2Me connection. This would help us to understand
whether there is a meaningful correlation between the host offline error
and the host's heartbeat freshness.
BUG=577447
Review URL: https://codereview.chromium.org/1581263002
Cr-Commit-Position: refs/heads/master@{#369538}
Diffstat (limited to 'remoting')
-rw-r--r-- | remoting/webapp/base/js/chromoting_event.js | 11 | ||||
-rw-r--r-- | remoting/webapp/base/js/session_logger.js | 43 | ||||
-rw-r--r-- | remoting/webapp/base/js/session_logger_unittest.js | 39 | ||||
-rw-r--r-- | remoting/webapp/base/js/telemetry_event_writer_unittest.js | 8 | ||||
-rw-r--r-- | remoting/webapp/crd/js/host_screen.js | 25 | ||||
-rw-r--r-- | remoting/webapp/crd/js/me2me_activity.js | 4 |
6 files changed, 82 insertions, 48 deletions
diff --git a/remoting/webapp/base/js/chromoting_event.js b/remoting/webapp/base/js/chromoting_event.js index 11b9732..476f879c 100644 --- a/remoting/webapp/base/js/chromoting_event.js +++ b/remoting/webapp/base/js/chromoting_event.js @@ -89,7 +89,10 @@ remoting.ChromotingEvent = function(type) { this.xmpp_error; /** @type {remoting.ChromotingEvent.SessionEntryPoint} */ this.session_entry_point; - /** @type {number} */ + /** + * Elapsed time since last host list refresh in milliseconds. + * @type {number} + */ this.host_status_update_elapsed_time; /** @type {remoting.ChromotingEvent.AuthMethod} */ this.auth_method; @@ -97,7 +100,11 @@ remoting.ChromotingEvent = function(type) { this.raw_plugin_error; /** @type {remoting.ChromotingEvent.SessionSummary} */ this.previous_session; - + /** + * Elapsed time since the last host heartbeat in milliseconds. + * @type {number} + */ + this.host_last_heartbeat_elapsed_time; this.init_(); }; diff --git a/remoting/webapp/base/js/session_logger.js b/remoting/webapp/base/js/session_logger.js index c05b5e8..6f26c9a 100644 --- a/remoting/webapp/base/js/session_logger.js +++ b/remoting/webapp/base/js/session_logger.js @@ -48,8 +48,16 @@ remoting.SessionLogger = function(role, writeLogEntry) { this.hostOs_ = remoting.ChromotingEvent.Os.OTHER; /** @private */ this.hostOsVersion_ = ''; - /** @private {number} */ + /** + * Elapsed time since last host list refresh in milliseconds. + * @private {number} + */ this.hostStatusUpdateElapsedTime_; + /** + * Elapsed time since the last host heartbeat in milliseconds. + * @private {number} + */ + this.hostLastHeartbeatElapsedTime_; /** @private */ this.mode_ = remoting.ChromotingEvent.Mode.ME2ME; /** @private {remoting.ChromotingEvent.AuthMethod} */ @@ -78,28 +86,18 @@ remoting.SessionLogger.prototype.setAuthTotalTime = function(totalTime) { }; /** - * @param {string} hostVersion Version of the host for current session. + * @param {remoting.Host} host * @return {void} Nothing. */ -remoting.SessionLogger.prototype.setHostVersion = function(hostVersion) { - this.hostVersion_ = hostVersion; -}; - -/** - * @param {remoting.ChromotingEvent.Os} hostOs Type of the OS the host - * for the current session. - * @return {void} Nothing. - */ -remoting.SessionLogger.prototype.setHostOs = function(hostOs) { - this.hostOs_ = hostOs; -}; - -/** - * @param {string} hostOsVersion Version of the host Os for current session. - * @return {void} Nothing. - */ -remoting.SessionLogger.prototype.setHostOsVersion = function(hostOsVersion) { - this.hostOsVersion_ = hostOsVersion; +remoting.SessionLogger.prototype.setHost = function(host) { + this.hostOs_ = host.hostOs; + this.hostOsVersion_ = host.hostOsVersion; + this.hostVersion_ = host.hostVersion; + + if (host.updatedTime != '') { + this.hostLastHeartbeatElapsedTime_ = + (Date.now() - new Date(host.updatedTime)); + } }; /** @@ -333,6 +331,9 @@ remoting.SessionLogger.prototype.fillEvent_ = function(entry) { if (this.hostStatusUpdateElapsedTime_ != undefined) { entry.host_status_update_elapsed_time = this.hostStatusUpdateElapsedTime_; } + if (this.hostLastHeartbeatElapsedTime_ != undefined) { + entry.host_last_heartbeat_elapsed_time = this.hostLastHeartbeatElapsedTime_; + } if (this.authMethod_ != undefined) { entry.auth_method = this.authMethod_; } diff --git a/remoting/webapp/base/js/session_logger_unittest.js b/remoting/webapp/base/js/session_logger_unittest.js index 78f7e45..9e23cf2 100644 --- a/remoting/webapp/base/js/session_logger_unittest.js +++ b/remoting/webapp/base/js/session_logger_unittest.js @@ -18,6 +18,9 @@ var logWriterSpy = null; /** @type {sinon.TestStub} */ var userAgentStub; +/** @type {remoting.Host} */ +var fakeHost; + QUnit.module('SessionLogger', { beforeEach: function() { userAgentStub = sinon.stub(remoting, 'getUserAgent'); @@ -28,6 +31,11 @@ QUnit.module('SessionLogger', { var spy = sinon.spy(); logWriterSpy = /** @type {sinon.Spy} */ (spy); logWriter = /** @type {function(Object)} */ (spy); + fakeHost = new remoting.Host('host_id'); + fakeHost.hostVersion = 'host_version'; + fakeHost.hostOs = remoting.ChromotingEvent.Os.OTHER; + fakeHost.hostOsVersion = 'host_os_version'; + fakeHost.updatedTime = '2015-12-31T01:23:00'; }, afterEach: function() { userAgentStub.restore(); @@ -75,14 +83,13 @@ QUnit.test('logSignalStrategyProgress()', function(assert) { }); QUnit.test('logSessionStateChange()', function(assert){ + var clock = sinon.useFakeTimers(new Date('2015-12-31T01:23:05').getTime()); var Event = remoting.ChromotingEvent; logger = new remoting.SessionLogger(Event.Role.CLIENT, logWriter); logger.setLogEntryMode(Event.Mode.ME2ME); logger.setConnectionType('stun'); - logger.setHostVersion('host_version'); - logger.setHostOs(remoting.ChromotingEvent.Os.OTHER); - logger.setHostOsVersion('host_os_version'); + logger.setHost(fakeHost); logger.logSessionStateChange( remoting.ChromotingEvent.SessionState.CONNECTION_FAILED, @@ -106,6 +113,7 @@ QUnit.test('logSessionStateChange()', function(assert){ host_version: 'host_version', host_os: remoting.ChromotingEvent.Os.OTHER, host_os_version: 'host_os_version', + host_last_heartbeat_elapsed_time: 5000, session_id: sessionId }); }); @@ -117,9 +125,7 @@ QUnit.test('logSessionStateChange() should handle XMPP error', logger = new remoting.SessionLogger(Event.Role.CLIENT, logWriter); logger.setLogEntryMode(Event.Mode.ME2ME); logger.setConnectionType('stun'); - logger.setHostVersion('host_version'); - logger.setHostOs(remoting.ChromotingEvent.Os.OTHER); - logger.setHostOsVersion('host_os_version'); + logger.setHost(fakeHost); logger.logSessionStateChange( remoting.ChromotingEvent.SessionState.CONNECTION_FAILED, @@ -152,16 +158,14 @@ QUnit.test('logSessionStateChange() should handle XMPP error', QUnit.test('logSessionStateChange() should handle sessionId change.', function(assert){ - var clock = sinon.useFakeTimers(); + var clock = sinon.useFakeTimers(new Date('2015-12-31T01:23:05').getTime()); var Event = remoting.ChromotingEvent; // Creates the logger. logger = new remoting.SessionLogger(Event.Role.CLIENT, logWriter); logger.setLogEntryMode(Event.Mode.ME2ME); logger.setConnectionType('relay'); - logger.setHostVersion('host_version'); - logger.setHostOs(remoting.ChromotingEvent.Os.OTHER); - logger.setHostOsVersion('host_os_version'); + logger.setHost(fakeHost); var oldSessionId = logger.getSessionId(); // Expires the session id. @@ -185,7 +189,8 @@ QUnit.test('logSessionStateChange() should handle sessionId change.', connection_type: Event.ConnectionType.RELAY, host_version: 'host_version', host_os: remoting.ChromotingEvent.Os.OTHER, - host_os_version: 'host_os_version' + host_os_version: 'host_os_version', + host_last_heartbeat_elapsed_time: 5000 }); verifyEvent(assert, 1, { @@ -201,7 +206,8 @@ QUnit.test('logSessionStateChange() should handle sessionId change.', connection_type: Event.ConnectionType.RELAY, host_version: 'host_version', host_os: remoting.ChromotingEvent.Os.OTHER, - host_os_version: 'host_os_version' + host_os_version: 'host_os_version', + host_last_heartbeat_elapsed_time: 5000 }); verifyEvent(assert, 2, { @@ -219,6 +225,7 @@ QUnit.test('logSessionStateChange() should handle sessionId change.', host_version: 'host_version', host_os: remoting.ChromotingEvent.Os.OTHER, host_os_version: 'host_os_version', + host_last_heartbeat_elapsed_time: 5000, session_id: newSessionId }); }); @@ -232,9 +239,7 @@ QUnit.test('logSessionStateChange() should log session_duration.', logger = new remoting.SessionLogger(Event.Role.CLIENT, logWriter); logger.setLogEntryMode(Event.Mode.ME2ME); logger.setConnectionType('direct'); - logger.setHostVersion('host_version'); - logger.setHostOs(remoting.ChromotingEvent.Os.OTHER); - logger.setHostOsVersion('host_os_version'); + logger.setHost(fakeHost); logger.setAuthTotalTime(1000); clock.tick(2500); @@ -270,9 +275,7 @@ QUnit.test('logStatistics()', function(assert) { logger = new remoting.SessionLogger(Event.Role.CLIENT, logWriter); logger.setLogEntryMode(Event.Mode.LGAPP); logger.setConnectionType('direct'); - logger.setHostVersion('host_version'); - logger.setHostOs(remoting.ChromotingEvent.Os.OTHER); - logger.setHostOsVersion('host_os_version'); + logger.setHost(fakeHost); // Log the statistics. logger.logStatistics({ diff --git a/remoting/webapp/base/js/telemetry_event_writer_unittest.js b/remoting/webapp/base/js/telemetry_event_writer_unittest.js index 0a17ae6..ad05602 100644 --- a/remoting/webapp/base/js/telemetry_event_writer_unittest.js +++ b/remoting/webapp/base/js/telemetry_event_writer_unittest.js @@ -38,10 +38,12 @@ QUnit.module('TelemetryEventWriter', { remoting.ChromotingEvent.Role.CLIENT, remoting.TelemetryEventWriter.Client.write); logger.setLogEntryMode(remoting.ChromotingEvent.Mode.ME2ME); + var fakeHost = new remoting.Host('fake_id'); + fakeHost.hostOs = remoting.ChromotingEvent.Os.OTHER; + fakeHost.hostOsVersion = 'host_os_version'; + fakeHost.hostVersion = 'host_version'; + logger.setHost(fakeHost); logger.setConnectionType('stun'); - logger.setHostVersion('host_version'); - logger.setHostOs(remoting.ChromotingEvent.Os.OTHER); - logger.setHostOsVersion('host_os_version'); }, afterEach: function() { base.dispose(service); diff --git a/remoting/webapp/crd/js/host_screen.js b/remoting/webapp/crd/js/host_screen.js index 0f2025a..c4f2ac1 100644 --- a/remoting/webapp/crd/js/host_screen.js +++ b/remoting/webapp/crd/js/host_screen.js @@ -71,11 +71,34 @@ remoting.tryShare = function() { }; /** + * Returns the info of the local It2Me host. + * + * @param {remoting.It2MeHostFacade} hostFacade + * @return {remoting.Host} + */ +function getHostInfo(hostFacade) { + var hostInfo = new remoting.Host('it2me'); + var systemInfo = remoting.getSystemInfo(); + hostInfo.hostVersion = hostFacade.getHostVersion(); + hostInfo.hostOsVersion = systemInfo.osVersion; + if (systemInfo.osName === remoting.Os.WINDOWS) { + hostInfo.hostOs = remoting.ChromotingEvent.Os.WINDOWS; + } else if (systemInfo.osName === remoting.Os.LINUX) { + hostInfo.hostOs = remoting.ChromotingEvent.Os.LINUX; + } else if (systemInfo.osName === remoting.Os.MAC) { + hostInfo.hostOs = remoting.ChromotingEvent.Os.MAC; + } else if (systemInfo.osName === remoting.Os.CHROMEOS) { + hostInfo.hostOs = remoting.ChromotingEvent.Os.CHROMEOS; + } + return hostInfo; +} + +/** * @param {remoting.It2MeHostFacade} hostFacade An initialized It2MeHostFacade. */ remoting.startHostUsingFacade_ = function(hostFacade) { console.log('Attempting to share...'); - it2meLogger.setHostVersion(hostFacade.getHostVersion()); + it2meLogger.setHost(getHostInfo(hostFacade)); remoting.identity.getToken().then( remoting.tryShareWithToken_.bind(null, hostFacade), remoting.Error.handler(showShareError_)); diff --git a/remoting/webapp/crd/js/me2me_activity.js b/remoting/webapp/crd/js/me2me_activity.js index a1b5b71..d2bcbdc 100644 --- a/remoting/webapp/crd/js/me2me_activity.js +++ b/remoting/webapp/crd/js/me2me_activity.js @@ -98,9 +98,7 @@ remoting.Me2MeActivity.prototype.createLogger_ = function(entryPoint) { var Mode = remoting.ChromotingEvent.Mode; var logger = remoting.SessionLogger.createForClient(); logger.setEntryPoint(entryPoint); - logger.setHostVersion(this.host_.hostVersion); - logger.setHostOs(this.host_.hostOs); - logger.setHostOsVersion(this.host_.hostOsVersion); + logger.setHost(this.host_); logger.setLogEntryMode(Mode.ME2ME); logger.setHostStatusUpdateElapsedTime( this.hostList_.getHostStatusUpdateElapsedTime()); |