mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
[perf] lookup system messages from the project-list route only
The messages are displayed above the project list only. There is no need to query the system messages from ALL the other routes. Note: the admin view uses the same variable, but injects an uncached value into the template. Additional context at https://github.com/overleaf/web/pull/699 Signed-off-by: Jakob Ackermann <das7pad@outlook.com>
This commit is contained in:
parent
4ed005b855
commit
b17f29e695
5 changed files with 29 additions and 15 deletions
|
@ -35,6 +35,7 @@ const Features = require('../../infrastructure/Features')
|
||||||
const BrandVariationsHandler = require('../BrandVariations/BrandVariationsHandler')
|
const BrandVariationsHandler = require('../BrandVariations/BrandVariationsHandler')
|
||||||
const { getUserAffiliations } = require('../Institutions/InstitutionsAPI')
|
const { getUserAffiliations } = require('../Institutions/InstitutionsAPI')
|
||||||
const V1Handler = require('../V1/V1Handler')
|
const V1Handler = require('../V1/V1Handler')
|
||||||
|
const SystemMessageManager = require('../SystemMessages/SystemMessageManager')
|
||||||
|
|
||||||
const ProjectController = {
|
const ProjectController = {
|
||||||
_isInPercentageRollout(rolloutName, objectId, percentage) {
|
_isInPercentageRollout(rolloutName, objectId, percentage) {
|
||||||
|
@ -346,6 +347,9 @@ const ProjectController = {
|
||||||
let noV1Connection = false
|
let noV1Connection = false
|
||||||
async.parallel(
|
async.parallel(
|
||||||
{
|
{
|
||||||
|
systemMessages(cb) {
|
||||||
|
SystemMessageManager.getMessages(cb)
|
||||||
|
},
|
||||||
tags(cb) {
|
tags(cb) {
|
||||||
TagsHandler.getAllTags(userId, cb)
|
TagsHandler.getAllTags(userId, cb)
|
||||||
},
|
},
|
||||||
|
@ -537,6 +541,7 @@ const ProjectController = {
|
||||||
const viewModel = {
|
const viewModel = {
|
||||||
title: 'your_projects',
|
title: 'your_projects',
|
||||||
priority_title: true,
|
priority_title: true,
|
||||||
|
systemMessages: results.systemMessages,
|
||||||
projects,
|
projects,
|
||||||
tags,
|
tags,
|
||||||
notifications: notifications || [],
|
notifications: notifications || [],
|
||||||
|
|
|
@ -12,7 +12,6 @@ const IS_DEV_ENV = ['development', 'test'].includes(process.env.NODE_ENV)
|
||||||
const Features = require('./Features')
|
const Features = require('./Features')
|
||||||
const AuthenticationController = require('../Features/Authentication/AuthenticationController')
|
const AuthenticationController = require('../Features/Authentication/AuthenticationController')
|
||||||
const PackageVersions = require('./PackageVersions')
|
const PackageVersions = require('./PackageVersions')
|
||||||
const SystemMessageManager = require('../Features/SystemMessages/SystemMessageManager')
|
|
||||||
const Modules = require('./Modules')
|
const Modules = require('./Modules')
|
||||||
|
|
||||||
const htmlEncoder = new NodeHtmlEncoder('numerical')
|
const htmlEncoder = new NodeHtmlEncoder('numerical')
|
||||||
|
@ -306,19 +305,6 @@ module.exports = function(webRouter, privateApiRouter, publicApiRouter) {
|
||||||
next()
|
next()
|
||||||
})
|
})
|
||||||
|
|
||||||
webRouter.use((req, res, next) =>
|
|
||||||
SystemMessageManager.getMessages(function(error, messages) {
|
|
||||||
if (error) {
|
|
||||||
return next(error)
|
|
||||||
}
|
|
||||||
if (messages == null) {
|
|
||||||
messages = []
|
|
||||||
}
|
|
||||||
res.locals.systemMessages = messages
|
|
||||||
next()
|
|
||||||
})
|
|
||||||
)
|
|
||||||
|
|
||||||
webRouter.use(function(req, res, next) {
|
webRouter.use(function(req, res, next) {
|
||||||
if (Settings.reloadModuleViewsOnEachRequest) {
|
if (Settings.reloadModuleViewsOnEachRequest) {
|
||||||
Modules.loadViewIncludes()
|
Modules.loadViewIncludes()
|
||||||
|
|
|
@ -66,7 +66,6 @@ html(
|
||||||
siteUrl: '#{settings.siteUrl}',
|
siteUrl: '#{settings.siteUrl}',
|
||||||
wsUrl: '#{settings.wsUrl}',
|
wsUrl: '#{settings.wsUrl}',
|
||||||
};
|
};
|
||||||
window.systemMessages = !{StringHelper.stringifyJsonForScript(systemMessages)};
|
|
||||||
window.ab = {};
|
window.ab = {};
|
||||||
window.user_id = '#{getLoggedInUserId()}';
|
window.user_id = '#{getLoggedInUserId()}';
|
||||||
window.ExposedSettings = JSON.parse('!{StringHelper.stringifyJsonForScript(ExposedSettings)}');
|
window.ExposedSettings = JSON.parse('!{StringHelper.stringifyJsonForScript(ExposedSettings)}');
|
||||||
|
|
|
@ -61,6 +61,9 @@ block content
|
||||||
role="main"
|
role="main"
|
||||||
)
|
)
|
||||||
- if(typeof(suppressSystemMessages) == "undefined")
|
- if(typeof(suppressSystemMessages) == "undefined")
|
||||||
|
script.
|
||||||
|
window.systemMessages = !{StringHelper.stringifyJsonForScript(systemMessages)};
|
||||||
|
|
||||||
.system-messages(
|
.system-messages(
|
||||||
ng-cloak
|
ng-cloak
|
||||||
ng-controller="SystemMessagesController"
|
ng-controller="SystemMessagesController"
|
||||||
|
|
|
@ -131,6 +131,10 @@ describe('ProjectController', function() {
|
||||||
}
|
}
|
||||||
])
|
])
|
||||||
|
|
||||||
|
this.SystemMessageManager = {
|
||||||
|
getMessages: sinon.stub().callsArgWith(0, null, [])
|
||||||
|
}
|
||||||
|
|
||||||
this.ProjectController = SandboxedModule.require(MODULE_PATH, {
|
this.ProjectController = SandboxedModule.require(MODULE_PATH, {
|
||||||
globals: {
|
globals: {
|
||||||
console: console
|
console: console
|
||||||
|
@ -148,6 +152,7 @@ describe('ProjectController', function() {
|
||||||
inc() {}
|
inc() {}
|
||||||
},
|
},
|
||||||
'@overleaf/o-error/http': HttpErrors,
|
'@overleaf/o-error/http': HttpErrors,
|
||||||
|
'../SystemMessages/SystemMessageManager': this.SystemMessageManager,
|
||||||
'./ProjectDeleter': this.ProjectDeleter,
|
'./ProjectDeleter': this.ProjectDeleter,
|
||||||
'./ProjectDuplicator': this.ProjectDuplicator,
|
'./ProjectDuplicator': this.ProjectDuplicator,
|
||||||
'./ProjectCreationHandler': this.ProjectCreationHandler,
|
'./ProjectCreationHandler': this.ProjectCreationHandler,
|
||||||
|
@ -385,6 +390,14 @@ describe('ProjectController', function() {
|
||||||
|
|
||||||
describe('projectListPage', function() {
|
describe('projectListPage', function() {
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
|
this.systemMessages = [
|
||||||
|
{ _id: '42', content: 'Hello from the other side!' },
|
||||||
|
{ _id: '1337', content: 'Can you read this?' }
|
||||||
|
]
|
||||||
|
this.SystemMessageManager.getMessages = sinon
|
||||||
|
.stub()
|
||||||
|
.callsArgWith(0, null, this.systemMessages)
|
||||||
|
|
||||||
this.tags = [
|
this.tags = [
|
||||||
{ name: 1, project_ids: ['1', '2', '3'] },
|
{ name: 1, project_ids: ['1', '2', '3'] },
|
||||||
{ name: 2, project_ids: ['a', '1'] },
|
{ name: 2, project_ids: ['a', '1'] },
|
||||||
|
@ -456,6 +469,14 @@ describe('ProjectController', function() {
|
||||||
this.ProjectController.projectListPage(this.req, this.res)
|
this.ProjectController.projectListPage(this.req, this.res)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should send the systemMessages', function(done) {
|
||||||
|
this.res.render = (pageName, opts) => {
|
||||||
|
opts.systemMessages.should.deep.equal(this.systemMessages)
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
this.ProjectController.projectListPage(this.req, this.res)
|
||||||
|
})
|
||||||
|
|
||||||
it('should create trigger ip matcher notifications', function(done) {
|
it('should create trigger ip matcher notifications', function(done) {
|
||||||
this.settings.overleaf = true
|
this.settings.overleaf = true
|
||||||
this.res.render = (pageName, opts) => {
|
this.res.render = (pageName, opts) => {
|
||||||
|
|
Loading…
Reference in a new issue