monkeytype/backend/utils/prometheus.ts

167 lines
3.7 KiB
TypeScript
Raw Normal View History

import "dotenv/config";
import { Counter, Histogram, Gauge } from "prom-client";
const auth = new Counter({
name: "api_request_auth_total",
help: "Counts authentication events",
labelNames: ["type"],
});
const result = new Counter({
name: "result_saved_total",
help: "Counts result saves",
labelNames: [
"mode",
"mode2",
"isPb",
"blindMode",
"lazyMode",
"difficulty",
"numbers",
"punctuation",
],
});
const resultLanguage = new Counter({
name: "result_language_total",
help: "Counts result langauge",
labelNames: ["language"],
});
const resultFunbox = new Counter({
name: "result_funbox_total",
help: "Counts result funbox",
labelNames: ["funbox"],
});
2022-03-13 01:29:32 +08:00
const resultWpm = new Histogram({
name: "result_wpm",
help: "Result wpm",
labelNames: ["mode", "mode2"],
buckets: [
10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 160, 170,
180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290,
],
});
const resultAcc = new Histogram({
name: "result_acc",
help: "Result accuracy",
labelNames: ["mode", "mode2"],
buckets: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
});
const resultDuration = new Histogram({
name: "result_duration",
help: "Result duration",
buckets: [
5, 10, 15, 30, 45, 60, 90, 120, 250, 500, 750, 1000, 1250, 1500, 1750, 2000,
2500, 3000,
],
});
const leaderboardUpdate = new Gauge({
name: "leaderboard_update_seconds",
help: "Leaderboard update time",
labelNames: ["language", "mode", "mode2", "step"],
});
export function incrementAuth(type: "Bearer" | "ApeKey" | "None"): void {
auth.inc({ type });
}
export function setLeaderboard(
language: string,
mode: string,
mode2: string,
times: number[]
): void {
leaderboardUpdate.set({ language, mode, mode2, step: "aggregate" }, times[0]);
leaderboardUpdate.set({ language, mode, mode2, step: "loop" }, times[1]);
leaderboardUpdate.set({ language, mode, mode2, step: "insert" }, times[2]);
leaderboardUpdate.set({ language, mode, mode2, step: "index" }, times[3]);
}
export function incrementResult(
res: MonkeyTypes.Result<MonkeyTypes.Mode>
): void {
const {
mode,
mode2,
isPb,
blindMode,
lazyMode,
difficulty,
funbox,
language,
numbers,
punctuation,
} = res;
let m2 = mode2 as string;
if (mode === "time" && ![15, 30, 60, 120].includes(parseInt(mode2))) {
m2 = "custom";
}
if (mode === "words" && ![10, 25, 50, 100].includes(parseInt(mode2))) {
m2 = "custom";
}
if (mode === "quote" || mode === "zen" || mode === "custom") m2 = mode;
result.inc({
mode,
mode2: m2,
isPb: isPb ? "true" : "false",
blindMode: blindMode ? "true" : "false",
lazyMode: lazyMode ? "true" : "false",
difficulty: difficulty || "normal",
numbers: numbers ? "true" : "false",
punctuation: punctuation ? "true" : "false",
});
resultLanguage.inc({
language: language || "english",
});
resultFunbox.inc({
funbox: funbox || "none",
});
2022-03-13 01:29:32 +08:00
resultWpm.observe(
{
mode,
mode2: m2,
},
res.wpm
);
resultAcc.observe(
{
mode,
mode2: m2,
},
res.acc
);
resultDuration.observe(res.testDuration);
}
const clientVersionsCounter = new Counter({
name: "api_client_versions",
help: "Records frequency of client versions",
labelNames: ["version"],
});
v1.14.1 (#2745) * updated default config to fix incorrect font button being highlighted * Convert account controller to ts (#2731) * using modular sdk * removing last script * replacing more code * unused code * removed unused code * removed unused code * importing auth * using analytics controller * importing auth and analytics * importing auth * updated git ignore * fixed path * removed live config from gitignore * added error message when failing to initialize firebase * added live config using live config when building production * removed unused code * fixed incorrect function use * added example config * added a step to the contributing guide * optional steps * fixed path * using example in source code so that github actions dont cry like little babies * using function correctly * using function correctly * ignoring live * removed * added action webpack config * bruce said "no-no" This reverts commit 0a1e5e1660200fe30378d36cb6778772e2f79cc8. * Fix * Add ignore * updated instructions * using correct functions * using correct function * missing parameter * using correct function * using correct function * removed ts ignores * using new functions * removed refresh * using new functions * merge fix * fixed merge * regenereated lockfile * using correct function * defaulting to the email thats already entered * storing default snap in a file * optional parameter * made parameters non optional * converted file to ts * removed unused parameters * removed unnecessary optional chaining * destructuring array * added a function to create error message * removed type * removed duplicate gitignore * removed no check Co-authored-by: Bruception <bberr022@fiu.edu> * Include dev branch in CI (#2739) * Decreased filesize and introduced chunk splitting (#2732) Rizwanmustafa * Decreased filesize * Introduce splitting for vendors * Added HTML webpack plugin for dynamic change of chunkhash and minification on production * Added bundle analyzer plugin for webpack * Prevent analyzer from opening on its own * updated contributors list * Package lock update * Created separate webpack config for analysing bundle * Standardize paths in webpack base config * Added devtool in dev webpack config * Minor issues * Based audit config off of the production config, saved exact packages and renamed some constants * Saved exact version of packages * Rename Config * Added intellisense for webpack configs * Added script for using audit config * Simple changes * Removed unnecessary cd and replaced webpack with npx wepback * added npm script accessible from root dir since audit is now a separate script, reenabled auto opening Co-authored-by: Miodec <bartnikjack@gmail.com> * Enable live reloading (#2738) bruception * Enable live reloading * Update scripts and documentation * Fix resolve * Use resolve * Fix layoutfluid timer warnings (#2740) Ferotiq * reduced date-fns import size * using inline source map so that code is debuggable * removed tinycolor2 dependency * Migrate Chart.js to 3.7.1 (#2735) DanGonite57 * Migrate Chart.js to 3.7.1 * Show funbox label with StartGraphsAtZero disabled * Fix label positioners * Include dev branch in CI (#2739) * Remove draw animation * Avoid RangeError with no data * Disable account chart initial render animation * Add temporary type assertion for options.animation * Test disabling animations via updateColors * Test re-update chart after resetting animation duration * Test dataset specific animation duration * Disable animations for now * Remove unused annotation Co-authored-by: Bruce Berrios <58147810+Bruception@users.noreply.github.com> * installed dev dependency to stop audit from complaining * removed mr mime dev dependency regenerate package-lock * not updating live burst when its disabled * using vanilla js to increase performance * updating chart once instead of 3 times * made log async * increased minimum wordset length to disable repeating words to 4 this stops infinite A B C sequences closes #2742 * increased tick padding * added some padding to stop data points from being cut off * fixed account graphs not being responsive * removed unnecessary style * updated button active color * Server version (#2746) Bruception * Add server version * typo * Fix logic * Moved to utility * Actually save version * Move logic order * updated metric name * removed unnecessary else Co-authored-by: Bruception <bberr022@fiu.edu> Co-authored-by: Bruce Berrios <58147810+Bruception@users.noreply.github.com> Co-authored-by: Rizwan Mustafa <rizwanmustafa0000@gmail.com> Co-authored-by: Evan <64989416+Ferotiq@users.noreply.github.com> Co-authored-by: DanGonite57 <danzinc57@gmail.com>
2022-03-22 04:22:47 +08:00
export function recordClientVersion(version: string): void {
clientVersionsCounter.inc({ version });
}
v1.14.1 (#2745) * updated default config to fix incorrect font button being highlighted * Convert account controller to ts (#2731) * using modular sdk * removing last script * replacing more code * unused code * removed unused code * removed unused code * importing auth * using analytics controller * importing auth and analytics * importing auth * updated git ignore * fixed path * removed live config from gitignore * added error message when failing to initialize firebase * added live config using live config when building production * removed unused code * fixed incorrect function use * added example config * added a step to the contributing guide * optional steps * fixed path * using example in source code so that github actions dont cry like little babies * using function correctly * using function correctly * ignoring live * removed * added action webpack config * bruce said "no-no" This reverts commit 0a1e5e1660200fe30378d36cb6778772e2f79cc8. * Fix * Add ignore * updated instructions * using correct functions * using correct function * missing parameter * using correct function * using correct function * removed ts ignores * using new functions * removed refresh * using new functions * merge fix * fixed merge * regenereated lockfile * using correct function * defaulting to the email thats already entered * storing default snap in a file * optional parameter * made parameters non optional * converted file to ts * removed unused parameters * removed unnecessary optional chaining * destructuring array * added a function to create error message * removed type * removed duplicate gitignore * removed no check Co-authored-by: Bruception <bberr022@fiu.edu> * Include dev branch in CI (#2739) * Decreased filesize and introduced chunk splitting (#2732) Rizwanmustafa * Decreased filesize * Introduce splitting for vendors * Added HTML webpack plugin for dynamic change of chunkhash and minification on production * Added bundle analyzer plugin for webpack * Prevent analyzer from opening on its own * updated contributors list * Package lock update * Created separate webpack config for analysing bundle * Standardize paths in webpack base config * Added devtool in dev webpack config * Minor issues * Based audit config off of the production config, saved exact packages and renamed some constants * Saved exact version of packages * Rename Config * Added intellisense for webpack configs * Added script for using audit config * Simple changes * Removed unnecessary cd and replaced webpack with npx wepback * added npm script accessible from root dir since audit is now a separate script, reenabled auto opening Co-authored-by: Miodec <bartnikjack@gmail.com> * Enable live reloading (#2738) bruception * Enable live reloading * Update scripts and documentation * Fix resolve * Use resolve * Fix layoutfluid timer warnings (#2740) Ferotiq * reduced date-fns import size * using inline source map so that code is debuggable * removed tinycolor2 dependency * Migrate Chart.js to 3.7.1 (#2735) DanGonite57 * Migrate Chart.js to 3.7.1 * Show funbox label with StartGraphsAtZero disabled * Fix label positioners * Include dev branch in CI (#2739) * Remove draw animation * Avoid RangeError with no data * Disable account chart initial render animation * Add temporary type assertion for options.animation * Test disabling animations via updateColors * Test re-update chart after resetting animation duration * Test dataset specific animation duration * Disable animations for now * Remove unused annotation Co-authored-by: Bruce Berrios <58147810+Bruception@users.noreply.github.com> * installed dev dependency to stop audit from complaining * removed mr mime dev dependency regenerate package-lock * not updating live burst when its disabled * using vanilla js to increase performance * updating chart once instead of 3 times * made log async * increased minimum wordset length to disable repeating words to 4 this stops infinite A B C sequences closes #2742 * increased tick padding * added some padding to stop data points from being cut off * fixed account graphs not being responsive * removed unnecessary style * updated button active color * Server version (#2746) Bruception * Add server version * typo * Fix logic * Moved to utility * Actually save version * Move logic order * updated metric name * removed unnecessary else Co-authored-by: Bruception <bberr022@fiu.edu> Co-authored-by: Bruce Berrios <58147810+Bruception@users.noreply.github.com> Co-authored-by: Rizwan Mustafa <rizwanmustafa0000@gmail.com> Co-authored-by: Evan <64989416+Ferotiq@users.noreply.github.com> Co-authored-by: DanGonite57 <danzinc57@gmail.com>
2022-03-22 04:22:47 +08:00
const serverVersionCounter = new Counter({
name: "api_server_version",
help: "The server's current version",
labelNames: ["version"],
});
export function recordServerVersion(serverVersion: string): void {
serverVersionCounter.inc({ version: serverVersion });
}