summaryrefslogtreecommitdiffstats
path: root/remoting
diff options
context:
space:
mode:
authorkelvinp <kelvinp@chromium.org>2016-01-14 13:03:39 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-14 22:03:04 +0000
commitb955d57a3e2ebe18885e8fde2de699e12adb09d5 (patch)
tree5ae164f6b03b8399fd80f7d917bf25085d8bf9d8 /remoting
parent0a0f23505ad40946651827740fbc09bf06bddf3b (diff)
downloadchromium_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.js11
-rw-r--r--remoting/webapp/base/js/session_logger.js43
-rw-r--r--remoting/webapp/base/js/session_logger_unittest.js39
-rw-r--r--remoting/webapp/base/js/telemetry_event_writer_unittest.js8
-rw-r--r--remoting/webapp/crd/js/host_screen.js25
-rw-r--r--remoting/webapp/crd/js/me2me_activity.js4
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());