mirror of
https://github.com/zkldi/Tachi.git
synced 2026-10-10 16:28:17 +03:00
feat: prometheus metrics (#1033)
This commit is contained in:
@@ -60,6 +60,7 @@
|
||||
"@types/bson": "1.0.11",
|
||||
"@types/node": "18.11.18",
|
||||
"@types/express-serve-static-core": "4.17.29",
|
||||
"@types/express": "4.17.13",
|
||||
"ts-node": "10.9.1",
|
||||
"mongodb": "3.6.3"
|
||||
},
|
||||
|
||||
Generated
+47
@@ -9,6 +9,7 @@ overrides:
|
||||
'@types/bson': 1.0.11
|
||||
'@types/node': 18.11.18
|
||||
'@types/express-serve-static-core': 4.17.29
|
||||
'@types/express': 4.17.13
|
||||
ts-node: 10.9.1
|
||||
mongodb: 3.6.3
|
||||
|
||||
@@ -576,6 +577,9 @@ importers:
|
||||
express-async-errors:
|
||||
specifier: 3.1.1
|
||||
version: 3.1.1(express@4.18.2)
|
||||
express-prom-bundle:
|
||||
specifier: ^7.0.0
|
||||
version: 7.0.0(prom-client@15.1.1)
|
||||
express-rate-limit:
|
||||
specifier: 5.5.1
|
||||
version: 5.5.1
|
||||
@@ -3127,6 +3131,11 @@ packages:
|
||||
aggregate-error: 3.1.0
|
||||
dev: false
|
||||
|
||||
/@opentelemetry/api@1.8.0:
|
||||
resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
dev: false
|
||||
|
||||
/@popperjs/core@2.11.6:
|
||||
resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==}
|
||||
dev: false
|
||||
@@ -4156,6 +4165,10 @@ packages:
|
||||
file-uri-to-path: 1.0.0
|
||||
dev: false
|
||||
|
||||
/bintrees@1.0.2:
|
||||
resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==}
|
||||
dev: false
|
||||
|
||||
/bl@2.2.1:
|
||||
resolution: {integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==}
|
||||
dependencies:
|
||||
@@ -5959,6 +5972,21 @@ packages:
|
||||
express: 4.18.2
|
||||
dev: false
|
||||
|
||||
/express-prom-bundle@7.0.0(prom-client@15.1.1):
|
||||
resolution: {integrity: sha512-VwVaCyGBGHkHdecpTqRdW1Jm2fXK8weCUKjGjNWorc9g4M+cZ3xoj+N9uQzfRWfIPXJG5QOaiAziOIalQzMwgA==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
prom-client: '>=15.0.0'
|
||||
dependencies:
|
||||
'@types/express': 4.17.13
|
||||
express: 4.18.2
|
||||
on-finished: 2.4.1
|
||||
prom-client: 15.1.1
|
||||
url-value-parser: 2.2.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/express-rate-limit@5.5.1:
|
||||
resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==}
|
||||
dev: false
|
||||
@@ -8771,6 +8799,14 @@ packages:
|
||||
fromentries: 1.3.2
|
||||
dev: true
|
||||
|
||||
/prom-client@15.1.1:
|
||||
resolution: {integrity: sha512-GVA2H96QCg2q71rjc3VYvSrVG7OpnJxyryC7dMzvfJfpJJHzQVwF3TJLfHzKORcwJpElWs1TwXLthlJAFJxq2A==}
|
||||
engines: {node: ^16 || ^18 || >=20}
|
||||
dependencies:
|
||||
'@opentelemetry/api': 1.8.0
|
||||
tdigest: 0.1.2
|
||||
dev: false
|
||||
|
||||
/promise@7.3.1:
|
||||
resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==}
|
||||
dependencies:
|
||||
@@ -10264,6 +10300,12 @@ packages:
|
||||
diff: 4.0.2
|
||||
dev: true
|
||||
|
||||
/tdigest@0.1.2:
|
||||
resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==}
|
||||
dependencies:
|
||||
bintrees: 1.0.2
|
||||
dev: false
|
||||
|
||||
/terser@5.16.1:
|
||||
resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==}
|
||||
engines: {node: '>=10'}
|
||||
@@ -10675,6 +10717,11 @@ packages:
|
||||
resolution: {integrity: sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A==}
|
||||
dev: false
|
||||
|
||||
/url-value-parser@2.2.0:
|
||||
resolution: {integrity: sha512-yIQdxJpgkPamPPAPuGdS7Q548rLhny42tg8d4vyTNzFqvOnwqrgHXvgehT09U7fwrzxi3RxCiXjoNUNnNOlQ8A==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
dev: false
|
||||
|
||||
/use-isomorphic-layout-effect@1.1.2(@types/react@17.0.13)(react@17.0.2):
|
||||
resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==}
|
||||
peerDependencies:
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
"dotenv": "16.0.0",
|
||||
"express": "4.18.2",
|
||||
"express-async-errors": "3.1.1",
|
||||
"express-prom-bundle": "^7.0.0",
|
||||
"express-rate-limit": "5.5.1",
|
||||
"express-session": "1.17.2",
|
||||
"fast-json-stable-hash": "1.0.3",
|
||||
|
||||
@@ -83,6 +83,7 @@ export interface TachiServerConfig {
|
||||
OPTIONS_ALWAYS_SUCCEEDS?: boolean;
|
||||
USE_EXTERNAL_SCORE_IMPORT_WORKER: boolean;
|
||||
EXTERNAL_SCORE_IMPORT_WORKER_CONCURRENCY?: integer;
|
||||
ENABLE_METRICS: boolean;
|
||||
SEEDS_CONFIG?: {
|
||||
REPO_URL: string;
|
||||
USER_NAME: string | null;
|
||||
@@ -176,6 +177,7 @@ const err = p(config, {
|
||||
USE_EXTERNAL_SCORE_IMPORT_WORKER: "*boolean",
|
||||
EXTERNAL_SCORE_IMPORT_WORKER_CONCURRENCY: p.optional(p.isPositiveInteger),
|
||||
ALLOW_RUNNING_OFFLINE: "*boolean",
|
||||
ENABLE_METRICS: "*boolean",
|
||||
EMAIL_CONFIG: p.optional({
|
||||
FROM: "string",
|
||||
DKIM: "*object",
|
||||
@@ -273,6 +275,7 @@ tachiServerConfig.MAX_RIVALS ??= 5;
|
||||
tachiServerConfig.MAX_FOLLOWING_AMOUNT ??= 1_000;
|
||||
tachiServerConfig.USE_EXTERNAL_SCORE_IMPORT_WORKER ??= false;
|
||||
tachiServerConfig.TACHI_CONFIG.SIGNUPS_ENABLED ??= true;
|
||||
tachiServerConfig.ENABLE_METRICS ??= false;
|
||||
|
||||
export const TachiConfig = tachiServerConfig.TACHI_CONFIG;
|
||||
export const ServerConfig = tachiServerConfig;
|
||||
|
||||
@@ -7,6 +7,7 @@ import "express-async-errors";
|
||||
import { RequestLoggerMiddleware } from "./middleware/request-logger";
|
||||
import mainRouter from "./router/router";
|
||||
import connectRedis from "connect-redis";
|
||||
import ExpressPromBundle from "express-prom-bundle";
|
||||
import expressSession from "express-session";
|
||||
import { RedisClient } from "external/redis/redis";
|
||||
import helmet from "helmet";
|
||||
@@ -84,6 +85,10 @@ if (Environment.nodeEnv !== "production" && IsNonEmptyString(ServerConfig.CLIENT
|
||||
next();
|
||||
});
|
||||
|
||||
if (ServerConfig.ENABLE_METRICS) {
|
||||
app.use(ExpressPromBundle({ includeMethod: true, includePath: true }));
|
||||
}
|
||||
|
||||
// hack to allow all OPTIONS requests. Remember that this setting should not be on in production!
|
||||
if (ServerConfig.OPTIONS_ALWAYS_SUCCEEDS === true) {
|
||||
app.options("*", (req, res) => res.send());
|
||||
|
||||
Reference in New Issue
Block a user