mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-21 09:52:06 +03:00
42e11ca859
refs https://github.com/TryGhost/Team/issues/754 - The logging wasn't working for the update check when run from the scheduled job. Fixed package method signature to allow for "logging" parameter. The sideeffect of this change was such that we need to instantiate a new instance of the UpdateCheckService on every method call to differentiate the call from within the code (controller) or from the job level - Also added an await before returning the check method call as it didn't execute properly on the job level - the `await` wasn't waiting for the update check to actually do it's job!
79 lines
2.6 KiB
JavaScript
79 lines
2.6 KiB
JavaScript
const _ = require('lodash');
|
|
|
|
const api = require('./api').v2;
|
|
const GhostMailer = require('./services/mail').GhostMailer;
|
|
const config = require('../shared/config');
|
|
const urlUtils = require('./../shared/url-utils');
|
|
const jobsService = require('./services/jobs');
|
|
|
|
const i18n = require('../shared/i18n');
|
|
const request = require('@tryghost/request');
|
|
const ghostVersion = require('@tryghost/version');
|
|
const UpdateCheckService = require('@tryghost/update-check-service');
|
|
|
|
const ghostMailer = new GhostMailer();
|
|
|
|
/**
|
|
*
|
|
* @param {Object} options
|
|
* @param {Object} [options.logging] - logging object instance or defaults to Ghost's default logger otherwise
|
|
*
|
|
* @returns {Promise<any>}
|
|
*/
|
|
module.exports = async ({logging = require('@tryghost/logging')} = {}) => {
|
|
const allowedCheckEnvironments = ['development', 'production'];
|
|
|
|
// CASE: The check will not happen if your NODE_ENV is not in the allowed defined environments.
|
|
if (_.indexOf(allowedCheckEnvironments, process.env.NODE_ENV) === -1) {
|
|
return;
|
|
}
|
|
|
|
const updateChecker = new UpdateCheckService({
|
|
api: {
|
|
settings: {
|
|
read: api.settings.read,
|
|
edit: api.settings.edit
|
|
},
|
|
posts: {
|
|
browse: api.posts.browse
|
|
},
|
|
users: {
|
|
browse: api.users.browse
|
|
},
|
|
notifications: {
|
|
add: api.notifications.add
|
|
}
|
|
},
|
|
config: {
|
|
mail: config.get('mail'),
|
|
env: config.get('env'),
|
|
databaseType: config.get('database').client,
|
|
checkEndpoint: config.get('updateCheck:url'),
|
|
isPrivacyDisabled: config.isPrivacyDisabled('useUpdateCheck'),
|
|
notificationGroups: config.get('notificationGroups'),
|
|
siteUrl: urlUtils.urlFor('home', true),
|
|
forceUpdate: config.get('updateCheck:forceUpdate'),
|
|
ghostVersion: ghostVersion.original
|
|
},
|
|
i18n,
|
|
logging,
|
|
request,
|
|
sendEmail: ghostMailer.send
|
|
});
|
|
|
|
await updateChecker.check();
|
|
};
|
|
|
|
module.exports.scheduleRecurringJobs = () => {
|
|
// use a random seconds/minutes/hours value to avoid spikes to the update service API
|
|
const s = Math.floor(Math.random() * 60); // 0-59
|
|
const m = Math.floor(Math.random() * 60); // 0-59
|
|
const h = Math.floor(Math.random() * 24); // 0-23
|
|
|
|
jobsService.addJob({
|
|
at: `${s} ${m} ${h} * * *`, // Every day
|
|
job: require('path').resolve(__dirname, 'run-update-check.js'),
|
|
name: 'update-check'
|
|
});
|
|
};
|