diff --git a/src/appstore.js b/src/appstore.js index f3b901e68..0a2a3837d 100644 --- a/src/appstore.js +++ b/src/appstore.js @@ -19,8 +19,6 @@ exports = module.exports = { getSubscription: getSubscription, isFreePlan: isFreePlan, - sendAliveStatus: sendAliveStatus, - getAppUpdate: getAppUpdate, getBoxUpdate: getBoxUpdate, @@ -33,21 +31,14 @@ var apps = require('./apps.js'), BoxError = require('./boxerror.js'), constants = require('./constants.js'), debug = require('debug')('box:appstore'), - domains = require('./domains.js'), eventlog = require('./eventlog.js'), - groups = require('./groups.js'), - mail = require('./mail.js'), - os = require('os'), paths = require('./paths.js'), safe = require('safetydance'), semver = require('semver'), settings = require('./settings.js'), superagent = require('superagent'), - users = require('./users.js'), util = require('util'); -const NOOP_CALLBACK = function (error) { if (error) debug(error); }; - // These are the default options and will be adjusted once a subscription state is obtained // Keep in sync with appstore/routes/cloudrons.js let gFeatures = { @@ -232,110 +223,6 @@ function unpurchaseApp(appId, data, callback) { }); } -function sendAliveStatus(callback) { - callback = callback || NOOP_CALLBACK; - - let allSettings, allDomains, mailDomains, loginEvents, userCount, groupCount; - - async.series([ - function (callback) { - settings.getAll(function (error, result) { - if (error) return callback(error); - allSettings = result; - callback(); - }); - }, - function (callback) { - domains.getAll(function (error, result) { - if (error) return callback(error); - allDomains = result; - callback(); - }); - }, - function (callback) { - mail.getDomains(function (error, result) { - if (error) return callback(error); - mailDomains = result; - callback(); - }); - }, - function (callback) { - eventlog.getAllPaged([ eventlog.ACTION_USER_LOGIN ], null, 1, 1, function (error, result) { - if (error) return callback(error); - loginEvents = result; - callback(); - }); - }, - function (callback) { - users.count(function (error, result) { - if (error) return callback(error); - userCount = result; - callback(); - }); - }, - function (callback) { - groups.count(function (error, result) { - if (error) return callback(error); - groupCount = result; - callback(); - }); - } - ], function (error) { - if (error) return callback(error); - - var backendSettings = { - backupConfig: { - provider: allSettings[settings.BACKUP_CONFIG_KEY].provider, - hardlinks: !allSettings[settings.BACKUP_CONFIG_KEY].noHardlinks - }, - domainConfig: { - count: allDomains.length, - domains: Array.from(new Set(allDomains.map(function (d) { return { domain: d.domain, provider: d.provider }; }))) - }, - mailConfig: { - outboundCount: mailDomains.length, - inboundCount: mailDomains.filter(function (d) { return d.enabled; }).length, - catchAllCount: mailDomains.filter(function (d) { return d.catchAll.length !== 0; }).length, - relayProviders: Array.from(new Set(mailDomains.map(function (d) { return d.relay.provider; }))) - }, - userCount: userCount, - groupCount: groupCount, - appAutoupdatePattern: allSettings[settings.APP_AUTOUPDATE_PATTERN_KEY], - boxAutoupdatePattern: allSettings[settings.BOX_AUTOUPDATE_PATTERN_KEY], - timeZone: allSettings[settings.TIME_ZONE_KEY], - sysinfoProvider: allSettings[settings.SYSINFO_CONFIG_KEY].provider - }; - - var data = { - version: constants.VERSION, - adminFqdn: settings.adminFqdn(), - backendSettings: backendSettings, - machine: { - cpus: os.cpus(), - totalmem: os.totalmem() - }, - events: { - lastLogin: loginEvents[0] ? (new Date(loginEvents[0].creationTime).getTime()) : 0 - } - }; - - getCloudronToken(function (error, token) { - if (error) return callback(error); - - const url = `${settings.apiServerOrigin()}/api/v1/alive`; - superagent.post(url).send(data).query({ accessToken: token }).timeout(30 * 1000).end(function (error, result) { - if (error && !error.response) return callback(new BoxError(BoxError.NETWORK_ERROR, error)); - if (result.statusCode === 404) return callback(new BoxError(BoxError.NOT_FOUND)); - if (result.statusCode === 401) return callback(new BoxError(BoxError.INVALID_CREDENTIALS)); - if (result.statusCode === 422) return callback(new BoxError(BoxError.LICENSE_ERROR, result.body.message)); - if (result.statusCode !== 201) return callback(new BoxError(BoxError.EXTERNAL_ERROR, util.format('Sending alive status failed. %s %j', result.status, result.body))); - - callback(null); - }); - }); - }); -} - function getBoxUpdate(options, callback) { assert.strictEqual(typeof options, 'object'); assert.strictEqual(typeof callback, 'function'); diff --git a/src/cron.js b/src/cron.js index 11227dc67..87938674f 100644 --- a/src/cron.js +++ b/src/cron.js @@ -22,7 +22,6 @@ exports = module.exports = { var appHealthMonitor = require('./apphealthmonitor.js'), apps = require('./apps.js'), - appstore = require('./appstore.js'), assert = require('assert'), async = require('async'), auditSource = require('./auditsource.js'), @@ -41,7 +40,6 @@ var appHealthMonitor = require('./apphealthmonitor.js'), updateChecker = require('./updatechecker.js'); var gJobs = { - alive: null, // send periodic stats appAutoUpdater: null, boxAutoUpdater: null, appUpdateChecker: null, @@ -73,12 +71,6 @@ function startJobs(callback) { assert.strictEqual(typeof callback, 'function'); const randomMinute = Math.floor(60*Math.random()); - gJobs.alive = new CronJob({ - cronTime: '00 ' + randomMinute + ' * * * *', // every hour on a random minute - onTick: appstore.sendAliveStatus, - start: true - }); - gJobs.systemChecks = new CronJob({ cronTime: '00 30 * * * *', // every 30 minutes. if you change this interval, change the notification messages with correct duration onTick: () => cloudron.runSystemChecks(NOOP_CALLBACK), diff --git a/src/test/appstore-test.js b/src/test/appstore-test.js index 1c0e0ad9f..8b21a5979 100644 --- a/src/test/appstore-test.js +++ b/src/test/appstore-test.js @@ -50,57 +50,10 @@ describe('Appstore', function () { beforeEach(nock.cleanAll); - it('cannot send alive status without registering', function (done) { - appstore.sendAliveStatus(function (error) { - expect(error).to.be.ok(); - expect(error.reason).to.equal(BoxError.LICENSE_ERROR); // missing token - done(); - }); - }); - it('can set cloudron token', function (done) { settingsdb.set(settings.CLOUDRON_TOKEN_KEY, APPSTORE_TOKEN, done); }); - it('can send alive status', function (done) { - var scope = nock(MOCK_API_SERVER_ORIGIN) - .post(`/api/v1/alive?accessToken=${APPSTORE_TOKEN}`, function (body) { - expect(body.version).to.be.a('string'); - expect(body.adminFqdn).to.be.a('string'); - expect(body.backendSettings).to.be.an('object'); - expect(body.backendSettings.backupConfig).to.be.an('object'); - expect(body.backendSettings.backupConfig.provider).to.be.a('string'); - expect(body.backendSettings.backupConfig.hardlinks).to.be.a('boolean'); - expect(body.backendSettings.domainConfig).to.be.an('object'); - expect(body.backendSettings.domainConfig.count).to.be.a('number'); - expect(body.backendSettings.domainConfig.domains).to.be.an('array'); - expect(body.backendSettings.mailConfig).to.be.an('object'); - expect(body.backendSettings.mailConfig.outboundCount).to.be.a('number'); - expect(body.backendSettings.mailConfig.inboundCount).to.be.a('number'); - expect(body.backendSettings.mailConfig.catchAllCount).to.be.a('number'); - expect(body.backendSettings.mailConfig.relayProviders).to.be.an('array'); - expect(body.backendSettings.appAutoupdatePattern).to.be.a('string'); - expect(body.backendSettings.boxAutoupdatePattern).to.be.a('string'); - expect(body.backendSettings.sysinfoProvider).to.be.a('string'); - expect(body.backendSettings.timeZone).to.be.a('string'); - expect(body.machine).to.be.an('object'); - expect(body.machine.cpus).to.be.an('array'); - expect(body.machine.totalmem).to.be.an('number'); - expect(body.events).to.be.an('object'); - expect(body.events.lastLogin).to.be.an('number'); - - return true; - }) - .reply(201, { cloudron: { id: CLOUDRON_ID }}); - - appstore.sendAliveStatus(function (error) { - expect(error).to.not.be.ok(); - expect(scope.isDone()).to.be.ok(); - - done(); - }); - }); - it('can purchase an app', function (done) { var scope1 = nock(MOCK_API_SERVER_ORIGIN) .post(`/api/v1/cloudronapps?accessToken=${APPSTORE_TOKEN}`, function () { return true; })