replace delay.js with timers/promises

This commit is contained in:
Girish Ramakrishnan
2023-05-14 10:53:50 +02:00
parent 75ba20201e
commit 500d2361ec
14 changed files with 82 additions and 109 deletions
+2 -2
View File
@@ -35,7 +35,6 @@ const apps = require('./apps.js'),
constants = require('./constants.js'),
cron = require('./cron.js'),
debug = require('debug')('box:cloudron'),
delay = require('./delay.js'),
dns = require('./dns.js'),
dockerProxy = require('./dockerproxy.js'),
eventlog = require('./eventlog.js'),
@@ -54,6 +53,7 @@ const apps = require('./apps.js'),
shell = require('./shell.js'),
sysinfo = require('./sysinfo.js'),
tasks = require('./tasks.js'),
timers = require('timers/promises'),
users = require('./users.js');
const REBOOT_CMD = path.join(__dirname, 'scripts/reboot.sh');
@@ -85,7 +85,7 @@ async function onActivated(options) {
// disable responding to api calls via IP to not leak domain info. this is carefully placed as the last item, so it buys
// the UI some time to query the dashboard domain in the restore code path
await delay(30000);
await timers.setTimeout(30000);
await reverseProxy.writeDefaultConfig({ activated :true });
}
-13
View File
@@ -1,13 +0,0 @@
'use strict';
exports = module.exports = delay;
const assert = require('assert');
function delay(msecs) {
assert.strictEqual(typeof msecs, 'number');
return new Promise(function (resolve) {
setTimeout(resolve, msecs);
});
}
+2 -2
View File
@@ -37,7 +37,6 @@ const apps = require('./apps.js'),
BoxError = require('./boxerror.js'),
constants = require('./constants.js'),
debug = require('debug')('box:docker'),
delay = require('./delay.js'),
Docker = require('dockerode'),
paths = require('./paths.js'),
promiseRetry = require('./promise-retry.js'),
@@ -46,6 +45,7 @@ const apps = require('./apps.js'),
shell = require('./shell.js'),
safe = require('safetydance'),
system = require('./system.js'),
timers = require('timers/promises'),
volumes = require('./volumes.js'),
_ = require('underscore');
@@ -648,7 +648,7 @@ async function update(name, memory, memorySwap) {
for (let times = 0; times < 10; times++) {
const [error] = await safe(shell.promises.spawn(`update(${name})`, '/usr/bin/docker', args, { }));
if (!error) return;
await delay(60 * 1000);
await timers.setTimeout(60 * 1000);
}
throw new BoxError(BoxError.DOCKER_ERROR, 'Unable to update container');
+2 -2
View File
@@ -13,7 +13,6 @@ const apps = require('./apps.js'),
BoxError = require('./boxerror.js'),
constants = require('./constants.js'),
debug = require('debug')('box:platform'),
delay = require('./delay.js'),
fs = require('fs'),
infra = require('./infra_version.js'),
locker = require('./locker.js'),
@@ -23,6 +22,7 @@ const apps = require('./apps.js'),
services = require('./services.js'),
shell = require('./shell.js'),
tasks = require('./tasks.js'),
timers = require('timers/promises'),
volumes = require('./volumes.js'),
_ = require('underscore');
@@ -74,7 +74,7 @@ async function start(options) {
const retry = error.reason === BoxError.DATABASE_ERROR && (error.code === 'PROTOCOL_CONNECTION_LOST' || error.code === 'ECONNREFUSED');
debug(`Failed to start services. retry=${retry} (attempt ${attempt}): ${error.message}`);
if (!retry) throw error; // refuse to start
await delay(10000);
await timers.setTimeout(10000);
}
}
+2 -2
View File
@@ -3,7 +3,7 @@
exports = module.exports = promiseRetry;
const assert = require('assert'),
delay = require('./delay.js'),
timers = require('timers/promises'),
util = require('util');
async function promiseRetry(options, asyncFunction) {
@@ -19,7 +19,7 @@ async function promiseRetry(options, asyncFunction) {
if (i === times - 1) throw error;
if (options.retry && !options.retry(error)) throw error; // no more retry
if (options.debug) options.debug(`Attempt ${i+1} failed. Will retry: ${error.message}`);
await delay(interval);
await timers.setTimeout(interval);
}
}
}
+2 -2
View File
@@ -7,9 +7,9 @@
'use strict';
const common = require('./common.js'),
delay = require('../../delay.js'),
expect = require('expect.js'),
superagent = require('superagent'),
timers = require('timers/promises'),
tokens = require('../../tokens.js');
describe('REST API', function () {
@@ -93,7 +93,7 @@ describe('REST API', function () {
.set('Authorization', 'Bearer ' + token2.accessToken);
expect(response.statusCode).to.be(200);
await delay(3000); // wait for token to expire
await timers.setTimeout(3000); // wait for token to expire
const response2 = await superagent.get(`${serverUrl}/api/v1/users/${user.id}`)
.set('Authorization', 'Bearer ' + token2.accessToken)
+4 -4
View File
@@ -2,7 +2,6 @@
const constants = require('../../constants.js'),
database = require('../../database.js'),
delay = require('../../delay.js'),
expect = require('expect.js'),
fs = require('fs'),
mailer = require('../../mailer.js'),
@@ -13,6 +12,7 @@ const constants = require('../../constants.js'),
support = require('../../support.js'),
superagent = require('superagent'),
tasks = require('../../tasks.js'),
timers = require('timers/promises'),
tokens = require('../../tokens.js');
exports = module.exports = {
@@ -75,7 +75,7 @@ async function setup() {
.send({ domainConfig: { provider: 'noop', domain: exports.dashboardDomain, config: {}, tlsConfig: { provider: 'fallback' } } });
expect(response.status).to.eql(200);
await delay(2000);
await timers.setTimeout(2000);
// create admin
response = await superagent.post(`${serverUrl}/api/v1/cloudron/activate`)
@@ -119,7 +119,7 @@ function clearMailQueue() {
}
async function checkMails(number) {
await delay(1000);
await timers.setTimeout(1000);
expect(mailer._mailQueue.length).to.equal(number);
clearMailQueue();
}
@@ -133,7 +133,7 @@ async function waitForTask(taskId) {
if (result.success) return result;
throw new Error(`Task ${taskId} failed: ${result.error.message} - ${result.error.stack}`);
}
await delay(2000);
await timers.setTimeout(2000);
console.log(`Waiting for task to ${taskId} finish`);
}
throw new Error(`Task ${taskId} never finished`);
+4 -4
View File
@@ -7,9 +7,9 @@
const common = require('./common.js');
const delay = require('../../delay.js'),
expect = require('expect.js'),
superagent = require('superagent');
const expect = require('expect.js'),
superagent = require('superagent'),
timers = require('timers/promises');
const DOMAIN = 'example-server-test.com';
@@ -27,7 +27,7 @@ describe('Provision', function () {
if (response.status === 200 && !response.body.setup.active && response.body.setup.errorMessage === '' && response.body.adminFqdn) return;
await delay(4000);
await timers.setTimeout(4000);
}
throw new Error(`Setup did not complete. status: ${response.status} body: ${JSON.stringify(response.body)}`);
+5 -5
View File
@@ -9,11 +9,11 @@
const backupCleaner = require('../backupcleaner.js'),
backups = require('../backups.js'),
common = require('./common.js'),
delay = require('../delay.js'),
expect = require('expect.js'),
moment = require('moment'),
settings = require('../settings.js'),
tasks = require('../tasks.js');
tasks = require('../tasks.js'),
timers = require('timers/promises');
describe('backup cleaner', function () {
const { setup, cleanup, app } = common;
@@ -226,7 +226,7 @@ describe('backup cleaner', function () {
// eslint-disable-next-line no-constant-condition
while (true) {
await delay(1000);
await timers.setTimeout(1000);
const p = await tasks.get(taskId);
@@ -247,7 +247,7 @@ describe('backup cleaner', function () {
BACKUP_0_BOX.dependsOn = [ BACKUP_0_APP_0.id, BACKUP_0_APP_1.id ];
BACKUP_0_BOX.id = await backups.add(BACKUP_0_BOX);
await delay(2000); // space out backups
await timers.setTimeout(2000); // space out backups
BACKUP_1_APP_0.id = await backups.add(BACKUP_1_APP_0);
BACKUP_1_APP_1.id = await backups.add(BACKUP_1_APP_1);
@@ -284,7 +284,7 @@ describe('backup cleaner', function () {
backup.id = await backups.add(backup);
}
await delay(2000); // wait for expiration
await timers.setTimeout(2000); // wait for expiration
await cleanupBackups();
+4 -4
View File
@@ -8,13 +8,13 @@
const backups = require('../backups.js'),
common = require('./common.js'),
delay = require('../delay.js'),
expect = require('expect.js'),
fs = require('fs'),
os = require('os'),
path = require('path'),
settings = require('../settings.js'),
tasks = require('../tasks.js');
tasks = require('../tasks.js'),
timers = require('timers/promises');
describe('backuptask', function () {
const { setup, cleanup } = common;
@@ -48,7 +48,7 @@ describe('backuptask', function () {
// eslint-disable-next-line no-constant-condition
while (true) {
await delay(1000);
await timers.setTimeout(1000);
const p = await tasks.get(taskId);
@@ -61,7 +61,7 @@ describe('backuptask', function () {
if (result.length !== 1) throw new Error('result is not of length 1');
// the task progress and the db entry is set in the worker. wait for 2 seconds for backup lock to get released in parent process
await delay(2000);
await timers.setTimeout(2000);
return result[0];
}
+26 -26
View File
@@ -3,7 +3,6 @@
const apps = require('../apps.js'),
constants = require('../constants.js'),
database = require('../database.js'),
delay = require('../delay.js'),
domains = require('../domains.js'),
expect = require('expect.js'),
fs = require('fs'),
@@ -13,6 +12,7 @@ const apps = require('../apps.js'),
paths = require('../paths.js'),
settings = require('../settings.js'),
tasks = require('../tasks.js'),
timers = require('timers/promises'),
users = require('../users.js');
const manifest = {
@@ -45,30 +45,30 @@ const manifest = {
// copied from the proxy app CloudronManifest.json
const proxyAppManifest = {
"id": "io.cloudron.builtin.appproxy",
"title": "App Proxy",
"author": "Cloudron Team",
"version": "1.0.0",
"upstreamVersion": "1.0.0",
"description": "file://DESCRIPTION.md",
"tagline": "Proxy an app through Cloudron",
"tags": [ "proxy", "external" ],
"healthCheckPath": "/",
"httpPort": 3000,
"minBoxVersion": "7.3.0",
"dockerImage": "istobeignored",
"manifestVersion": 2,
"multiDomain": true,
"website": "https://cloudron.io",
"documentationUrl": "https://docs.cloudron.io/dashboard/#app-proxy",
"forumUrl": "https://forum.cloudron.io",
"contactEmail": "support@cloudron.io",
"icon": "file://logo.png",
"addons": {},
"mediaLinks": [
"https://screenshots.cloudron.io/io.cloudron.builtin.appproxy/diagram.png"
],
"changelog": "file://CHANGELOG.md"
'id': 'io.cloudron.builtin.appproxy',
'title': 'App Proxy',
'author': 'Cloudron Team',
'version': '1.0.0',
'upstreamVersion': '1.0.0',
'description': 'file://DESCRIPTION.md',
'tagline': 'Proxy an app through Cloudron',
'tags': [ 'proxy', 'external' ],
'healthCheckPath': '/',
'httpPort': 3000,
'minBoxVersion': '7.3.0',
'dockerImage': 'istobeignored',
'manifestVersion': 2,
'multiDomain': true,
'website': 'https://cloudron.io',
'documentationUrl': 'https://docs.cloudron.io/dashboard/#app-proxy',
'forumUrl': 'https://forum.cloudron.io',
'contactEmail': 'support@cloudron.io',
'icon': 'file://logo.png',
'addons': {},
'mediaLinks': [
'https://screenshots.cloudron.io/io.cloudron.builtin.appproxy/diagram.png'
],
'changelog': 'file://CHANGELOG.md'
};
const domain = {
@@ -249,7 +249,7 @@ function clearMailQueue() {
}
async function checkMails(number) {
await delay(1000);
await timers.setTimeout(1000);
expect(mailer._mailQueue.length).to.equal(number);
const emails = mailer._mailQueue;
clearMailQueue();
+4 -4
View File
@@ -8,10 +8,10 @@
const common = require('./common.js'),
database = require('../database.js'),
delay = require('../delay.js'),
eventlog = require('../eventlog.js'),
expect = require('expect.js'),
notifications = require('../notifications.js');
notifications = require('../notifications.js'),
timers = require('timers/promises');
describe('Eventlog', function () {
const { setup, cleanup } = common;
@@ -89,7 +89,7 @@ describe('Eventlog', function () {
let result = await eventlog.get(loginEventId);
const oldCreationTime = result.creationTime;
await delay(2000);
await timers.setTimeout(2000);
result = await eventlog.upsertLoginEvent('user.login', { ip: '1.2.3.4' }, { appId: 'thatapp' });
expect(result).to.equal(loginEventId);
@@ -117,7 +117,7 @@ describe('Eventlog', function () {
await notifications._add('title', 'some message', { eventId });
}
await delay(3000);
await timers.setTimeout(3000);
const id = await eventlog.add(eventlog.ACTION_USER_LOGIN, { ip: '1.2.3.4' }, { appId: 'thatapp' });
+3 -3
View File
@@ -8,10 +8,10 @@
const BoxError = require('../boxerror.js'),
common = require('./common.js'),
delay = require('../delay.js'),
expect = require('expect.js'),
notifications = require('../notifications.js'),
safe = require('safetydance');
safe = require('safetydance'),
timers = require('timers/promises');
const EVENT_0 = {
id: 'event_0',
@@ -34,7 +34,7 @@ describe('Notifications', function () {
expect(error).to.equal(null);
expect(id).to.be.a('string');
notificationIds.push(id);
await delay(1000);
await timers.setTimeout(1000);
}
});