From 80e8f05358a150b4596f9d9efb2bfd2750641067 Mon Sep 17 00:00:00 2001 From: Rory& Date: Wed, 17 Dec 2025 23:55:42 +0100 Subject: [PATCH] Reorganise traces? --- src/gateway/opcodes/Identify.ts | 53 +++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/src/gateway/opcodes/Identify.ts b/src/gateway/opcodes/Identify.ts index a18f4350a..9ed6b28f4 100644 --- a/src/gateway/opcodes/Identify.ts +++ b/src/gateway/opcodes/Identify.ts @@ -52,6 +52,7 @@ import { UserSettingsProtos, generateToken, CurrentTokenFormatVersion, + Relationship, } from "@spacebar/util"; import { check } from "./instanceOf"; import { In } from "typeorm"; @@ -88,8 +89,9 @@ export async function onIdentify(this: WebSocket, data: Payload) { const { result: tokenData, elapsed: checkTokenTime } = await timePromise(() => checkToken(identify.token, { - relations: ["relationships", "relationships.to", "settings"], - select: [...PrivateUserProjection, "relationships", "rights"], + // relations: ["relationships", "relationships.to", "settings"], + // select: [...PrivateUserProjection, "relationships", "rights"], + select: [...PrivateUserProjection, "rights"], }), ); @@ -159,6 +161,9 @@ export async function onIdentify(this: WebSocket, data: Payload) { const [ { elapsed: sessionSaveTime }, { result: sessions, elapsed: sessionQueryTime }, + { result: relationships, elapsed: relationshipQueryTime }, + { result: settings, elapsed: settingsQueryTime }, + { result: settingsProtos, elapsed: settingsProtosQueryTime }, { result: application, elapsed: applicationQueryTime }, { result: read_states, elapsed: read_statesQueryTime }, { result: members, elapsed: membersQueryTime }, @@ -171,6 +176,18 @@ export async function onIdentify(this: WebSocket, data: Payload) { where: { user_id: this.user_id, is_admin_session: false }, }), ), + timePromise(() => + Relationship.find({ + where: { from_id: this.user_id }, + relations: ["to"], + }), + ), + timePromise(() => UserSettings.getOrDefault(this.user_id)), + timePromise(() => + UserSettingsProtos.findOne({ + where: { user_id: this.user_id }, + }), + ), timePromise(() => Application.findOne({ where: { id: this.user_id }, @@ -246,6 +263,8 @@ export async function onIdentify(this: WebSocket, data: Payload) { ), ]); + const userMetaQueryTime = taskSw.getElapsedAndReset(); + const { result: memberGuilds, elapsed: queryGuildsTime } = await timePromise(() => Promise.all( members.map((m) => @@ -265,18 +284,12 @@ export async function onIdentify(this: WebSocket, data: Payload) { // select relations const [ - { result: settingsProtos, elapsed: settingsProtosQueryTime }, { result: memberGuildChannels, elapsed: queryGuildChannelsTime }, { result: memberGuildEmojis, elapsed: queryGuildEmojisTime }, { result: memberGuildRoles, elapsed: queryGuildRolesTime }, { result: memberGuildStickers, elapsed: queryGuildStickersTime }, { result: memberGuildVoiceStates, elapsed: queryGuildVoiceStatesTime }, ] = await Promise.all([ - timePromise(() => - UserSettingsProtos.findOne({ - where: { user_id: this.user_id }, - }), - ), timePromise(() => Channel.find({ where: { guild_id: In(guildIds) }, @@ -591,6 +604,7 @@ export async function onIdentify(this: WebSocket, data: Payload) { userQueryTime, validateIntentsAndShardingTime, createSessionTime, + userMetaQueryTime, totalQueryTime, createUserSettingsTime, mergedMembersTime, @@ -608,7 +622,28 @@ export async function onIdentify(this: WebSocket, data: Payload) { if (value) { const val = { micros: value.totalMicroseconds } as { micros: number; calls: TraceNode[] }; _trace![1].calls.push(key, val); - if (key === "totalQueryTime") { + if (key === "userMetaQueryTime") { + val.calls = []; + for (const [subkey, subvalue] of Object.entries({ + sessionSaveTime, + sessionQueryTime, + relationshipQueryTime, + settingsQueryTime, + settingsProtosQueryTime, + applicationQueryTime, + read_statesQueryTime, + membersQueryTime, + recipientsQueryTime, + })) { + if (subvalue) { + val.calls.push(subkey, { + micros: subvalue.totalMicroseconds, + } as TraceNode); + } + } + + val.calls.push("mergeMemberGuildsTrace", mergeMemberGuildsTrace); + } else if (key === "totalQueryTime") { val.calls = []; for (const [subkey, subvalue] of Object.entries({ sessionSaveTime,