implemented performance profiling into some areas

This commit is contained in:
2025-12-31 12:01:03 -05:00
parent d101bf9686
commit cf8f0fbc34
3 changed files with 108 additions and 23 deletions

View File

@@ -13,6 +13,8 @@ import { MemberState } from '@app/shared/types/member';
import { toDateTime } from '@app/shared/utils/time';
import { logger } from '../services/logging/logger';
const querystring = require('querystring');
import { performance } from 'perf_hooks';
function parseJwt(token) {
return JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString());
@@ -179,28 +181,75 @@ passport.serializeUser(function (user, cb) {
});
passport.deserializeUser(function (user, cb) {
const start = performance.now();
const timings: Record<string, number> = {};
process.nextTick(async function () {
const memberID = user.memberId as number;
let con;
var userData: { id: number, name: string, roles: Role[], state: MemberState };
try {
var con = await pool.getConnection();
let userResults = await con.query(`SELECT id, name FROM members WHERE id = ?;`, [memberID])
userData = userResults[0];
let userRoles = await getUserRoles(memberID);
let t;
t = performance.now();
con = await pool.getConnection();
timings.getConnection = performance.now() - t;
t = performance.now();
const userResults = await con.query(
`SELECT id, name FROM members WHERE id = ?;`,
[memberID]
);
timings.memberQuery = performance.now() - t;
const userData: {
id: number;
name: string;
roles: Role[];
state: MemberState;
} = userResults[0];
t = performance.now();
const userRoles = await getUserRoles(memberID);
timings.roles = performance.now() - t;
userData.roles = userRoles || [];
t = performance.now();
userData.state = await getUserState(memberID);
timings.state = performance.now() - t;
// 📊 PROFILING LOG
logger.info(
'profiling',
'passport.deserializeUser completed',
{
memberId: memberID,
total_ms: performance.now() - start,
breakdown_ms: timings,
},
'profiling'
);
return cb(null, userData);
} catch (error) {
console.error(error)
logger.error(
'profiling',
'passport.deserializeUser failed',
{
memberId: memberID,
error: error instanceof Error ? error.message : String(error),
}
);
return cb(error);
} finally {
con.release();
if (con) con.release();
}
return cb(null, userData);
});
});
declare global {
namespace Express {
interface Request {