Add a repl to improve debugging on the prod server
This commit is contained in:
parent
89ab37f1bf
commit
cac5e75a99
@ -313,4 +313,12 @@ module.exports = {
|
|||||||
// '/etc/apache2/ssl/my_public_cert.crt',
|
// '/etc/apache2/ssl/my_public_cert.crt',
|
||||||
// '/etc/apache2/ssl/my_certificate_authorities_cert_chain.ca'
|
// '/etc/apache2/ssl/my_certificate_authorities_cert_chain.ca'
|
||||||
//],
|
//],
|
||||||
|
|
||||||
|
/* You can get a repl for debugging the server if you want it.
|
||||||
|
* to enable this, specify the debugReplName and then you can
|
||||||
|
* connect to it with `nc -U /tmp/repl/<your name>.sock`
|
||||||
|
* If you run multiple cryptpad servers, you need to use different
|
||||||
|
* repl names.
|
||||||
|
*/
|
||||||
|
//debugReplName: "cryptpad"
|
||||||
};
|
};
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
"express": "~4.10.1",
|
"express": "~4.10.1",
|
||||||
"nthen": "~0.1.0",
|
"nthen": "~0.1.0",
|
||||||
"pull-stream": "^3.6.1",
|
"pull-stream": "^3.6.1",
|
||||||
|
"replify": "^1.2.0",
|
||||||
"saferphore": "0.0.1",
|
"saferphore": "0.0.1",
|
||||||
"stream-to-pull-stream": "^1.7.2",
|
"stream-to-pull-stream": "^1.7.2",
|
||||||
"tweetnacl": "~0.12.2",
|
"tweetnacl": "~0.12.2",
|
||||||
|
|||||||
25
rpc.js
25
rpc.js
@ -395,8 +395,7 @@ var getHash = function (Env, publicKey, cb) {
|
|||||||
|
|
||||||
// The limits object contains storage limits for all the publicKey that have paid
|
// The limits object contains storage limits for all the publicKey that have paid
|
||||||
// To each key is associated an object containing the 'limit' value and a 'note' explaining that limit
|
// To each key is associated an object containing the 'limit' value and a 'note' explaining that limit
|
||||||
var limits = {};
|
var updateLimits = function (Env, config, publicKey, cb /*:(?string, ?any[])=>void*/) {
|
||||||
var updateLimits = function (config, publicKey, cb /*:(?string, ?any[])=>void*/) {
|
|
||||||
if (config.adminEmail === false) {
|
if (config.adminEmail === false) {
|
||||||
if (config.allowSubscriptions === false) { return; }
|
if (config.allowSubscriptions === false) { return; }
|
||||||
throw new Error("allowSubscriptions must be false if adminEmail is false");
|
throw new Error("allowSubscriptions must be false if adminEmail is false");
|
||||||
@ -461,15 +460,15 @@ var updateLimits = function (config, publicKey, cb /*:(?string, ?any[])=>void*/)
|
|||||||
response.on('end', function () {
|
response.on('end', function () {
|
||||||
try {
|
try {
|
||||||
var json = JSON.parse(str);
|
var json = JSON.parse(str);
|
||||||
limits = json;
|
Env.limits = json;
|
||||||
Object.keys(customLimits).forEach(function (k) {
|
Object.keys(customLimits).forEach(function (k) {
|
||||||
if (!isLimit(customLimits[k])) { return; }
|
if (!isLimit(customLimits[k])) { return; }
|
||||||
limits[k] = customLimits[k];
|
Env.limits[k] = customLimits[k];
|
||||||
});
|
});
|
||||||
|
|
||||||
var l;
|
var l;
|
||||||
if (userId) {
|
if (userId) {
|
||||||
var limit = limits[userId];
|
var limit = Env.limits[userId];
|
||||||
l = limit && typeof limit.limit === "number" ?
|
l = limit && typeof limit.limit === "number" ?
|
||||||
[limit.limit, limit.plan, limit.note] : [defaultLimit, '', ''];
|
[limit.limit, limit.plan, limit.note] : [defaultLimit, '', ''];
|
||||||
}
|
}
|
||||||
@ -490,7 +489,7 @@ var updateLimits = function (config, publicKey, cb /*:(?string, ?any[])=>void*/)
|
|||||||
|
|
||||||
var getLimit = function (Env, publicKey, cb) {
|
var getLimit = function (Env, publicKey, cb) {
|
||||||
var unescapedKey = unescapeKeyCharacters(publicKey);
|
var unescapedKey = unescapeKeyCharacters(publicKey);
|
||||||
var limit = limits[unescapedKey];
|
var limit = Env.limits[unescapedKey];
|
||||||
var defaultLimit = typeof(Env.defaultStorageLimit) === 'number'?
|
var defaultLimit = typeof(Env.defaultStorageLimit) === 'number'?
|
||||||
Env.defaultStorageLimit: DEFAULT_LIMIT;
|
Env.defaultStorageLimit: DEFAULT_LIMIT;
|
||||||
|
|
||||||
@ -1063,7 +1062,11 @@ type NetfluxWebsocketSrvContext_t = {
|
|||||||
)=>void
|
)=>void
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
RPC.create = function (config /*:Config_t*/, cb /*:(?Error, ?Function)=>void*/) {
|
RPC.create = function (
|
||||||
|
config /*:Config_t*/,
|
||||||
|
debuggable /*:<T>(string, T)=>T*/,
|
||||||
|
cb /*:(?Error, ?Function)=>void*/
|
||||||
|
) {
|
||||||
// load pin-store...
|
// load pin-store...
|
||||||
console.log('loading rpc module...');
|
console.log('loading rpc module...');
|
||||||
|
|
||||||
@ -1081,8 +1084,10 @@ RPC.create = function (config /*:Config_t*/, cb /*:(?Error, ?Function)=>void*/)
|
|||||||
msgStore: (undefined /*:any*/),
|
msgStore: (undefined /*:any*/),
|
||||||
pinStore: (undefined /*:any*/),
|
pinStore: (undefined /*:any*/),
|
||||||
pinnedPads: {},
|
pinnedPads: {},
|
||||||
evPinnedPadsReady: mkEvent(true)
|
evPinnedPadsReady: mkEvent(true),
|
||||||
|
limits: {}
|
||||||
};
|
};
|
||||||
|
debuggable('rpc_env', Env);
|
||||||
|
|
||||||
var Sessions = Env.Sessions;
|
var Sessions = Env.Sessions;
|
||||||
var paths = Env.paths;
|
var paths = Env.paths;
|
||||||
@ -1264,7 +1269,7 @@ RPC.create = function (config /*:Config_t*/, cb /*:(?Error, ?Function)=>void*/)
|
|||||||
Respond(e, size);
|
Respond(e, size);
|
||||||
});
|
});
|
||||||
case 'UPDATE_LIMITS':
|
case 'UPDATE_LIMITS':
|
||||||
return void updateLimits(config, safeKey, function (e, limit) {
|
return void updateLimits(Env, config, safeKey, function (e, limit) {
|
||||||
if (e) {
|
if (e) {
|
||||||
WARN(e, limit);
|
WARN(e, limit);
|
||||||
return void Respond(e);
|
return void Respond(e);
|
||||||
@ -1376,7 +1381,7 @@ RPC.create = function (config /*:Config_t*/, cb /*:(?Error, ?Function)=>void*/)
|
|||||||
};
|
};
|
||||||
|
|
||||||
var updateLimitDaily = function () {
|
var updateLimitDaily = function () {
|
||||||
updateLimits(config, undefined, function (e) {
|
updateLimits(Env, config, undefined, function (e) {
|
||||||
if (e) {
|
if (e) {
|
||||||
WARN('limitUpdate', e);
|
WARN('limitUpdate', e);
|
||||||
}
|
}
|
||||||
|
|||||||
23
server.js
23
server.js
@ -20,10 +20,25 @@ try {
|
|||||||
var websocketPort = config.websocketPort || config.httpPort;
|
var websocketPort = config.websocketPort || config.httpPort;
|
||||||
var useSecureWebsockets = config.useSecureWebsockets || false;
|
var useSecureWebsockets = config.useSecureWebsockets || false;
|
||||||
|
|
||||||
|
// This is stuff which will become available to replify
|
||||||
|
const debuggableStore = new WeakMap();
|
||||||
|
const debuggable = function (name, x) {
|
||||||
|
if (name in debuggableStore) {
|
||||||
|
try { throw new Error(); } catch (e) {
|
||||||
|
console.error('cannot add ' + name + ' more than once [' + e.stack + ']');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
debuggableStore[name] = x;
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
};
|
||||||
|
debuggable('global', global);
|
||||||
|
debuggable('config', config);
|
||||||
|
|
||||||
// support multiple storage back ends
|
// support multiple storage back ends
|
||||||
var Storage = require(config.storage||'./storage/file');
|
var Storage = require(config.storage||'./storage/file');
|
||||||
|
|
||||||
var app = Express();
|
var app = debuggable('app', Express());
|
||||||
|
|
||||||
var httpsOpts;
|
var httpsOpts;
|
||||||
|
|
||||||
@ -217,7 +232,7 @@ var loadRPC = function (cb) {
|
|||||||
if (typeof(config.rpc) === 'string') {
|
if (typeof(config.rpc) === 'string') {
|
||||||
// load pin store...
|
// load pin store...
|
||||||
var Rpc = require(config.rpc);
|
var Rpc = require(config.rpc);
|
||||||
Rpc.create(config, function (e, rpc) {
|
Rpc.create(config, debuggable, function (e, rpc) {
|
||||||
if (e) { throw e; }
|
if (e) { throw e; }
|
||||||
cb(void 0, rpc);
|
cb(void 0, rpc);
|
||||||
});
|
});
|
||||||
@ -227,3 +242,7 @@ var loadRPC = function (cb) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
loadRPC(createSocketServer);
|
loadRPC(createSocketServer);
|
||||||
|
|
||||||
|
if (config.debugReplName) {
|
||||||
|
require('replify')({ name: config.debugReplName, app: debuggableStore });
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user