From d40065fd8eb7ead39ae351611ec7fb866b1129d6 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Mon, 14 Jun 2021 12:24:48 +0100 Subject: [PATCH 1/3] [misc] track delay of using sqlite for last access time of a project --- services/clsi/app/js/ProjectPersistenceManager.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/clsi/app/js/ProjectPersistenceManager.js b/services/clsi/app/js/ProjectPersistenceManager.js index d0fd4c2439..f5d32caaca 100644 --- a/services/clsi/app/js/ProjectPersistenceManager.js +++ b/services/clsi/app/js/ProjectPersistenceManager.js @@ -21,6 +21,7 @@ const logger = require('logger-sharelatex') const oneDay = 24 * 60 * 60 * 1000 const Settings = require('settings-sharelatex') const diskusage = require('diskusage') +const Metrics = require('./Metrics') module.exports = ProjectPersistenceManager = { EXPIRY_TIMEOUT: Settings.project_cache_length_ms || oneDay * 2.5, @@ -53,6 +54,7 @@ module.exports = ProjectPersistenceManager = { if (callback == null) { callback = function (error) {} } + const timer = new Metrics.Timer('db-bump-last-accessed') const job = (cb) => db.Project.findOrCreate({ where: { project_id } }) .spread((project, created) => @@ -62,7 +64,10 @@ module.exports = ProjectPersistenceManager = { .error(cb) ) .error(cb) - return dbQueue.queue.push(job, callback) + dbQueue.queue.push(job, (error) => { + timer.done() + callback(error) + }) }, clearExpiredProjects(callback) { From 8f1ea7f0d1f5cdb6ae7e071671389f88e8d9d520 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Mon, 14 Jun 2021 13:03:02 +0100 Subject: [PATCH 2/3] [misc] track delays of using sqlite for url caching details --- services/clsi/app/js/UrlCache.js | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/services/clsi/app/js/UrlCache.js b/services/clsi/app/js/UrlCache.js index 23afafaaa8..a8b2b19bea 100644 --- a/services/clsi/app/js/UrlCache.js +++ b/services/clsi/app/js/UrlCache.js @@ -21,6 +21,7 @@ const crypto = require('crypto') const fs = require('fs') const logger = require('logger-sharelatex') const async = require('async') +const Metrics = require('./Metrics') module.exports = UrlCache = { downloadUrlToFile(project_id, url, destPath, lastModified, callback) { @@ -206,17 +207,22 @@ module.exports = UrlCache = { if (callback == null) { callback = function (error, urlDetails) {} } + const timer = new Metrics.Timer('db-find-url-details') const job = (cb) => db.UrlCache.findOne({ where: { url, project_id } }) .then((urlDetails) => cb(null, urlDetails)) .error(cb) - return dbQueue.queue.push(job, callback) + dbQueue.queue.push(job, (error, urlDetails) => { + timer.done() + callback(error, urlDetails) + }) }, _updateOrCreateUrlDetails(project_id, url, lastModified, callback) { if (callback == null) { callback = function (error) {} } + const timer = new Metrics.Timer('db-update-or-create-url-details') const job = (cb) => db.UrlCache.findOrCreate({ where: { url, project_id } }) .spread((urlDetails, created) => @@ -226,24 +232,32 @@ module.exports = UrlCache = { .error(cb) ) .error(cb) - return dbQueue.queue.push(job, callback) + dbQueue.queue.push(job, (error) => { + timer.done() + callback(error) + }) }, _clearUrlDetails(project_id, url, callback) { if (callback == null) { callback = function (error) {} } + const timer = new Metrics.Timer('db-clear-url-details') const job = (cb) => db.UrlCache.destroy({ where: { url, project_id } }) .then(() => cb(null)) .error(cb) - return dbQueue.queue.push(job, callback) + dbQueue.queue.push(job, (error) => { + timer.done() + callback(error) + }) }, _findAllUrlsInProject(project_id, callback) { if (callback == null) { callback = function (error, urls) {} } + const timer = new Metrics.Timer('db-find-urls-in-project') const job = (cb) => db.UrlCache.findAll({ where: { project_id } }) .then((urlEntries) => @@ -253,6 +267,9 @@ module.exports = UrlCache = { ) ) .error(cb) - return dbQueue.queue.push(job, callback) + dbQueue.queue.push(job, (err, urls) => { + timer.done() + callback(err, urls) + }) } } From 8cc4517d4c3151778a23081e15143570a7e113f4 Mon Sep 17 00:00:00 2001 From: Jakob Ackermann Date: Tue, 15 Jun 2021 09:08:32 +0100 Subject: [PATCH 3/3] [misc] move import to avoid git conflict --- services/clsi/app/js/ProjectPersistenceManager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/clsi/app/js/ProjectPersistenceManager.js b/services/clsi/app/js/ProjectPersistenceManager.js index f5d32caaca..d0e3af3a67 100644 --- a/services/clsi/app/js/ProjectPersistenceManager.js +++ b/services/clsi/app/js/ProjectPersistenceManager.js @@ -12,6 +12,7 @@ * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ let ProjectPersistenceManager +const Metrics = require('./Metrics') const UrlCache = require('./UrlCache') const CompileManager = require('./CompileManager') const db = require('./db') @@ -21,7 +22,6 @@ const logger = require('logger-sharelatex') const oneDay = 24 * 60 * 60 * 1000 const Settings = require('settings-sharelatex') const diskusage = require('diskusage') -const Metrics = require('./Metrics') module.exports = ProjectPersistenceManager = { EXPIRY_TIMEOUT: Settings.project_cache_length_ms || oneDay * 2.5,