chore: code cleanup

This commit is contained in:
Alexis Tyler
2020-11-30 20:55:16 +10:30
parent fe99e9a83b
commit 910f3ccf4f
7 changed files with 84 additions and 156 deletions

View File

@@ -3,7 +3,7 @@
* Written by: Alexis Tyler
*/
import request from 'request-promise';
import request from 'request-promise-native';
import { envs } from '../../envs';
import { coreLogger } from '../../log';
import { catchHandlers } from '..';

View File

@@ -2,7 +2,7 @@ import fs from 'fs';
import path from 'path';
import execa from 'execa';
import { JSONSchemaForNPMPackageJsonFiles as PackageJson} from '@schemastore/package';
import { coreLogger, log } from '../../log';
import { coreLogger } from '../../log';
import { User } from '../../types';
import { CacheManager } from '../../cache-manager';
import { cleanStdout, ensurePermission } from '../../utils';
@@ -35,7 +35,17 @@ export const getNodeService = async (user: User, namespace: string): Promise<Nod
const getUptime = async (pid: string | number) => {
const uptime = await execa('ps', ['-p', String(pid), '-o', 'etimes', '--no-headers'])
.then(cleanStdout)
.catch(() => '');
.catch(async error => {
// No clue why this failed
if (!error.stderr.includes('keyword not found')) {
return '';
}
// Retry with macos way
// Borrowed from https://stackoverflow.com/a/28856613
const command = `ps -p ${pid} -oetime= | tr '-' ':' | awk -F: '{ total=0; m=1; } { for (i=0; i < NF; i++) {total += $(NF-i)*m; m *= i >= 2 ? 24 : 60 }} {print total}'`;
return execa.command(command, { shell: true }).then(cleanStdout).catch(() => '');
});
const parsedUptime = Number.parseInt(uptime, 10);
return parsedUptime >= 0 ? parsedUptime : -1;
@@ -64,9 +74,9 @@ export const getNodeService = async (user: User, namespace: string): Promise<Nod
// We match the last column and return the first
return execa.command('ps axc').then(({stdout}) => {
const foundProcess = stdout.split(/\n/).find(line => {
const field = line.split(/\s+/)[4];
const field = line.trim().split(/\s+/)[4];
return field === namespace;
});
})?.trim();
return foundProcess ? foundProcess.split(/\s/)[0] : '';
});
}
@@ -79,6 +89,8 @@ export const getNodeService = async (user: User, namespace: string): Promise<Nod
return;
}
coreLogger.debug('Setting pid for %s to %s', namespace, pid);
// Update cache
setCachedValue('pid', pid);
@@ -137,6 +149,8 @@ export const getNodeService = async (user: User, namespace: string): Promise<Nod
const uptime = await getUptime(pid);
const online = uptime >= 1;
coreLogger.silly('%s version=%s uptime=%s online=%s', namespace, version, uptime, online);
return {
online,
uptime,

View File

@@ -228,6 +228,9 @@ startdebug() {
export $(egrep -v '^#' $node_base_directory/node-api/.env | xargs)
fi
# Print report
report
# Start node-api
ENVIRONMENT=$(echo $env) DEBUG=true node $node_base_directory/node-api/index.js
}
@@ -275,6 +278,9 @@ _install() {
tar -C $node_base_directory/${download} -xzf /boot/config/plugins/Unraid.net/unraid-${download}.tgz --strip 1
done
# Copy env file
cp $node_base_directory/node-api/.env.$env $node_base_directory/node-api/.env
# Copy across wc files
rm -rf /usr/local/emhttp/webGui/wc
mkdir -p /usr/local/emhttp/webGui/wc

View File

@@ -1,16 +1,30 @@
// If this isn't installed we'll just ignore it
try {
// Load source maps
require('source-map-support').install({
const tryRequire = (name, onFail) => {
try {
return require(name);
} catch {
onFail();
}
};
// Load source maps
const sourceMaps = tryRequire('source-map-support');
if (sourceMaps) {
sourceMaps.install({
handleUncaughtExceptions: false
});
} catch {}
}
// Ensure we're in the right starting directory
process.chdir(__dirname);
// Load .env file
require('dotenv').config();
// Load process
require('./dist/index');
require('./dist/index', () => {
// Failed to load main file
process.exit(1);
});
if (process.env.NO_DAEMON || !process.env.DEBUG) {
// Convert process into daemon

168
package-lock.json generated
View File

@@ -920,17 +920,6 @@
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
},
"@rollup/pluginutils": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
"integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
"dev": true,
"requires": {
"@types/estree": "0.0.39",
"estree-walker": "^1.0.1",
"picomatch": "^2.2.2"
}
},
"@schemastore/package": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@schemastore/package/-/package-0.0.6.tgz",
@@ -1126,12 +1115,6 @@
"integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==",
"dev": true
},
"@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
"dev": true
},
"@types/express": {
"version": "4.17.9",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.9.tgz",
@@ -2548,7 +2531,6 @@
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"optional": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
@@ -2565,7 +2547,8 @@
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
"optional": true
},
"blueimp-md5": {
"version": "2.18.0",
@@ -3259,12 +3242,6 @@
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
"integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
"cac": {
"version": "6.6.1",
"resolved": "https://registry.npmjs.org/cac/-/cac-6.6.1.tgz",
"integrity": "sha512-uhki4T3Ax68hw7Dufi0bATVAF8ayBSwOKUEJHjObPrUN4tlQ8Lf7oljpTje/mArLxYN0D743c2zJt4C1bVTCqg==",
"dev": true
},
"cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
@@ -6185,8 +6162,7 @@
"dotenv": {
"version": "8.2.0",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
"dev": true
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
},
"dotgitignore": {
"version": "2.1.0",
@@ -7245,12 +7221,6 @@
"integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true
},
"estree-walker": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
"integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
"dev": true
},
"esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -7626,8 +7596,7 @@
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"optional": true
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
},
"filename-regex": {
"version": "2.0.1",
@@ -10065,12 +10034,6 @@
"resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz",
"integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg=="
},
"joycon": {
"version": "2.2.5",
"resolved": "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz",
"integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==",
"dev": true
},
"js-string-escape": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
@@ -10443,6 +10406,17 @@
"chalk": "^4.0.0"
}
},
"logger": {
"version": "github:unraid/logger#edce88bda6926e5e4480646c69a1787669216494",
"from": "github:unraid/logger#master",
"requires": {
"ain2": "^3.0.0",
"chalk": "^4.1.0",
"get-current-line": "^6.3.0",
"number-to-color": "^0.4.1",
"redact-secrets": "github:OmgImAlexis/redact-secrets#master"
}
},
"loglevel": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz",
@@ -11175,8 +11149,7 @@
"nan": {
"version": "2.14.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
"integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
"optional": true
"integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
},
"nanoassert": {
"version": "1.1.0",
@@ -12866,17 +12839,6 @@
}
}
},
"request-promise": {
"version": "4.2.6",
"resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz",
"integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==",
"requires": {
"bluebird": "^3.5.0",
"request-promise-core": "1.1.4",
"stealthy-require": "^1.1.1",
"tough-cookie": "^2.3.3"
}
},
"request-promise-core": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
@@ -12892,6 +12854,16 @@
}
}
},
"request-promise-native": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
"integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
"requires": {
"request-promise-core": "1.1.4",
"stealthy-require": "^1.1.1",
"tough-cookie": "^2.3.3"
}
},
"require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -13025,65 +12997,6 @@
"inherits": "^2.0.1"
}
},
"rollup": {
"version": "2.33.3",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.33.3.tgz",
"integrity": "sha512-RpayhPTe4Gu/uFGCmk7Gp5Z9Qic2VsqZ040G+KZZvsZYdcuWaJg678JeDJJvJeEQXminu24a2au+y92CUWVd+w==",
"dev": true,
"requires": {
"fsevents": "~2.1.2"
}
},
"rollup-plugin-dts": {
"version": "1.4.14",
"resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-1.4.14.tgz",
"integrity": "sha512-H33aGCUbp/Lm+tbkG5gZePnuWvvaafkwh7Uh4RYJs0/ChOfWlENCby1wOn+xBVsCzpV/g/+OVYqgzVjT80dNJg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4"
}
},
"rollup-plugin-typescript2": {
"version": "0.27.3",
"resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.3.tgz",
"integrity": "sha512-gmYPIFmALj9D3Ga1ZbTZAKTXq1JKlTQBtj299DXhqYz9cL3g/AQfUvbb2UhH+Nf++cCq941W2Mv7UcrcgLzJJg==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.1.0",
"find-cache-dir": "^3.3.1",
"fs-extra": "8.1.0",
"resolve": "1.17.0",
"tslib": "2.0.1"
},
"dependencies": {
"fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"dev": true,
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"resolve": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
},
"tslib": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz",
"integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==",
"dev": true
}
}
},
"run-async": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
@@ -14637,28 +14550,6 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
"tsup": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/tsup/-/tsup-2.0.3.tgz",
"integrity": "sha512-C9sUuBKtfPeUWT2UxNti7v2ptuC8AnBp5Mj+fiCOBJP+O37sdmrohM0tGlJnYezDhbsXlIpsi7GhxfyO+lfFLA==",
"dev": true,
"requires": {
"cac": "^6.5.12",
"joycon": "^2.2.5",
"rollup": "^2.20.0",
"rollup-plugin-dts": "^1.4.7",
"rollup-plugin-typescript2": "^0.27.1",
"tslib": "^2.0.0"
},
"dependencies": {
"tslib": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz",
"integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==",
"dev": true
}
}
},
"tsutils": {
"version": "3.17.1",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
@@ -14848,10 +14739,9 @@
"integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw=="
},
"unix-dgram": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.4.tgz",
"integrity": "sha512-7tpK6x7ls7J7pDrrAU63h93R0dVhRbPwiRRCawR10cl+2e1VOvF3bHlVJc6WI1dl/8qk5He673QU+Ogv7bPNaw==",
"optional": true,
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/unix-dgram/-/unix-dgram-2.0.3.tgz",
"integrity": "sha512-Bay5CkSLcdypcBCsxvHEvaG3mftzT5FlUnRToPWEAVxwYI8NI/8zSJ/Gknlp86MPhV6hBA8I8TBsETj2tssoHQ==",
"requires": {
"bindings": "^1.3.0",
"nan": "^2.13.2"

View File

@@ -6,7 +6,7 @@
"author": "Alexis Tyler <xo@wvvw.me> (https://wvvw.me/)",
"license": "UNLICENSED",
"scripts": {
"build": "tsc",
"build": "npx tsup ./app/index.ts",
"bundle-dependencies": "bundle-dependencies update",
"copy-schemas": "cpx app/**/*.graphql dist",
"clean": "modclean --no-progress --run --path .",
@@ -59,6 +59,7 @@
"dl-tgz": "^0.7.1",
"dockerode": "^3.2.1",
"dot-prop": "^6.0.0",
"dotenv": "^8.2.0",
"execa": "^4.1.0",
"express": "^4.17.1",
"express-list-endpoints": "^5.0.0",
@@ -103,7 +104,7 @@
"pretty-ms": "^7.0.1",
"redact-secrets": "OmgImAlexis/redact-secrets#master",
"request": "^2.88.2",
"request-promise": "^4.2.6",
"request-promise-native": "^1.0.9",
"semver": "^7.3.2",
"sendmail": "^1.6.1",
"set-interval-async": "^1.0.33",
@@ -112,6 +113,7 @@
"subscriptions-transport-ws": "^0.9.18",
"systeminformation": "^4.29.3",
"tracer": "^1.1.4",
"unix-dgram": "^2.0.3",
"upcast": "^4.0.0",
"uuid": "^8.3.1",
"uuid-apikey": "^1.5.1"
@@ -137,7 +139,6 @@
"standard-version": "^9.0.0",
"supertest": "^6.0.1",
"ts-node": "9.0.0",
"tsup": "2.0.3",
"typescript": "4.0.3",
"typescript-coverage-report": "^0.1.3",
"xo": "0.33.1"
@@ -188,6 +189,7 @@
"dl-tgz",
"dockerode",
"dot-prop",
"dotenv",
"execa",
"express",
"express-list-endpoints",
@@ -207,6 +209,7 @@
"htpasswd-js",
"ini",
"lodash.get",
"logger",
"map-obj",
"merge-graphql-schemas",
"micromongo",
@@ -231,7 +234,7 @@
"pretty-ms",
"redact-secrets",
"request",
"request-promise",
"request-promise-native",
"semver",
"sendmail",
"set-interval-async",
@@ -240,8 +243,9 @@
"subscriptions-transport-ws",
"systeminformation",
"tracer",
"unix-dgram",
"upcast",
"uuid",
"uuid-apikey"
]
}
}

View File

@@ -9,7 +9,7 @@
"skipLibCheck": true,
/* Basic Options */
// "incremental": true, /* Enable incremental compilation */
"target": "es2017", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"target": "es2020", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
// "lib": [], /* Specify library files to be included in the compilation. */
"allowJs": false, /* Allow javascript files to be compiled. */