better settings overrides
parent
185aa45e4f
commit
2937e85f39
|
|
@ -3,7 +3,7 @@ const Keyv = require('keyv');
|
||||||
const { KeyvFile } = require('keyv-file');
|
const { KeyvFile } = require('keyv-file');
|
||||||
const { Signale } = require('signale');
|
const { Signale } = require('signale');
|
||||||
const log = new Signale().scope('GTWY');
|
const log = new Signale().scope('GTWY');
|
||||||
const interactive = new Signale({ interactive: true, scope: 'GTWY' });
|
// const interactive = new Signale({ interactive: true, scope: 'GTWY' });
|
||||||
const stp = require('./STP');
|
const stp = require('./STP');
|
||||||
const appdata = require('./appdata');
|
const appdata = require('./appdata');
|
||||||
|
|
||||||
|
|
@ -39,7 +39,9 @@ class Gateway {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info('gateway endpoints:');
|
log.info('gateway endpoints:');
|
||||||
log.info('\t' + (await this.endpoints.get('cache')).join('\n\t'));
|
for(const endpoint of (await this.endpoints.get('cache'))) {
|
||||||
|
log.info(`\t${endpoint}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async networkTest() {
|
async networkTest() {
|
||||||
|
|
@ -54,13 +56,20 @@ class Gateway {
|
||||||
}
|
}
|
||||||
|
|
||||||
async testEndpoint(host, port) {
|
async testEndpoint(host, port) {
|
||||||
|
const log = new Signale({ scope: `${host}:${port}` });
|
||||||
|
const interactive = new Signale({ interactive: true, scope: `${host}:${port}` });
|
||||||
|
|
||||||
await new Promise(async (res, rej) => {
|
await new Promise(async (res, rej) => {
|
||||||
let pings = [];
|
let pings = [];
|
||||||
let maxPings = 10;
|
let maxPings = 100;
|
||||||
let connectionAttempts = 0;
|
let connectionAttempts = 0;
|
||||||
log.info(`Connecting to ${host}:${port}...`);
|
let wasConnected = false;
|
||||||
|
|
||||||
while (connectionAttempts < 10 && pings.length < maxPings) {
|
const done = _ => connectionAttempts === 10 || pings.length === maxPings
|
||||||
|
|
||||||
|
log.info('Starting connection test...');
|
||||||
|
|
||||||
|
while (!done()) {
|
||||||
|
|
||||||
await new Promise(async (res) => {
|
await new Promise(async (res) => {
|
||||||
const client = stp.connect({
|
const client = stp.connect({
|
||||||
|
|
@ -72,25 +81,41 @@ class Gateway {
|
||||||
client.on('error', _ => _);
|
client.on('error', _ => _);
|
||||||
|
|
||||||
client.on('ready', async () => {
|
client.on('ready', async () => {
|
||||||
|
wasConnected = true;
|
||||||
|
|
||||||
while (pings.length < maxPings) {
|
while (pings.length < maxPings) {
|
||||||
interactive.info(`[${pings.length + 1}/${maxPings}] Testing connection...`);
|
interactive.info(`[${pings.length + 1}/${maxPings}] Testing connection`);
|
||||||
pings.push(await client.ping());
|
pings.push(await client.ping());
|
||||||
// pings.push(10);
|
// await new Promise(res => setTimeout(res, 1000));
|
||||||
await new Promise(res => setTimeout(res, 100));
|
|
||||||
}
|
}
|
||||||
const average = Math.round(pings.reduce((a, v) => a + v, 0) / maxPings);
|
|
||||||
interactive.success(`Test complete. Average Ping: ${average}`)
|
|
||||||
client.tcpSocket.destroy();
|
client.tcpSocket.destroy();
|
||||||
res();
|
res();
|
||||||
});
|
});
|
||||||
|
|
||||||
client.on('close', () => {
|
client.on('close', () => {
|
||||||
|
connectionAttempts ++;
|
||||||
|
if(!done() && wasConnected) {
|
||||||
|
log.warn(`Lost connection, Retrying...`);
|
||||||
|
}
|
||||||
|
wasConnected = false;
|
||||||
res();
|
res();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pings.length === maxPings) {
|
||||||
|
const average = Math.round(pings.reduce((a, v) => a + v, 0) / maxPings);
|
||||||
|
const pingRecord = new PingRecord(average, pings.length, new Date().getTime());
|
||||||
|
const endpointRecord = new EndpointRecord(host, port, pingRecord, 'online');
|
||||||
|
|
||||||
|
await this.endpoints.set(`${host}:${port}`, endpointRecord);
|
||||||
|
|
||||||
|
interactive.success(`Test complete. Average Ping: ${average}ms`);
|
||||||
|
} else {
|
||||||
|
log.error(`Could not complete connection test`)
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,39 +1,35 @@
|
||||||
const pkg = require('./../package.json');
|
const pkg = require('./../package.json');
|
||||||
const { readFileSync, writeFileSync } = require('fs');
|
const { readFileSync, writeFileSync, existsSync } = require('fs');
|
||||||
const { ensureDirSync } = require('fs-extra');
|
const { ensureDirSync } = require('fs-extra');
|
||||||
|
const { config } = require('../package.json');
|
||||||
|
const deepmerge = require('deepmerge');
|
||||||
|
|
||||||
const appdata = require('./appdata');
|
const appdata = require('./appdata');
|
||||||
ensureDirSync(`${appdata}/valnet/relay`);
|
ensureDirSync(`${appdata}/valnet/relay`);
|
||||||
const filepath = `${appdata}/valnet/relay/config.json`;
|
const filepath = `${appdata}/valnet/relay/config.json`;
|
||||||
|
|
||||||
const configObject = {}
|
const configObject = {};
|
||||||
|
|
||||||
module.exports.config = configObject;
|
module.exports.config = configObject;
|
||||||
|
|
||||||
module.exports.write = write;
|
|
||||||
|
|
||||||
function write() {
|
|
||||||
writeFileSync(filepath, JSON.stringify(configObject, null, 2));
|
|
||||||
}
|
|
||||||
|
|
||||||
function importFromPackage() {
|
|
||||||
loadObject(pkg.config);
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadObject(obj) {
|
function loadObject(obj) {
|
||||||
for(const key in obj) {
|
for(const key in obj) {
|
||||||
configObject[key] = obj[key];
|
configObject[key] = obj[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
write();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
if(!existsSync(filepath))
|
||||||
|
writeFileSync(filepath, JSON.stringify({}, null, 2));
|
||||||
|
|
||||||
const json = readFileSync(filepath);
|
const json = readFileSync(filepath);
|
||||||
const data = JSON.parse(json);
|
const data = JSON.parse(json);
|
||||||
|
|
||||||
loadObject(data);
|
|
||||||
|
loadObject(deepmerge(config, data, {
|
||||||
|
arrayMerge: (_, sourceArray, __) => sourceArray
|
||||||
|
}));
|
||||||
|
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
importFromPackage();
|
|
||||||
}
|
}
|
||||||
11
lib/node.js
11
lib/node.js
|
|
@ -66,12 +66,15 @@ class Node extends EventEmitter {
|
||||||
// log.success('Node successfully registered!');
|
// log.success('Node successfully registered!');
|
||||||
}
|
}
|
||||||
|
|
||||||
async serviceUp({name, address, port, protocol}) {
|
async serviceUp(device) {
|
||||||
log.debug(`Found ${name} @ ${address}:${port} using ${protocol}`);
|
this.multicastDevices.push(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
async serviceDown({name, address, port, protocol}) {
|
async serviceDown(device) {
|
||||||
log.debug(`Lost ${name} @ ${address}:${port} using ${protocol}`);
|
this.multicastDevices = this.multicastDevices.filter(testDevice => {
|
||||||
|
return testDevice.host !== device.host
|
||||||
|
|| testDevice.port !== device.port
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async negotiatePort() {
|
async negotiatePort() {
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@
|
||||||
"relay": "valnet.xyz"
|
"relay": "valnet.xyz"
|
||||||
},
|
},
|
||||||
"endpoints": [
|
"endpoints": [
|
||||||
"valnet.xyz:5500"
|
"valnet.xyz:5500",
|
||||||
|
"35.196.210.135:5600"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
@ -24,6 +25,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bonjour": "^3.5.0",
|
"bonjour": "^3.5.0",
|
||||||
|
"deepmerge": "^4.2.2",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-ws": "^4.0.0",
|
"express-ws": "^4.0.0",
|
||||||
"font-ascii": "^1.2.1",
|
"font-ascii": "^1.2.1",
|
||||||
|
|
|
||||||
|
|
@ -102,7 +102,6 @@ asynckit@^0.4.0:
|
||||||
at-least-node@^1.0.0:
|
at-least-node@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
|
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
|
||||||
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
|
|
||||||
|
|
||||||
aws-sign2@~0.7.0:
|
aws-sign2@~0.7.0:
|
||||||
version "0.7.0"
|
version "0.7.0"
|
||||||
|
|
@ -321,6 +320,10 @@ deep-equal@^1.0.1:
|
||||||
object-keys "^1.1.1"
|
object-keys "^1.1.1"
|
||||||
regexp.prototype.flags "^1.2.0"
|
regexp.prototype.flags "^1.2.0"
|
||||||
|
|
||||||
|
deepmerge@^4.2.2:
|
||||||
|
version "4.2.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
|
||||||
|
|
||||||
define-properties@^1.1.3:
|
define-properties@^1.1.3:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
|
||||||
|
|
@ -664,7 +667,6 @@ fs-extra@^4.0.1:
|
||||||
fs-extra@^9.1.0:
|
fs-extra@^9.1.0:
|
||||||
version "9.1.0"
|
version "9.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
|
||||||
integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
at-least-node "^1.0.0"
|
at-least-node "^1.0.0"
|
||||||
graceful-fs "^4.2.0"
|
graceful-fs "^4.2.0"
|
||||||
|
|
@ -708,7 +710,6 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
||||||
graceful-fs@^4.2.0:
|
graceful-fs@^4.2.0:
|
||||||
version "4.2.6"
|
version "4.2.6"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
|
||||||
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
|
|
||||||
|
|
||||||
gradient-string@^1.2.0:
|
gradient-string@^1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
|
|
@ -942,7 +943,6 @@ jsonfile@^4.0.0:
|
||||||
jsonfile@^6.0.1:
|
jsonfile@^6.0.1:
|
||||||
version "6.1.0"
|
version "6.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
|
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
|
||||||
integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
universalify "^2.0.0"
|
universalify "^2.0.0"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
|
|
@ -1633,7 +1633,6 @@ universalify@^0.1.0:
|
||||||
universalify@^2.0.0:
|
universalify@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
|
resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
|
||||||
integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
|
|
||||||
|
|
||||||
unpipe@1.0.0, unpipe@~1.0.0:
|
unpipe@1.0.0, unpipe@~1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
|
|
|
||||||
Reference in New Issue