This commit is contained in:
Girish Ramakrishnan
2026-03-12 23:23:23 +05:30
parent ff49759f42
commit f12b4faf34
99 changed files with 109 additions and 108 deletions

4
box.js
View File

@@ -12,7 +12,7 @@ import server from './src/server.js';
import directoryServer from './src/directoryserver.js';
import logger from './src/logger.js';
const { log, trace } = logger('box');
const { log } = logger('box');
let logFd;
@@ -94,4 +94,4 @@ process.on('SIGTERM', async function () {
}, 2000); // need to wait for the task processes to die
});
process.on('uncaughtException', (error) => exitSync({ error, code: 1, message: 'From uncaughtException handler.' }));
process.on('uncaughtException', (uncaughtError) => exitSync({ error: uncaughtError, code: 1, message: 'From uncaughtException handler.' }));

View File

@@ -12,7 +12,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import users from './users.js';
const { log, trace } = logger('cert/acme2');
const { log } = logger('cert/acme2');
const CA_PROD_DIRECTORY_URL = 'https://acme-v02.api.letsencrypt.org/directory',
CA_STAGING_DIRECTORY_URL = 'https://acme-staging-v02.api.letsencrypt.org/directory';

View File

@@ -9,7 +9,7 @@ import eventlog from './eventlog.js';
import safe from 'safetydance';
import superagent from '@cloudron/superagent';
const { log, trace } = logger('apphealthmonitor');
const { log } = logger('apphealthmonitor');
const UNHEALTHY_THRESHOLD = 20 * 60 * 1000; // 20 minutes

View File

@@ -8,7 +8,7 @@ import jsdom from 'jsdom';
import safe from 'safetydance';
import superagent from '@cloudron/superagent';
const { log, trace } = logger('applinks');
const { log } = logger('applinks');
const APPLINKS_FIELDS= [ 'id', 'accessRestrictionJson', 'creationTime', 'updateTime', 'ts', 'label', 'tagsJson', 'icon', 'upstreamUri' ].join(',');

View File

@@ -40,7 +40,7 @@ import util from 'node:util';
import volumes from './volumes.js';
import _ from './underscore.js';
const { log, trace } = logger('apps');
const { log } = logger('apps');
const shell = shellModule('apps');
const PORT_TYPE_TCP = 'tcp';
@@ -1071,7 +1071,8 @@ async function onTaskFinished(error, appId, installationState, taskId, auditSour
}
// this can race with an new install task but very unlikely
log(`onTaskFinished: checking to stop unused services. hasPending: ${appTaskManager.hasPendingTasks()}`)
log(`onTaskFinished: checking to stop unused services. hasPending: ${appTaskManager.hasPendingTasks()}`);
if (!appTaskManager.hasPendingTasks()) safe(services.stopUnusedServices(), { debug: log });
}

View File

@@ -23,7 +23,7 @@ import system from './system.js';
import users from './users.js';
import volumes from './volumes.js';
const { log, trace } = logger('appstore');
const { log } = logger('appstore');
// These are the default options and will be adjusted once a subscription state is obtained
// Keep in sync with appstore/routes/cloudrons.js

View File

@@ -28,7 +28,7 @@ import services from './services.js';
import shellModule from './shell.js';
import _ from './underscore.js';
const { log, trace } = logger('apptask');
const { log } = logger('apptask');
const shell = shellModule('apptask');
const LOGROTATE_CONFIG_EJS = fs.readFileSync(import.meta.dirname + '/logrotate.ejs', { encoding: 'utf8' }),

View File

@@ -9,7 +9,7 @@ import safe from 'safetydance';
import scheduler from './scheduler.js';
import tasks from './tasks.js';
const { log, trace } = logger('apptaskmanager');
const { log } = logger('apptaskmanager');
const gActiveTasks = {}; // indexed by app id

View File

@@ -2,7 +2,7 @@ import logger from './logger.js';
import EventEmitter from 'node:events';
import safe from 'safetydance';
const { log, trace } = logger('asynctask');
const { log } = logger('asynctask');
// this runs in-process
class AsyncTask extends EventEmitter {

View File

@@ -11,7 +11,7 @@ import moment from 'moment';
import path from 'node:path';
import safe from 'safetydance';
const { log, trace } = logger('backupcleaner');
const { log } = logger('backupcleaner');
function applyBackupRetention(allBackups, retention, referencedBackupIds) {
assert(Array.isArray(allBackups));

View File

@@ -19,7 +19,7 @@ import syncer from '../syncer.js';
import util from 'node:util';
import { Writable } from 'node:stream';
const { log, trace } = logger('backupformat/rsync');
const { log } = logger('backupformat/rsync');
const shell = shellModule('backupformat/rsync');
async function addFile(sourceFile, encryption, uploader, progressCallback) {

View File

@@ -17,7 +17,7 @@ import tar from 'tar-stream';
import util from 'node:util';
import zlib from 'node:zlib';
const { log, trace } = logger('backupformat/tgz');
const { log } = logger('backupformat/tgz');
// In tar, the entry header contains the file size. If we don't provide it those many bytes, the tar will become corrupt
// Linux provides no guarantee of how many bytes can be read from a file. This is the case with sqlite and log files

View File

@@ -8,7 +8,7 @@ import crypto from 'node:crypto';
import logger from './logger.js';
import safe from 'safetydance';
const { log, trace } = logger('backupintegrity');
const { log } = logger('backupintegrity');
async function downloadBackupInfo(backupSite, backup) {

View File

@@ -7,7 +7,7 @@ import hat from './hat.js';
import safe from 'safetydance';
import tasks from './tasks.js';
const { log, trace } = logger('backups');
const { log } = logger('backups');
const BACKUP_TYPE_APP = 'app';
const BACKUP_STATE_NORMAL = 'normal';

View File

@@ -18,7 +18,7 @@ import storageFilesystem from './storage/filesystem.js';
import storageS3 from './storage/s3.js';
import storageGcs from './storage/gcs.js';
const { log, trace } = logger('backups');
const { log } = logger('backups');
// format: rsync or tgz

View File

@@ -20,7 +20,7 @@ import shellModule from './shell.js';
import stream from 'stream/promises';
import util from 'util';
const { log, trace } = logger('backuptask');
const { log } = logger('backuptask');
const shell = shellModule('backuptask');

View File

@@ -8,7 +8,7 @@ import paths from './paths.js';
import safe from 'safetydance';
import settings from './settings.js';
const { log, trace } = logger('branding');
const { log } = logger('branding');
async function getCloudronName() {

View File

@@ -6,7 +6,7 @@ import promiseRetry from './promise-retry.js';
import safe from 'safetydance';
import superagent from '@cloudron/superagent';
const { log, trace } = logger('community');
const { log } = logger('community');
const CLOUDRON_VERSIONS_FILE = 'CloudronVersions.json';

View File

@@ -24,7 +24,7 @@ import system from './system.js';
import updater from './updater.js';
import util from 'node:util';
const { log, trace } = logger('cron');
const { log } = logger('cron');
// IMPORTANT: These patterns are together because they spin tasks which acquire a lock
// If the patterns overlap all the time, then the task may not ever get a chance to run!

View File

@@ -18,7 +18,7 @@ import system from './system.js';
import tasks from './tasks.js';
import userDirectory from './user-directory.js';
const { log, trace } = logger('dashboard');
const { log } = logger('dashboard');
async function getLocation() {
const domain = await settings.get(settings.DASHBOARD_DOMAIN_KEY);

View File

@@ -7,7 +7,7 @@ import mysql from 'mysql2/promise';
import safe from 'safetydance';
import shellModule from './shell.js';
const { log, trace } = logger('database');
const { log } = logger('database');
const shell = shellModule('database');
let gConnectionPool = null;

View File

@@ -4,7 +4,7 @@ import logger from './logger.js';
import safe from 'safetydance';
import shellModule from './shell.js';
const { log, trace } = logger('df');
const { log } = logger('df');
const shell = shellModule('df');

View File

@@ -16,7 +16,7 @@ import shellModule from './shell.js';
import users from './users.js';
import util from 'node:util';
const { log, trace } = logger('directoryserver');
const { log } = logger('directoryserver');
const shell = shellModule('directoryserver');
@@ -289,7 +289,7 @@ async function groupSearch(req, res, next) {
async function start() {
assert(gServer === null, 'Already running');
const logger = {
const ldapLogger = {
trace: NOOP,
debug: NOOP,
info: log,
@@ -303,7 +303,7 @@ async function start() {
gServer = ldap.createServer({
certificate: gCertificate.cert,
key: gCertificate.key,
log: logger
log: ldapLogger
});
gServer.on('error', function (error) {

View File

@@ -36,7 +36,7 @@ import dnsOvh from './dns/ovh.js';
import dnsPorkbun from './dns/porkbun.js';
import dnsWildcard from './dns/wildcard.js';
const { log, trace } = logger('dns');
const { log } = logger('dns');
const DNS_PROVIDERS = {

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/bunny');
const { log } = logger('dns/bunny');
const BUNNY_API = 'https://api.bunny.net';

View File

@@ -9,7 +9,7 @@ import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
import _ from '../underscore.js';
const { log, trace } = logger('dns/cloudflare');
const { log } = logger('dns/cloudflare');
// we are using latest v4 stable API https://api.cloudflare.com/#getting-started-endpoints

View File

@@ -9,7 +9,7 @@ import timers from 'timers/promises';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/desec');
const { log } = logger('dns/desec');
const DESEC_ENDPOINT = 'https://desec.io/api/v1';

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/digitalocean');
const { log } = logger('dns/digitalocean');
const DIGITALOCEAN_ENDPOINT = 'https://api.digitalocean.com';

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/dnsimple');
const { log } = logger('dns/dnsimple');
const DNSIMPLE_API = 'https://api.dnsimple.com/v2';

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/gandi');
const { log } = logger('dns/gandi');
const GANDI_API = 'https://dns.api.gandi.net/api/v5';

View File

@@ -9,7 +9,7 @@ import safe from 'safetydance';
import waitForDns from './waitfordns.js';
import _ from '../underscore.js';
const { log, trace } = logger('dns/gcdns');
const { log } = logger('dns/gcdns');
function removePrivateFields(domainObject) {

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/godaddy');
const { log } = logger('dns/godaddy');
// const GODADDY_API_OTE = 'https://api.ote-godaddy.com/v1/domains';

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/hetzner');
const { log } = logger('dns/hetzner');
const ENDPOINT = 'https://dns.hetzner.com/api/v1';

View File

@@ -9,7 +9,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/hetznercloud');
const { log } = logger('dns/hetznercloud');
// https://docs.hetzner.cloud/reference/cloud

View File

@@ -8,7 +8,7 @@ import dns from '../dns.js';
import safe from 'safetydance';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/inwx');
const { log } = logger('dns/inwx');
function formatError(response) {

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/linode');
const { log } = logger('dns/linode');
const LINODE_ENDPOINT = 'https://api.linode.com/v4';

View File

@@ -6,7 +6,7 @@ import dns from '../dns.js';
import safe from 'safetydance';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/manual');
const { log } = logger('dns/manual');
function removePrivateFields(domainObject) {

View File

@@ -12,7 +12,7 @@ import util from 'node:util';
import waitForDns from './waitfordns.js';
import xml2js from 'xml2js';
const { log, trace } = logger('dns/namecheap');
const { log } = logger('dns/namecheap');
const ENDPOINT = 'https://api.namecheap.com/xml.response';

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/namecom');
const { log } = logger('dns/namecom');
const NAMECOM_API = 'https://api.name.com/v4';

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/netcup');
const { log } = logger('dns/netcup');
const API_ENDPOINT = 'https://ccp.netcup.net/run/webservice/servers/endpoint.php?JSON';

View File

@@ -1,7 +1,7 @@
import assert from 'node:assert';
import logger from '../logger.js';
const { log, trace } = logger('dns/noop');
const { log } = logger('dns/noop');
function removePrivateFields(domainObject) {

View File

@@ -8,7 +8,7 @@ import ovhClient from 'ovh';
import safe from 'safetydance';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/ovh');
const { log } = logger('dns/ovh');
function formatError(error) {

View File

@@ -9,7 +9,7 @@ import superagent from '@cloudron/superagent';
import timers from 'timers/promises';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/porkbun');
const { log } = logger('dns/porkbun');
// Rate limit note: Porkbun return 503 when it hits rate limits. It's as low as 1 req/second

View File

@@ -10,7 +10,7 @@ import safe from 'safetydance';
import waitForDns from './waitfordns.js';
import _ from '../underscore.js';
const { log, trace } = logger('dns/route53');
const { log } = logger('dns/route53');
function removePrivateFields(domainObject) {

View File

@@ -8,7 +8,7 @@ import safe from 'safetydance';
import superagent from '@cloudron/superagent';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/vultr');
const { log } = logger('dns/vultr');
const VULTR_ENDPOINT = 'https://api.vultr.com/v2';

View File

@@ -7,7 +7,7 @@ import promiseRetry from '../promise-retry.js';
import safe from 'safetydance';
import _ from '../underscore.js';
const { log, trace } = logger('dns/waitfordns');
const { log } = logger('dns/waitfordns');
async function resolveIp(hostname, type, options) {
assert.strictEqual(typeof hostname, 'string');

View File

@@ -7,7 +7,7 @@ import network from '../network.js';
import safe from 'safetydance';
import waitForDns from './waitfordns.js';
const { log, trace } = logger('dns/manual');
const { log } = logger('dns/manual');
function removePrivateFields(domainObject) {

View File

@@ -17,7 +17,7 @@ import safe from 'safetydance';
import timers from 'timers/promises';
import volumes from './volumes.js';
const { log, trace } = logger('docker');
const { log } = logger('docker');
const shell = shellModule('docker');

View File

@@ -13,7 +13,7 @@ import safe from 'safetydance';
import util from 'node:util';
import volumes from './volumes.js';
const { log, trace } = logger('dockerproxy');
const { log } = logger('dockerproxy');
let gHttpServer = null;

View File

@@ -36,7 +36,7 @@ import dnsManual from './dns/manual.js';
import dnsPorkbun from './dns/porkbun.js';
import dnsWildcard from './dns/wildcard.js';
const { log, trace } = logger('domains');
const { log } = logger('domains');
const DOMAINS_FIELDS = [ 'domain', 'zoneName', 'provider', 'configJson', 'tlsConfigJson', 'wellKnownJson', 'fallbackCertificateJson' ].join(',');

View File

@@ -11,7 +11,7 @@ import paths from './paths.js';
import safe from 'safetydance';
import tasks from './tasks.js';
const { log, trace } = logger('dyndns');
const { log } = logger('dyndns');
// FIXME: this races with apptask. can result in a conflict if apptask is doing some dns operation and this code changes entries

View File

@@ -6,7 +6,7 @@ import mysql from 'mysql2';
import notifications from './notifications.js';
import safe from 'safetydance';
const { log, trace } = logger('eventlog');
const { log } = logger('eventlog');
const ACTION_ACTIVATE = 'cloudron.activate';
const ACTION_USER_LOGIN = 'user.login';

View File

@@ -13,7 +13,7 @@ import tasks from './tasks.js';
import users from './users.js';
import util from 'node:util';
const { log, trace } = logger('externalldap');
const { log } = logger('externalldap');
function removePrivateFields(ldapConfig) {

View File

@@ -4,7 +4,7 @@ import crypto from 'node:crypto';
import logger from './logger.js';
import { Transform as TransformStream } from 'node:stream';
const { log, trace } = logger('hush');
const { log } = logger('hush');
class EncryptStream extends TransformStream {
constructor(encryption) {

View File

@@ -39,7 +39,7 @@ export function getImageContentType(buffer) {
if (/^\s*(<\?xml|<svg)/i.test(head)) {
return 'image/svg+xml';
}
} catch (_) {
} catch {
// invalid UTF-8, not SVG
}

View File

@@ -5,7 +5,7 @@ import Docker from 'dockerode';
import safe from 'safetydance';
import tokens from './tokens.js';
const { log, trace } = logger('janitor');
const { log } = logger('janitor');
const gConnection = new Docker({ socketPath: '/var/run/docker.sock' });

View File

@@ -13,7 +13,7 @@ import safe from 'safetydance';
import users from './users.js';
import util from 'node:util';
const { log, trace } = logger('ldapserver');
const { log } = logger('ldapserver');
let _MOCK_APP = null;
@@ -630,7 +630,7 @@ async function maybeRootDSE(req, res, next) {
async function start() {
assert(gServer === null, 'Already started');
const logger = {
const ldapLogger = {
trace: NOOP,
debug: NOOP,
info: log,
@@ -639,7 +639,7 @@ async function start() {
fatal: log
};
gServer = ldap.createServer({ log: logger });
gServer = ldap.createServer({ log: ldapLogger });
gServer.on('error', function (error) {
log('start: server error. %o', error);

View File

@@ -4,7 +4,7 @@ import database from './database.js';
import logger from './logger.js';
import promiseRetry from './promise-retry.js';
const { log, trace } = logger('locks');
const { log } = logger('locks');
const TYPE_APP_TASK_PREFIX = 'app_task_';
const TYPE_APP_BACKUP_PREFIX = 'app_backup_';

View File

@@ -5,7 +5,7 @@ import path from 'node:path';
import stream from 'node:stream';
import { StringDecoder } from 'node:string_decoder';
const { log, trace } = logger('logs');
const { log } = logger('logs');
const TransformStream = stream.Transform;
const LOGTAIL_CMD = path.join(import.meta.dirname, 'scripts/logtail.sh');

View File

@@ -22,7 +22,7 @@ import superagent from '@cloudron/superagent';
import validator from './validator.js';
import _ from './underscore.js';
const { log, trace } = logger('mail');
const { log } = logger('mail');
const shell = shellModule('mail');
const OWNERTYPE_USER = 'user';

View File

@@ -11,7 +11,7 @@ import path from 'node:path';
import safe from 'safetydance';
import translations from './translations.js';
const { log, trace } = logger('mailer');
const { log } = logger('mailer');
const _mailQueue = []; // accumulate mails in test mode;

View File

@@ -22,7 +22,7 @@ import shellModule from './shell.js';
import tasks from './tasks.js';
import users from './users.js';
const { log, trace } = logger('mailserver');
const { log } = logger('mailserver');
const shell = shellModule('mailserver');
const DEFAULT_MEMORY_LIMIT = 512 * 1024 * 1024;

View File

@@ -15,7 +15,7 @@ import shellModule from './shell.js';
import superagent from '@cloudron/superagent';
import _ from './underscore.js';
const { log, trace } = logger('metrics');
const { log } = logger('metrics');
const shell = shellModule('metrics');

View File

@@ -9,7 +9,7 @@ import paths from './paths.js';
import safe from 'safetydance';
import shellModule from './shell.js';
const { log, trace } = logger('mounts');
const { log } = logger('mounts');
const shell = shellModule('mounts');
const MOUNT_TYPE_FILESYSTEM = 'filesystem';

View File

@@ -5,7 +5,7 @@ import logger from '../logger.js';
import safe from 'safetydance';
import superagent from '@cloudron/superagent';
const { log, trace } = logger('network/generic');
const { log } = logger('network/generic');
const gCache = { ipv4: {}, ipv6: {} }; // each has { timestamp, value, request }

View File

@@ -4,7 +4,7 @@ import logger from '../logger.js';
import os from 'node:os';
import safe from 'safetydance';
const { log, trace } = logger('network/network-interface');
const { log } = logger('network/network-interface');
async function getIPv4(config) {

View File

@@ -10,7 +10,7 @@ import mailer from './mailer.js';
import safe from 'safetydance';
import users from './users.js';
const { log, trace } = logger('notifications');
const { log } = logger('notifications');
const TYPE_CLOUDRON_INSTALLED = 'cloudronInstalled';
const TYPE_CLOUDRON_UPDATED = 'cloudronUpdated';

View File

@@ -33,7 +33,7 @@ import util from 'node:util';
import Provider from 'oidc-provider';
import mailpasswords from './mailpasswords.js';
const { log, trace } = logger('oidcserver');
const { log } = logger('oidcserver');
// 1. Index.vue starts the OIDC flow by navigating to /openid/auth. Webadmin sets callback url to authcallback.html + implicit flow

View File

@@ -1,6 +1,6 @@
import logger from './logger.js';
const { log, trace } = logger('once');
const { log } = logger('once');
// https://github.com/isaacs/once/blob/main/LICENSE (ISC)
function once (fn) {

View File

@@ -8,7 +8,7 @@ import path from 'node:path';
import safe from 'safetydance';
import shellModule from './shell.js';
const { log, trace } = logger('openssl');
const { log } = logger('openssl');
const shell = shellModule('openssl');

View File

@@ -13,7 +13,7 @@ import {
} from '@simplewebauthn/server';
import _ from './underscore.js';
const { log, trace } = logger('passkeys');
const { log } = logger('passkeys');
const PASSKEY_FIELDS = [ 'id', 'userId', 'credentialId', 'publicKey', 'counter', 'transports', 'name', 'creationTime', 'lastUsedTime' ].join(',');

View File

@@ -26,7 +26,7 @@ import users from './users.js';
import volumes from './volumes.js';
import _ from './underscore.js';
const { log, trace } = logger('platform');
const { log } = logger('platform');
const shell = shellModule('platform');

View File

@@ -27,7 +27,7 @@ import users from './users.js';
import tld from 'tldjs';
import tokens from './tokens.js';
const { log, trace } = logger('provision');
const { log } = logger('provision');
// we cannot use tasks since the tasks table gets overwritten when db is imported

View File

@@ -21,7 +21,7 @@ import settings from './settings.js';
import users from './users.js';
import util from 'node:util';
const { log, trace } = logger('proxyAuth');
const { log } = logger('proxyAuth');
// heavily inspired from https://gock.net/blog/2020/nginx-subrequest-authentication-server/ and https://github.com/andygock/auth-server

View File

@@ -24,7 +24,7 @@ import settings from './settings.js';
import shellModule from './shell.js';
import tasks from './tasks.js';
const { log, trace } = logger('reverseproxy');
const { log } = logger('reverseproxy');
const shell = shellModule('reverseproxy');
const NGINX_APPCONFIG_EJS = fs.readFileSync(import.meta.dirname + '/nginxconfig.ejs', { encoding: 'utf8' });

View File

@@ -7,7 +7,7 @@ import safe from 'safetydance';
import tokens from '../tokens.js';
import users from '../users.js';
const { log, trace } = logger('routes/accesscontrol');
const { log } = logger('routes/accesscontrol');
async function passwordAuth(req, res, next) {

View File

@@ -18,7 +18,7 @@ import users from '../users.js';
import { getImageContentType } from '../image-content-type.js';
import WebSocket from 'ws';
const { log, trace } = logger('routes/apps');
const { log } = logger('routes/apps');
async function load(req, res, next) {

View File

@@ -12,7 +12,7 @@ import speakeasy from 'speakeasy';
import tokens from '../tokens.js';
import users from '../users.js';
const { log, trace } = logger('routes/cloudron');
const { log } = logger('routes/cloudron');
async function login(req, res, next) {

View File

@@ -9,7 +9,7 @@ import mailServer from '../mailserver.js';
import safe from 'safetydance';
import services from '../services.js';
const { log, trace } = logger('routes/mailserver');
const { log } = logger('routes/mailserver');
async function proxyToMailContainer(port, pathname, req, res, next) {

View File

@@ -16,7 +16,7 @@ import tasks from '../../tasks.js';
import timers from 'timers/promises';
import tokens from '../../tokens.js';
const { log, trace } = logger('test/common');
const { log } = logger('test/common');
const manifest = {
'id': 'io.cloudron.test',

View File

@@ -9,7 +9,7 @@ import docker from './docker.js';
import safe from 'safetydance';
import _ from './underscore.js';
const { log, trace } = logger('scheduler');
const { log } = logger('scheduler');
const gState = {}; // appId -> { containerId, schedulerConfig (manifest+crontab), cronjobs }

View File

@@ -5,7 +5,7 @@ import database from '../database.js';
import logger from '../logger.js';
import safe from 'safetydance';
const { log, trace } = logger('backupupload');
const { log } = logger('backupupload');
// --check is used by run-tests to verify sudo access works. Caller must set BOX_ENV (e.g. BOX_ENV=test).
if (process.argv[2] === '--check') {

View File

@@ -14,7 +14,7 @@ import users from './users.js';
import util from 'node:util';
import { WebSocketServer } from 'ws';
const { log, trace } = logger('server');
const { log } = logger('server');
let gHttpServer = null;

View File

@@ -31,7 +31,7 @@ import sftp from './sftp.js';
import shellModule from './shell.js';
import superagent from '@cloudron/superagent';
const { log, trace } = logger('services');
const { log } = logger('services');
const shell = shellModule('services');
const SERVICE_STATUS_STARTING = 'starting';

View File

@@ -15,7 +15,7 @@ import services from './services.js';
import shellModule from './shell.js';
import volumes from './volumes.js';
const { log, trace } = logger('sftp');
const { log } = logger('sftp');
const shell = shellModule('sftp');
const DEFAULT_MEMORY_LIMIT = 256 * 1024 * 1024;

View File

@@ -6,7 +6,7 @@ import path from 'node:path';
import safe from 'safetydance';
import _ from './underscore.js';
const { log, trace } = logger('shell');
const { log } = logger('shell');
function lineCount(buffer) {
assert(Buffer.isBuffer(buffer));
@@ -33,7 +33,7 @@ function spawn(tag, file, args, options) {
log(`${tag}: ${file} ${args.join(' ').replace(/\n/g, '\\n')}`);
const maxLines = options.maxLines || Number.MAX_SAFE_INTEGER;
const logger = options.logger || null;
const outputLogger = options.logger || null;
const abortSignal = options.abortSignal || null; // note: we use our own handler and not the child_process one
return new Promise((resolve, reject) => {
@@ -43,13 +43,13 @@ function spawn(tag, file, args, options) {
let stdoutLineCount = 0, stderrLineCount = 0, killTimerId = null, timedOut = false, terminated = false;
cp.stdout.on('data', (data) => {
if (logger) return logger(data);
if (outputLogger) return outputLogger(data);
stdoutBuffers.push(data);
stdoutLineCount += lineCount(data);
if (stdoutLineCount >= maxLines) return cp.kill('SIGKILL');
});
cp.stderr.on('data', (data) => {
if (logger) return logger(data);
if (outputLogger) return outputLogger(data);
stderrBuffers.push(data);
stderrLineCount += lineCount(data);
if (stderrLineCount >= maxLines) return cp.kill('SIGKILL');

View File

@@ -11,7 +11,7 @@ import safe from 'safetydance';
import shellModule from '../shell.js';
import _ from '../underscore.js';
const { log, trace } = logger('storage/filesystem');
const { log } = logger('storage/filesystem');
const shell = shellModule('filesystem');

View File

@@ -8,7 +8,7 @@ import path from 'node:path';
import safe from 'safetydance';
import _ from '../underscore.js';
const { log, trace } = logger('storage/gcs');
const { log } = logger('storage/gcs');
function getBucket(config) {

View File

@@ -17,7 +17,7 @@ import safe from 'safetydance';
import { Upload } from '@aws-sdk/lib-storage';
import _ from '../underscore.js';
const { log, trace } = logger('storage/s3');
const { log } = logger('storage/s3');
function S3_NOT_FOUND(error) {
return error instanceof NoSuchKey || error instanceof NoSuchBucket;

View File

@@ -8,7 +8,7 @@ import readline from 'node:readline';
import safe from 'safetydance';
import util from 'node:util';
const { log, trace } = logger('syncer');
const { log } = logger('syncer');
function readCache(cacheFile) {

View File

@@ -18,7 +18,7 @@ import safe from 'safetydance';
import shellModule from './shell.js';
import volumes from './volumes.js';
const { log, trace } = logger('system');
const { log } = logger('system');
const shell = shellModule('system');

View File

@@ -10,7 +10,7 @@ import safe from 'safetydance';
import shellModule from './shell.js';
import _ from './underscore.js';
const { log, trace } = logger('tasks');
const { log } = logger('tasks');
const shell = shellModule('tasks');
const ESTOPPED = 'stopped';

View File

@@ -100,7 +100,7 @@ async function main() {
return process.exit(50);
}
const { log, trace } = logger('taskworker'); // import this here so that logging handler is already setup
const { log } = logger('taskworker'); // import this here so that logging handler is already setup
process.on('SIGTERM', () => {
log('Terminated');

View File

@@ -6,7 +6,7 @@ import path from 'node:path';
import paths from './paths.js';
import safe from 'safetydance';
const { log, trace } = logger('translation');
const { log } = logger('translation');
// to be used together with getTranslations() => { translations, fallback }

View File

@@ -26,7 +26,7 @@ import settings from './settings.js';
import shellModule from './shell.js';
import tasks from './tasks.js';
const { log, trace } = logger('updater');
const { log } = logger('updater');
const shell = shellModule('updater');

View File

@@ -9,7 +9,7 @@ import settings from './settings.js';
import tokens from './tokens.js';
import users from './users.js';
const { log, trace } = logger('user-directory');
const { log } = logger('user-directory');
async function getProfileConfig() {

View File

@@ -30,7 +30,7 @@ import util from 'node:util';
import validator from './validator.js';
import _ from './underscore.js';
const { log, trace } = logger('user');
const { log } = logger('user');
const AP_MAIL = 'mail';
const AP_WEBADMIN = 'webadmin';

View File

@@ -10,7 +10,7 @@ import paths from './paths.js';
import safe from 'safetydance';
import services from './services.js';
const { log, trace } = logger('volumes');
const { log } = logger('volumes');
const VOLUMES_FIELDS = [ 'id', 'name', 'hostPath', 'creationTime', 'mountType', 'mountOptionsJson' ].join(',');

View File

@@ -7,7 +7,7 @@ import path from 'node:path';
import paths from './src/paths.js';
import util from 'node:util';
const { log, trace } = logger('syslog');
const { log } = logger('syslog');
let gServer = null;