Attempt to split up even more?

This commit is contained in:
Rory& 2025-09-09 05:08:03 +02:00
parent 2cb838d0e3
commit 263e2e32eb
2 changed files with 115 additions and 2 deletions

12
.idea/server-master.iml generated Normal file
View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@ -53,8 +53,15 @@ import {
Stopwatch,
timePromise,
ElapsedTime,
Channel,
Emoji,
Role,
Sticker,
VoiceState,
} from "@spacebar/util";
import { check } from "./instanceOf";
import { In } from "typeorm";
import guild_id from "../../api/routes/guilds/#guild_id";
// TODO: user sharding
// TODO: check privileged intents, if defined in the config
@ -231,17 +238,104 @@ export async function onIdentify(this: WebSocket, data: Payload) {
.getMetadata(Guild)
.columns.map((x) => [x.propertyName, true]),
),
relations: ["channels", "emojis", "roles", "stickers", "voice_states"],
// relations: ["channels", "emojis", "roles", "stickers", "voice_states"],
}),
),
),
);
const guildIds = memberGuilds.map((g) => g.id);
// select relations
const [
{ result: memberGuildChannels, elapsed: queryGuildChannelsTime },
{ result: memberGuildEmojis, elapsed: queryGuildEmojisTime },
{ result: memberGuildRoles, elapsed: queryGuildRolesTime },
{ result: memberGuildStickers, elapsed: queryGuildStickersTime },
{ result: memberGuildVoiceStates, elapsed: queryGuildVoiceStatesTime },
] = await Promise.all([
timePromise(() =>
Channel.find({
where: { guild_id: In(guildIds) },
order: { guild_id: "ASC" },
}),
),
timePromise(() =>
Emoji.find({
where: { guild_id: In(guildIds) },
order: { guild_id: "ASC" },
}),
),
timePromise(() =>
Role.find({
where: { guild_id: In(guildIds) },
order: { guild_id: "ASC" },
}),
),
timePromise(() =>
Sticker.find({
where: { guild_id: In(guildIds) },
order: { guild_id: "ASC" },
}),
),
timePromise(() =>
VoiceState.find({
where: { guild_id: In(guildIds) },
order: { guild_id: "ASC" },
}),
),
]);
const mergeMemberGuildsTrace: TraceNode = {
micros: 0,
calls: [],
};
members.forEach((m) => {
const sw = Stopwatch.startNew();
const totalSw = Stopwatch.startNew();
const trace: TraceNode = {
micros: 0,
calls: [],
};
const g = memberGuilds.find((mg) => mg.id === m.guild_id);
if (g) m.guild = g;
if (g) {
m.guild = g;
trace.calls.push("findGuild", { micros: sw.getElapsedAndReset().totalMicroseconds });
//channels
g.channels = memberGuildChannels.filter((c) => c.guild_id === m.guild_id);
trace.calls.push("filterChannels", { micros: sw.getElapsedAndReset().totalMicroseconds });
//emojis
g.emojis = memberGuildEmojis.filter((e) => e.guild_id === m.guild_id);
trace.calls.push("filterEmojis", { micros: sw.getElapsedAndReset().totalMicroseconds });
//roles
g.roles = memberGuildRoles.filter((r) => r.guild_id === m.guild_id);
trace.calls.push("filterRoles", { micros: sw.getElapsedAndReset().totalMicroseconds });
//stickers
g.stickers = memberGuildStickers.filter((s) => s.guild_id === m.guild_id);
trace.calls.push("filterStickers", { micros: sw.getElapsedAndReset().totalMicroseconds });
//voice states
g.voice_states = memberGuildVoiceStates.filter((v) => v.guild_id === m.guild_id);
trace.calls.push("filterVoiceStates", { micros: sw.getElapsedAndReset().totalMicroseconds });
//total
trace.micros = totalSw.elapsed().totalMicroseconds;
mergeMemberGuildsTrace.calls!.push(`guild_${m.guild_id}`, trace);
} else {
console.error(`[Gateway] Member ${m.id} has invalid guild_id ${m.guild_id}`);
mergeMemberGuildsTrace.calls!.push(`guild_~~${m.guild_id}~~`, trace);
}
});
for (const call of mergeMemberGuildsTrace.calls!) {
mergeMemberGuildsTrace.micros += (call as { micros: number }).micros;
}
const totalQueryTime = taskSw.getElapsedAndReset();
// We forgot to migrate user settings from the JSON column of `users`
@ -503,6 +597,11 @@ export async function onIdentify(this: WebSocket, data: Payload) {
membersQueryTime,
recipientsQueryTime,
queryGuildsTime,
queryGuildChannelsTime,
queryGuildEmojisTime,
queryGuildRolesTime,
queryGuildStickersTime,
queryGuildVoiceStatesTime,
})) {
if (subvalue) {
val.calls.push(subkey, {
@ -510,6 +609,8 @@ export async function onIdentify(this: WebSocket, data: Payload) {
} as TraceNode);
}
}
val.calls.push("mergeMemberGuildsTrace", mergeMemberGuildsTrace)
}
}
}