Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import helmet from "helmet";
import { getPublicKey, blindEvaluate } from "./voprf/routes";
import { gateRouter } from "./interface/gate";
import { expressErrorHandler } from "./infra/error-handler";

import { getMemoryStats } from "./infra/memory";
import { memoryLogger } from "./infra/memoryLogger";
// Express App
const app = express();

Expand All @@ -15,6 +16,7 @@ app.use(express.urlencoded({ extended: false }));
// parse application/json
app.use(express.json());

app.use(memoryLogger);
// Use default logger for now

app.use(
Expand All @@ -34,6 +36,7 @@ app.use("/ping", function (req: Request, res: Response) {
res.json({ reply: "pong" });
res.end();
});
app.get("/internal/memory", getMemoryStats);

// VOPRF endpoints
app.get("/voprf/public-key", getPublicKey);
Expand Down
1 change: 1 addition & 0 deletions src/domain/gate/proof-verification.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,5 +123,6 @@ export const assertProofValid = async (proof: SemaphoreProofShape): Promise<void
logger.warn("gate: verifyProof threw (mapping to invalid-proof 403)", error);
valid = false;
}

if (!valid) throwError({ code: 403, message: GateErrorCode.INVALID_PROOF });
};
33 changes: 33 additions & 0 deletions src/infra/memory.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { Request, Response } from "express";

export interface MemorySnapshot {
bn128EngineCached: boolean;

rssMb: number;
heapUsedMb: number;
heapTotalMb: number;
externalMb: number;
arrayBuffersMb: number;
}

const bytesToMb = (bytes: number): number =>
Number((bytes / 1024 / 1024).toFixed(2));

export const collectMemoryStats = (): MemorySnapshot => {
const memory = process.memoryUsage();
const bn128Engine = (globalThis as any).curve_bn128;
return {

bn128EngineCached: !!bn128Engine,

rssMb: bytesToMb(memory.rss),
heapUsedMb: bytesToMb(memory.heapUsed),
heapTotalMb: bytesToMb(memory.heapTotal),
externalMb: bytesToMb(memory.external),
arrayBuffersMb: bytesToMb(memory.arrayBuffers),
};
};

export const getMemoryStats = (_req: Request, res: Response): void => {
res.json(collectMemoryStats());
};
39 changes: 39 additions & 0 deletions src/infra/memoryLogger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { NextFunction, Request, Response } from "express";
import { collectMemoryStats } from "./memory";
import { logger } from "../logger";

export const memoryLogger = (
req: Request,
res: Response,
next: NextFunction
): void => {
if (req.originalUrl === "/internal/memory") {
return next();
}

const before = collectMemoryStats();
const start = Date.now();

res.on("finish", () => {
const after = collectMemoryStats();

logger.info({
method: req.method,
path: req.originalUrl,
statusCode: res.statusCode,
durationMs: Date.now() - start,

mem_before_rssMb: before.rssMb,
mem_before_heapUsedMb: before.heapUsedMb,
mem_before_externalMb: before.externalMb,

mem_after_rssMb: after.rssMb,
mem_after_heapUsedMb: after.heapUsedMb,
mem_after_externalMb: after.externalMb,

bn128Cached: after.bn128EngineCached
});
});

next();
};