From f582640e8e981a968181e244ce495cc83719206c Mon Sep 17 00:00:00 2001 From: Dragory <2606411+Dragory@users.noreply.github.com> Date: Tue, 5 Oct 2021 23:54:52 +0300 Subject: [PATCH] debug: more profiling for Automod --- .../plugins/Automod/functions/runAutomod.ts | 9 +++++++++ backend/src/utils/easyProfiler.ts | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/backend/src/plugins/Automod/functions/runAutomod.ts b/backend/src/plugins/Automod/functions/runAutomod.ts index 03d884e5..736a14c0 100644 --- a/backend/src/plugins/Automod/functions/runAutomod.ts +++ b/backend/src/plugins/Automod/functions/runAutomod.ts @@ -7,6 +7,7 @@ import { availableTriggers } from "../triggers/availableTriggers"; import { AutomodContext, AutomodPluginType } from "../types"; import { checkAndUpdateCooldown } from "./checkAndUpdateCooldown"; import { performance } from "perf_hooks"; +import { calculateBlocking } from "../../../utils/easyProfiler"; export async function runAutomod(pluginData: GuildPluginData, context: AutomodContext) { const userId = context.user?.id || context.member?.id || context.message?.user_id; @@ -53,12 +54,20 @@ export async function runAutomod(pluginData: GuildPluginData, const triggerStartTime = performance.now(); const trigger = availableTriggers[triggerName]; + const getBlockingTime = calculateBlocking(); matchResult = await trigger.match({ ruleName, pluginData, context, triggerConfig, }); + const blockingTime = getBlockingTime(); + pluginData + .getKnubInstance() + .profiler.addDataPoint( + `automod:${pluginData.guild.id}:${ruleName}:triggers:${triggerName}:blocking`, + blockingTime, + ); if (matchResult) { contexts = [context, ...(matchResult.extraContexts || [])]; diff --git a/backend/src/utils/easyProfiler.ts b/backend/src/utils/easyProfiler.ts index 8392aceb..18f74c45 100644 --- a/backend/src/utils/easyProfiler.ts +++ b/backend/src/utils/easyProfiler.ts @@ -1,5 +1,6 @@ import { Profiler } from "knub/dist/Profiler"; import { performance } from "perf_hooks"; +import { SECONDS } from "../utils"; export const startProfiling = (profiler: Profiler, key: string) => { const startTime = performance.now(); @@ -7,3 +8,21 @@ export const startProfiling = (profiler: Profiler, key: string) => { profiler.addDataPoint(key, performance.now() - startTime); }; }; + +export const calculateBlocking = (coarseness = 10) => { + let last = performance.now(); + let result = 0; + const interval = setInterval(() => { + const now = performance.now(); + const blockedTime = Math.max(0, now - last - coarseness); + result += blockedTime; + last = now; + }, coarseness); + + setTimeout(() => clearInterval(interval), 10 * SECONDS); + + return () => { + clearInterval(interval); + return result; + }; +};