Attempt to split up even more?
This commit is contained in:
parent
2cb838d0e3
commit
263e2e32eb
12
.idea/server-master.iml
generated
Normal file
12
.idea/server-master.iml
generated
Normal 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>
|
||||||
@ -53,8 +53,15 @@ import {
|
|||||||
Stopwatch,
|
Stopwatch,
|
||||||
timePromise,
|
timePromise,
|
||||||
ElapsedTime,
|
ElapsedTime,
|
||||||
|
Channel,
|
||||||
|
Emoji,
|
||||||
|
Role,
|
||||||
|
Sticker,
|
||||||
|
VoiceState,
|
||||||
} from "@spacebar/util";
|
} from "@spacebar/util";
|
||||||
import { check } from "./instanceOf";
|
import { check } from "./instanceOf";
|
||||||
|
import { In } from "typeorm";
|
||||||
|
import guild_id from "../../api/routes/guilds/#guild_id";
|
||||||
|
|
||||||
// TODO: user sharding
|
// TODO: user sharding
|
||||||
// TODO: check privileged intents, if defined in the config
|
// TODO: check privileged intents, if defined in the config
|
||||||
@ -231,17 +238,104 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
|||||||
.getMetadata(Guild)
|
.getMetadata(Guild)
|
||||||
.columns.map((x) => [x.propertyName, true]),
|
.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) => {
|
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);
|
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();
|
const totalQueryTime = taskSw.getElapsedAndReset();
|
||||||
|
|
||||||
// We forgot to migrate user settings from the JSON column of `users`
|
// 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,
|
membersQueryTime,
|
||||||
recipientsQueryTime,
|
recipientsQueryTime,
|
||||||
queryGuildsTime,
|
queryGuildsTime,
|
||||||
|
queryGuildChannelsTime,
|
||||||
|
queryGuildEmojisTime,
|
||||||
|
queryGuildRolesTime,
|
||||||
|
queryGuildStickersTime,
|
||||||
|
queryGuildVoiceStatesTime,
|
||||||
})) {
|
})) {
|
||||||
if (subvalue) {
|
if (subvalue) {
|
||||||
val.calls.push(subkey, {
|
val.calls.push(subkey, {
|
||||||
@ -510,6 +609,8 @@ export async function onIdentify(this: WebSocket, data: Payload) {
|
|||||||
} as TraceNode);
|
} as TraceNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val.calls.push("mergeMemberGuildsTrace", mergeMemberGuildsTrace)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user