mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-06 07:12:12 +03:00
* chore: create release/v3.6.0 branch * fix: add row count limits to prevent DB bloat and handle HTML error responses (#1104) Integrated into release/v3.6.0 * fix combo smoke test payload for thinking models (#1105) Integrated into release/v3.6.0 * fix: improve Android/Termux ARM64 support for better-sqlite3 (#1107) Integrated into release/v3.6.0 * chore: finalize CHANGELOG and sync versions for v3.6.0 * fix(tests): align CI tests with v3.6.0 changes - compliance: match new cleanupExpiredLogs return shape (trimmed/maxRows) - model-sync: accept masked email in account field - e2e: allow 401/403/307 for auth-protected /api/providers endpoint --------- Co-authored-by: diegosouzapw <diegosouzapw@users.noreply.github.com> Co-authored-by: Paijo <14921983+oyi77@users.noreply.github.com> Co-authored-by: Randi <55005611+rdself@users.noreply.github.com> Co-authored-by: Suhayli <73960279+Suhay1i@users.noreply.github.com>
82 lines
2.6 KiB
TypeScript
82 lines
2.6 KiB
TypeScript
import path from "path";
|
|
|
|
const DEFAULT_APP_LOG_RETENTION_DAYS = 7;
|
|
const DEFAULT_CALL_LOG_RETENTION_DAYS = 7;
|
|
const DEFAULT_APP_LOG_MAX_SIZE = 50 * 1024 * 1024;
|
|
const DEFAULT_APP_LOG_MAX_FILES = 20;
|
|
const DEFAULT_CALL_LOG_MAX_ENTRIES = 10000;
|
|
const DEFAULT_CALL_LOGS_TABLE_MAX_ROWS = 100000;
|
|
const DEFAULT_PROXY_LOGS_TABLE_MAX_ROWS = 100000;
|
|
const DEFAULT_APP_LOG_PATH = path.join(process.cwd(), "logs", "application", "app.log");
|
|
|
|
function parsePositiveInt(value: string | undefined, fallback: number): number {
|
|
if (!value) return fallback;
|
|
const parsed = Number.parseInt(value, 10);
|
|
return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
|
|
}
|
|
|
|
export function parseFileSize(raw: string | undefined): number {
|
|
if (!raw) return DEFAULT_APP_LOG_MAX_SIZE;
|
|
const match = raw.match(/^(\d+)\s*(k|m|g|kb|mb|gb)?$/i);
|
|
if (!match) return DEFAULT_APP_LOG_MAX_SIZE;
|
|
const num = parseInt(match[1], 10);
|
|
const unit = (match[2] || "").toLowerCase();
|
|
switch (unit) {
|
|
case "k":
|
|
case "kb":
|
|
return num * 1024;
|
|
case "m":
|
|
case "mb":
|
|
return num * 1024 * 1024;
|
|
case "g":
|
|
case "gb":
|
|
return num * 1024 * 1024 * 1024;
|
|
default:
|
|
return num;
|
|
}
|
|
}
|
|
|
|
export function getAppLogToFile(): boolean {
|
|
return process.env.APP_LOG_TO_FILE !== "false";
|
|
}
|
|
|
|
export function getAppLogFilePath(): string {
|
|
return process.env.APP_LOG_FILE_PATH || DEFAULT_APP_LOG_PATH;
|
|
}
|
|
|
|
export function getAppLogMaxFileSize(): number {
|
|
return parseFileSize(process.env.APP_LOG_MAX_FILE_SIZE);
|
|
}
|
|
|
|
export function getAppLogRetentionDays(): number {
|
|
return parsePositiveInt(process.env.APP_LOG_RETENTION_DAYS, DEFAULT_APP_LOG_RETENTION_DAYS);
|
|
}
|
|
|
|
export function getCallLogRetentionDays(): number {
|
|
return parsePositiveInt(process.env.CALL_LOG_RETENTION_DAYS, DEFAULT_CALL_LOG_RETENTION_DAYS);
|
|
}
|
|
|
|
export function getAppLogMaxFiles(): number {
|
|
return parsePositiveInt(process.env.APP_LOG_MAX_FILES, DEFAULT_APP_LOG_MAX_FILES);
|
|
}
|
|
|
|
export function getCallLogMaxEntries(): number {
|
|
return parsePositiveInt(process.env.CALL_LOG_MAX_ENTRIES, DEFAULT_CALL_LOG_MAX_ENTRIES);
|
|
}
|
|
|
|
export function getCallLogsTableMaxRows(): number {
|
|
return parsePositiveInt(process.env.CALL_LOGS_TABLE_MAX_ROWS, DEFAULT_CALL_LOGS_TABLE_MAX_ROWS);
|
|
}
|
|
|
|
export function getProxyLogsTableMaxRows(): number {
|
|
return parsePositiveInt(process.env.PROXY_LOGS_TABLE_MAX_ROWS, DEFAULT_PROXY_LOGS_TABLE_MAX_ROWS);
|
|
}
|
|
|
|
export function getAppLogLevel(defaultLevel: string): string {
|
|
return process.env.APP_LOG_LEVEL || defaultLevel;
|
|
}
|
|
|
|
export function getAppLogFormat(defaultFormat: string): string {
|
|
return process.env.APP_LOG_FORMAT || defaultFormat;
|
|
}
|