Add server timing support

This commit is contained in:
2024-08-11 11:31:52 +08:00
parent 695eed54ad
commit 10eeeaf1ac
4 changed files with 41 additions and 3 deletions

View File

@@ -39,6 +39,7 @@ export type ConfigType = {
check_file_hash: boolean;
import_method: ImportMethod;
max_import_img_count: number;
enable_server_timing: boolean;
};
export enum ThumbnailMethod {
@@ -239,6 +240,9 @@ export class Config {
get max_import_img_count() {
return this._return_number("max_import_img_count") || 3;
}
get enable_server_timing() {
return this._return_bool("enable_server_timing") ?? false;
}
to_json(): ConfigType {
return {
cookies: typeof this.cookies === "string",
@@ -277,6 +281,7 @@ export class Config {
check_file_hash: this.check_file_hash,
import_method: this.import_method,
max_import_img_count: this.max_import_img_count,
enable_server_timing: this.enable_server_timing,
};
}
}

View File

@@ -13,6 +13,9 @@ const STATIC_FILES = ["/common.css", "/scrollBar.css", "/sw.js", "/sw.js.map"];
export async function handler(req: Request, ctx: FreshContext) {
const url = new URL(req.url);
const m = get_task_manager();
const enable_server_timing = m.cfg.enable_server_timing;
const start = enable_server_timing ? Date.now() : 0;
if (url.pathname == "/sw.js") {
build_sw();
}
@@ -31,7 +34,6 @@ export async function handler(req: Request, ctx: FreshContext) {
return get_file_response(file, opts);
}
if (url.pathname == "/flutter" || url.pathname.startsWith("/flutter/")) {
const m = get_task_manager();
let flutter_base = import.meta.resolve("../static/flutter").slice(7);
if (Deno.build.os === "windows") {
flutter_base = flutter_base.slice(1);
@@ -66,7 +68,6 @@ export async function handler(req: Request, ctx: FreshContext) {
return await get_file_response(p, opts);
}
if (url.pathname.startsWith("/canvaskit/")) {
const m = get_task_manager();
let flutter_base = import.meta.resolve("../static/flutter").slice(7);
if (Deno.build.os === "windows") {
flutter_base = flutter_base.slice(1);
@@ -89,5 +90,16 @@ export async function handler(req: Request, ctx: FreshContext) {
return await get_file_response(p, opts);
}
const res = await ctx.next();
if (enable_server_timing) {
if (res.status === 101) return res;
const headers = new Headers(res.headers);
const now = Date.now();
headers.append("Server-Timing", `total;dur=${now - start}`);
return new Response(res.body, {
status: res.status,
headers: headers,
statusText: res.statusText,
});
}
return res;
}

View File

@@ -59,6 +59,8 @@ function handle_auth(req: Request, ctx: FreshContext) {
export async function handler(req: Request, ctx: FreshContext) {
const m = get_task_manager();
const enable_server_timing = m.cfg.enable_server_timing;
const start = enable_server_timing ? Date.now() : 0;
if (!(handle_auth(req, ctx))) {
const headers: HeadersInit = {};
const origin = req.headers.get("origin");
@@ -67,6 +69,10 @@ export async function handler(req: Request, ctx: FreshContext) {
headers["Access-Control-Allow-Origin"] = origin;
if (c) headers["Access-Control-Allow-Credentials"] = "true";
}
if (enable_server_timing) {
const end = Date.now();
headers["Server-Timing"] = `api;dur=${end - start}`;
}
return return_error(401, "Unauthorized", 401, headers);
}
const res = await ctx.next();
@@ -86,6 +92,10 @@ export async function handler(req: Request, ctx: FreshContext) {
if (c) headers.set("Access-Control-Allow-Credentials", "true");
headers.set("Access-Control-Allow-Private-Network", "true");
}
if (enable_server_timing) {
const end = Date.now();
headers.append("Server-Timing", `api;dur=${end - start}`);
}
return new Response(null, { status: 204, headers });
} else {
if (res.status === 101) return res;
@@ -118,6 +128,10 @@ export async function handler(req: Request, ctx: FreshContext) {
}
}
}
if (enable_server_timing) {
const end = Date.now();
headers.append("Server-Timing", `api;dur=${end - start}`);
}
return new Response(res.body, {
status: res.status,
headers: headers,

View File

@@ -12,6 +12,9 @@ export const handler: Handlers = {
}
const tokens = ctx.params.token.split(",");
const m = get_task_manager();
const enable_server_timing = m.cfg.enable_server_timing;
const start = enable_server_timing ? Date.now() : 0;
const headers: HeadersInit = {};
const data: EhFiles = {};
for (const token of tokens) {
data[token] = m.db.get_files(token).map((d) => {
@@ -22,6 +25,10 @@ export const handler: Handlers = {
return d;
});
}
return return_data(data);
if (enable_server_timing) {
const end = Date.now();
headers["Server-Timing"] = `db;dur=${end - start}`;
}
return return_data(data, 200, headers);
},
};