Comment how we should consume logs
This commit is contained in:
parent
5828ab1077
commit
811086ac8e
|
@ -23,7 +23,9 @@ limitations under the License.
|
||||||
// local storage, which does work in incognito mode. We also need to handle the case where there are 2+ tabs. Each JS runtime
|
// local storage, which does work in incognito mode. We also need to handle the case where there are 2+ tabs. Each JS runtime
|
||||||
// generates a random string which serves as the "ID" for that tab/session. These IDs are stored along with the log lines.
|
// generates a random string which serves as the "ID" for that tab/session. These IDs are stored along with the log lines.
|
||||||
// - Bug reports are sent as a POST over HTTPS: it purposefully does not use Matrix as bug reports may be made when Matrix is
|
// - Bug reports are sent as a POST over HTTPS: it purposefully does not use Matrix as bug reports may be made when Matrix is
|
||||||
// not responsive (which may be the cause of the bug).
|
// not responsive (which may be the cause of the bug). We send the most recent N MB of UTF-8 log data, starting with the most
|
||||||
|
// recent, which we know because the "ID"s are actually timestamps. We then purge the remaining logs. We also do this check
|
||||||
|
// on startup to prevent logs from accumulating.
|
||||||
|
|
||||||
const FLUSH_RATE_MS = 30 * 1000;
|
const FLUSH_RATE_MS = 30 * 1000;
|
||||||
|
|
||||||
|
@ -143,6 +145,39 @@ class IndexedDBLogStore {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Consume the most recent logs and return them. Older logs which are not returned are deleted at the same time,
|
||||||
|
* so this can be called at startup to do house-keeping to keep the logs from growing too large.
|
||||||
|
*
|
||||||
|
* @param {boolean} clearAll True to clear the most recent logs returned in addition to the
|
||||||
|
* older logs. This is desirable when sending bug reports as we do not want to submit the
|
||||||
|
* same logs twice. This is not desirable when doing house-keeping at startup in case they
|
||||||
|
* want to submit a bug report later.
|
||||||
|
* @return {Promise<Object[]>} Resolves to an array of objects. The array is sorted in time (oldest first) based on
|
||||||
|
* when the log file was created (the log ID). The objects have said log ID in an "id" field and "lines" which is a
|
||||||
|
* big string with all the new-line delimited logs.
|
||||||
|
*/
|
||||||
|
consume(clearAll) {
|
||||||
|
const MAX_LOG_SIZE = 1024 * 1024 * 50; // 50 MB
|
||||||
|
// To gather all the logs, we first query for every log entry with index "0", this will let us
|
||||||
|
// know all the IDs from different tabs/sessions.
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
// let txn = this.db.transaction("logs", "readonly");
|
||||||
|
// let objectStore = txn.objectStore("logs");
|
||||||
|
|
||||||
|
// we know each entry has a unique ID, and we know IDs are timestamps, so accumulate all the IDs,
|
||||||
|
// ignoring the logs for now, and sort them to work out the correct log ID ordering.
|
||||||
|
|
||||||
|
// Starting with the most recent ID, fetch the logs (all indices) for said ID and accumulate them
|
||||||
|
// in order. After fetching ALL the logs for an ID, recheck the total length of the logs to work out
|
||||||
|
// if we have exceeded the max size cutoff for "recent" logs.
|
||||||
|
|
||||||
|
// Remove all logs that are older than the cutoff (or the entire logs if clearAll is set).
|
||||||
|
|
||||||
|
// Return the logs that are within the cutoff.
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
_generateLogEntry(lines) {
|
_generateLogEntry(lines) {
|
||||||
return {
|
return {
|
||||||
id: this.id,
|
id: this.id,
|
||||||
|
@ -187,9 +222,8 @@ module.exports = {
|
||||||
* @return {Promise} Resolved when the bug report is sent.
|
* @return {Promise} Resolved when the bug report is sent.
|
||||||
*/
|
*/
|
||||||
sendBugReport: function(userText) {
|
sendBugReport: function(userText) {
|
||||||
// To gather all the logs, we first query for every log entry with index "0", this will let us
|
return store.consume(true).then((data) => {
|
||||||
// know all the IDs from different tabs/sessions.
|
// Send logs grouped by ID
|
||||||
|
});
|
||||||
// Send logs grouped by ID
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue