diff --git a/services/clsi/app/js/ProjectPersistenceManager.js b/services/clsi/app/js/ProjectPersistenceManager.js index 66c6be5108..10fa70e3c3 100644 --- a/services/clsi/app/js/ProjectPersistenceManager.js +++ b/services/clsi/app/js/ProjectPersistenceManager.js @@ -13,6 +13,7 @@ const CompileManager = require('./CompileManager') const async = require('async') const logger = require('@overleaf/logger') const oneDay = 24 * 60 * 60 * 1000 +const Metrics = require('@overleaf/metrics') const Settings = require('@overleaf/settings') const diskusage = require('diskusage') const { callbackify } = require('node:util') @@ -31,7 +32,11 @@ async function refreshExpiryTimeout() { for (const path of paths) { try { const stats = await diskusage.check(path) - const lowDisk = stats.available / stats.total < 0.1 + const diskAvailablePercent = (stats.available / stats.total) * 100 + Metrics.gauge('disk_available_percent', diskAvailablePercent, 1, { + path, + }) + const lowDisk = diskAvailablePercent < 10 const lowerExpiry = ProjectPersistenceManager.EXPIRY_TIMEOUT * 0.9 if (lowDisk && Settings.project_cache_length_ms / 2 < lowerExpiry) { diff --git a/services/clsi/test/unit/js/ProjectPersistenceManagerTests.js b/services/clsi/test/unit/js/ProjectPersistenceManagerTests.js index b36b9245e4..2504d266ca 100644 --- a/services/clsi/test/unit/js/ProjectPersistenceManagerTests.js +++ b/services/clsi/test/unit/js/ProjectPersistenceManagerTests.js @@ -23,6 +23,7 @@ describe('ProjectPersistenceManager', function () { beforeEach(function () { this.ProjectPersistenceManager = SandboxedModule.require(modulePath, { requires: { + '@overleaf/metrics': (this.Metrics = { gauge: sinon.stub() }), './UrlCache': (this.UrlCache = {}), './CompileManager': (this.CompileManager = {}), diskusage: (this.diskusage = { check: sinon.stub() }), @@ -49,6 +50,10 @@ describe('ProjectPersistenceManager', function () { }) this.ProjectPersistenceManager.refreshExpiryTimeout(() => { + this.Metrics.gauge.should.have.been.calledWith( + 'disk_available_percent', + 40 + ) this.ProjectPersistenceManager.EXPIRY_TIMEOUT.should.equal( this.settings.project_cache_length_ms ) @@ -63,6 +68,10 @@ describe('ProjectPersistenceManager', function () { }) this.ProjectPersistenceManager.refreshExpiryTimeout(() => { + this.Metrics.gauge.should.have.been.calledWith( + 'disk_available_percent', + 5 + ) this.ProjectPersistenceManager.EXPIRY_TIMEOUT.should.equal(900) done() }) @@ -75,6 +84,10 @@ describe('ProjectPersistenceManager', function () { }) this.ProjectPersistenceManager.EXPIRY_TIMEOUT = 500 this.ProjectPersistenceManager.refreshExpiryTimeout(() => { + this.Metrics.gauge.should.have.been.calledWith( + 'disk_available_percent', + 5 + ) this.ProjectPersistenceManager.EXPIRY_TIMEOUT.should.equal(500) done() })