Chromium Code Reviews| Index: remoting/webapp/me2mom/log_to_server.js |
| diff --git a/remoting/webapp/me2mom/log_to_server.js b/remoting/webapp/me2mom/log_to_server.js |
| index 017bc1afe21c0ce4816f1a8d4fcb05803e871f53..349b77a43d5c75042c6d995c4ea1ef6e54ff8c35 100644 |
| --- a/remoting/webapp/me2mom/log_to_server.js |
| +++ b/remoting/webapp/me2mom/log_to_server.js |
| @@ -16,7 +16,10 @@ var remoting = remoting || {}; |
| * @constructor |
| */ |
| remoting.LogToServer = function() { |
| - /** @type Array.<string> */ this.pendingEntries = []; |
| + /** @type Array.<string> */ |
| + this.pendingEntries = []; |
| + /** @type {remoting.StatsAccumulator} */ |
| + this.statsAccumulator = new remoting.StatsAccumulator(); |
| }; |
| // Local storage keys. |
| @@ -56,6 +59,44 @@ remoting.LogToServer.prototype.logClientSessionStateChange = |
| entry.addWebappVersionField(); |
| entry.addIdField(this.getId()); |
| this.log(entry); |
| + // Don't accumulate connection statistics across state changes. |
| + this.logAccumulatedStatistics(); |
| + this.statsAccumulator.empty(); |
| +}; |
| + |
| +/** |
| + * Logs connection statistics. |
| + * @param {Object.<string, number>} stats the connection statistics |
| + */ |
| +remoting.LogToServer.prototype.logStatistics = function(stats) { |
| + // Store the statistics. |
| + this.statsAccumulator.add(stats); |
| + // Send statistics to the server if they've been accumulating for at least |
| + // 60 seconds. |
| + if (this.statsAccumulator.getTimeSinceFirstValue() >= 60 * 1000) { |
| + this.logAccumulatedStatistics(); |
| + } |
| +}; |
| + |
| +/** |
| + * Moves connection statistics from the accumulator to the log server. |
| + * |
| + * If all the statistics are zero, then the accumulator is still emptied, |
| + * but the statistics are not sent to the log server. |
| + * |
| + * @private |
| + */ |
| +remoting.LogToServer.prototype.logAccumulatedStatistics = function() { |
| + var entry = remoting.ServerLogEntry.prototype.makeStats( |
| + this.statsAccumulator); |
|
Jamie
2011/12/09 19:47:56
Directly invoking a method on the prototype seems
simonmorris
2011/12/09 21:12:12
This was just because I didn't have the convention
|
| + if (entry) { |
| + entry.addHostFields(); |
| + entry.addChromeVersionField(); |
| + entry.addWebappVersionField(); |
| + entry.addIdField(this.getId()); |
| + this.log(entry); |
| + } |
| + this.statsAccumulator.empty(); |
| }; |
| /** |
| @@ -68,20 +109,25 @@ remoting.LogToServer.prototype.log = function(entry) { |
| if (!this.isEnabled()) { |
| return; |
| } |
| - // Store a stanza for the entry |
| + // Send the stanza to the debug log. |
| + remoting.debug.logIndent(0, 'Enqueueing log entry:'); |
| + entry.toDebugLog(1); |
| + // Store a stanza for the entry. |
| this.pendingEntries.push(entry.toStanza()); |
| // Stop if there's no connection to the server. |
| if (!remoting.wcs) { |
| return; |
| } |
| // Send all pending entries to the server. |
| + remoting.debug.log('Sending ' + this.pendingEntries.length + ' log ' + |
| + ((this.pendingEntries.length == 1) ? 'entry' : 'entries') + |
| + ' to the server.'); |
| var stanza = '<cli:iq to="remoting@bot.talk.google.com" type="set" ' + |
| 'xmlns:cli="jabber:client"><gr:log xmlns:gr="google:remoting">'; |
| while (this.pendingEntries.length > 0) { |
| stanza += /** @type string */ this.pendingEntries.shift(); |
| } |
| stanza += '</gr:log></cli:iq>'; |
| - remoting.debug.logIq(true, stanza); |
| remoting.wcs.sendIq(stanza); |
| }; |
| @@ -132,3 +178,14 @@ remoting.LogToServer.prototype.generateId = function() { |
| } |
| return idArray.join(''); |
| }; |
| + |
| +/** |
| + * Sends a message describing a log entry to the debug log. |
| + * |
| + * @private |
| + * @param {remoting.ServerLogEntry} entry |
| + */ |
| +remoting.LogToServer.prototype.logToConsole = function(entry) { |
| + remoting.debug.logIndent(0, 'Queueing log entry:'); |
| + entry.toDebugLog(1) |
| +}; |
|
Jamie
2011/12/09 19:47:56
This function looks like it's unused.
simonmorris
2011/12/09 21:12:12
Done.
|