Archived
fix: log all webhook host requests
This commit is contained in:
@@ -12,7 +12,7 @@ import {
|
||||
import { formatError, requireEnv } from "../../core/contracts.js";
|
||||
import { type PublicationContext, safeFailure } from "../publication/status.js";
|
||||
import { log, pumpDeliveries, pumpOutbox } from "./handlers/workers.js";
|
||||
import { handleHttp } from "./server.js";
|
||||
import { handleHttp, observeHttpRequest } from "./server.js";
|
||||
|
||||
async function main(): Promise<void> {
|
||||
const serverUrl = validateServerUrl(requireEnv("GITEA_SERVER_URL"));
|
||||
@@ -97,6 +97,10 @@ async function main(): Promise<void> {
|
||||
retentionTimer.unref();
|
||||
|
||||
const server = createServer((request, response) => {
|
||||
observeHttpRequest(request, response, (entry) => {
|
||||
const level = entry.statusCode >= 500 ? "error" : "info";
|
||||
console.log(log(level, "HTTP request", { ...entry }));
|
||||
});
|
||||
handleHttp(request, response, {
|
||||
store,
|
||||
webhookSecret,
|
||||
|
||||
@@ -10,6 +10,36 @@ import {
|
||||
const bodyLimit = 1024 * 1024;
|
||||
class BodyTooLarge extends Error {}
|
||||
|
||||
export interface HttpRequestLog {
|
||||
method: string;
|
||||
path: string;
|
||||
statusCode: number;
|
||||
durationMs: number;
|
||||
completed: boolean;
|
||||
}
|
||||
|
||||
export function observeHttpRequest(
|
||||
request: IncomingMessage,
|
||||
response: ServerResponse,
|
||||
write: (entry: HttpRequestLog) => void,
|
||||
): void {
|
||||
const startedAt = Date.now();
|
||||
let observed = false;
|
||||
const observe = () => {
|
||||
if (observed) return;
|
||||
observed = true;
|
||||
write({
|
||||
method: request.method || "UNKNOWN",
|
||||
path: request.url || "",
|
||||
statusCode: response.statusCode,
|
||||
durationMs: Date.now() - startedAt,
|
||||
completed: response.writableFinished,
|
||||
});
|
||||
};
|
||||
response.once("finish", observe);
|
||||
response.once("close", observe);
|
||||
}
|
||||
|
||||
export async function handleHttp(
|
||||
request: IncomingMessage,
|
||||
response: ServerResponse,
|
||||
|
||||
Reference in New Issue
Block a user