Skip to content

Commit

Permalink
Improve debug info
Browse files Browse the repository at this point in the history
  • Loading branch information
Markus-Rost committed Jul 24, 2024
1 parent 72c51b4 commit f6b43e0
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 31 deletions.
40 changes: 22 additions & 18 deletions dashboard/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -292,33 +292,37 @@ const server = createServer( (req, res) => {
}

if ( reqURL.pathname === '/debug' && rcscriptExists && process.env.owner.split('|').includes(sessionData.get(state).user_id) ) {
console.log( '- Dashboard: Requesting RcGcDb debug dump.' );
let site = reqURL.searchParams.get('site');
console.log( '- Dashboard: Requesting RcGcDb debug dump' + ( site ? ' for ' + site : '.' ) );
return new Promise( (resolve, reject) => {
let id = Date.now();
if ( site ) id = '-1+' + id;
let timeout = setTimeout( () => {
listenerMap.delete(timeout);
listenerMap.delete(id);
reject('Timeout');
}, 5000 ).unref();
listenerMap.set(timeout, resolve);
db.query( 'SELECT pg_notify($1, $2)', ['webhookupdates', 'DEBUG DUMP'] ).catch( dberror => {
console.log( '- Dashboard: Error while requesting the debug dump: ' + dberror );
listenerMap.delete(timeout);
clearTimeout(timeout);
reject(dberror);
} );
} ).then( body => {
listenerMap.set(id, {timeout, write, resolve});
res.writeHead(200, {
'Content-Length': Buffer.byteLength(body),
'Content-Type': 'application/json'
});
res.write( body );
db.query( 'SELECT pg_notify($1, $2)', ['webhookupdates', ( site ? 'DEBUG SITE ' + id + ' ' + site : 'DEBUG DUMP ' + id )] ).catch( dberror => {
console.log( '- Dashboard: Error while requesting the debug dump' + ( site ? ' for ' + site : '' ) + ': ' + dberror );
listenerMap.delete(id);
clearTimeout(timeout);
reject(dberror);
} );
/** @param {String} body */
function write(body) {
return res.write( body, error => {
listenerMap.delete(id);
clearTimeout(timeout);
reject(error);
} );
}
} ).then( () => {
return res.end();
}, error => {
let body = '<strong style="color: red;">Error: ' + error + '</strong>';
res.writeHead(500, {
'Content-Length': Buffer.byteLength(body),
'Content-Type': 'text/html'
});
res.write( body );
res.write( JSON.stringify( {error} ) );
return res.end();
} );
}
Expand Down
19 changes: 13 additions & 6 deletions dashboard/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ const settingsData = new Map();
const oauthVerify = new Map();

/**
* @type {Map<NodeJS.Timeout, Promise.resolve>}
* @type {Map<Number, {timeout: NodeJS.Timeout, write: (body: String) => Boolean, resolve: PromiseConstructor.resolve}>}
*/
const listenerMap = new Map();

Expand All @@ -212,11 +212,18 @@ var messageId = 1;
process.on( 'message', message => {
if ( message?.id === 'verifyUser' ) return oauthVerify.set(message.state, message.user);
if ( message?.id === 'debugresponse' ) {
listenerMap.forEach( (resolve, timeout) => {
clearTimeout(timeout);
resolve(message.data);
} );
return listenerMap.clear();
let listener = listenerMap.get(message.listener);
if ( !listener ) return;
if ( message.part === 'CHUNK' ) {
return listener.write(message.data);
}
if ( message.part === 'END' ) {
listenerMap.delete(message.listener);
clearTimeout(listener.timeout);
listener.resolve();
return;
}
return;
}
if ( message?.id ) {
if ( message.data.error ) messages.get(message.id).reject(message.data.error);
Expand Down
24 changes: 17 additions & 7 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -468,22 +468,32 @@ db.query( 'LISTEN debugresponse' ).then( () => {
db.on( 'notification', msg => {
if ( isDebug ) console.log( '- Database notification received:', msg );
if ( msg.channel !== 'debugresponse' || !msg.payload ) return;
let [type, ...payload] = msg.payload.split(' ');
let [type, part, listener, ...payload] = msg.payload.split(' ');
if ( !type || !part || !listener ) return;
if ( type === 'DUMP' ) {
if ( typeof server !== 'undefined' && server.connected ) {
return server.send( {
id: 'debugresponse',
type, part, listener,
data: payload.join(' ')
} );
};
return;
}
if ( typeof server !== 'undefined' && server.connected ) {
return server.send( {
id: 'debugresponse',
data: msg.payload
} );
};
if ( type === 'SITE' ) {
let shard = +listener.split('+')[0]
if ( Number.isNaN(shard) || shard >= manager.totalShards ) return;
if ( shard === -1 ) {
if ( typeof server !== 'undefined' && server.connected ) {
return server.send( {
id: 'debugresponse',
type, part, listener,
data: payload.join(' ')
} );
};
return;
}
}
} );


Expand Down

0 comments on commit f6b43e0

Please sign in to comment.