3
0
Fork 0
mirror of https://github.com/ZeppelinBot/Zeppelin.git synced 2025-05-10 12:25:02 +00:00

debug: log query counts based on operation and table

This commit is contained in:
Dragory 2021-11-02 20:54:05 +02:00
parent 94b21287ad
commit 0064d8fe3e
No known key found for this signature in database
GPG key ID: 5F387BA66DF8AAC1
4 changed files with 40 additions and 11 deletions

View file

@ -1,5 +1,7 @@
import { Connection, createConnection } from "typeorm";
import { SimpleError } from "../SimpleError";
import connectionOptions from "../../ormconfig";
import { QueryLogger } from "./queryLogger";
let connectionPromise: Promise<Connection>;
@ -7,7 +9,11 @@ export let connection: Connection;
export function connect() {
if (!connectionPromise) {
connectionPromise = createConnection().then((newConnection) => {
connectionPromise = createConnection({
...(connectionOptions as any),
logging: ["query", "error"],
logger: new QueryLogger(),
}).then((newConnection) => {
// Verify the DB timezone is set to UTC
return newConnection.query("SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP) AS tz").then((r) => {
if (r[0].tz !== "00:00:00") {

View file

@ -17,7 +17,7 @@ import { RecoverablePluginError } from "./RecoverablePluginError";
import { SimpleError } from "./SimpleError";
import { ZeppelinGlobalConfig, ZeppelinGuildConfig } from "./types";
import { startUptimeCounter } from "./uptime";
import { errorMessage, isDiscordAPIError, isDiscordHTTPError, SECONDS, sleep, successMessage } from "./utils";
import { errorMessage, isDiscordAPIError, isDiscordHTTPError, MINUTES, SECONDS, sleep, successMessage } from "./utils";
import { loadYamlSafely } from "./utils/loadYamlSafely";
import { DecayingCounter } from "./utils/DecayingCounter";
import { PluginNotLoadedError } from "knub/dist/plugins/PluginNotLoadedError";
@ -35,6 +35,7 @@ import { setProfiler } from "./profiler";
import { enableProfiling } from "./utils/easyProfiler";
import { runPhishermanCacheCleanupLoop, runPhishermanReportingLoop } from "./data/loops/phishermanLoops";
import { hasPhishermanMasterAPIKey } from "./data/Phisherman";
import { consumeQueryStats } from "./data/queryLogger";
if (!process.env.KEY) {
// tslint:disable-next-line:no-console
@ -388,6 +389,17 @@ connect().then(async () => {
lowestGlobalRemaining = Infinity;
}, 15000);
setInterval(() => {
const queryStatsMap = consumeQueryStats();
const entries = Array.from(queryStatsMap.entries());
entries.sort((a, b) => b[1] - a[1]);
const topEntriesStr = entries
.slice(0, 5)
.map(([key, count]) => `${count}x ${key}`)
.join("\n");
console.log(`Top query entries in the past 5 minutes:\n${topEntriesStr}`);
}, 5 * MINUTES);
bot.initialize();
logger.info("Bot Initialized");
logger.info("Logging in...");