mirror of
https://github.com/lifegpc/eh-downloader.git
synced 2026-06-13 09:08:55 +08:00
feat: Add log optimization option and enhance logging configuration
This commit is contained in:
6
api.yml
6
api.yml
@@ -2635,6 +2635,12 @@ paths:
|
||||
type: string
|
||||
format: date-time
|
||||
description: End time for log deletion
|
||||
- name: optimize
|
||||
in: query
|
||||
schema:
|
||||
type: boolean
|
||||
default: true
|
||||
description: Whether to optimize the log after clearing
|
||||
responses:
|
||||
"200":
|
||||
description: OK
|
||||
|
||||
@@ -41,6 +41,8 @@ export type ConfigType = {
|
||||
max_import_img_count: number;
|
||||
enable_server_timing: boolean;
|
||||
thumbnail_format: ThumbnailFormat;
|
||||
/** Enable logging stack for all log levels */
|
||||
logging_stack: boolean;
|
||||
};
|
||||
|
||||
export enum ThumbnailMethod {
|
||||
@@ -254,6 +256,9 @@ export class Config {
|
||||
get enable_server_timing() {
|
||||
return this._return_bool("enable_server_timing") ?? false;
|
||||
}
|
||||
get logging_stack() {
|
||||
return this._return_bool("logging_stack") ?? false;
|
||||
}
|
||||
to_json(): ConfigType {
|
||||
return {
|
||||
cookies: typeof this.cookies === "string",
|
||||
@@ -294,6 +299,7 @@ export class Config {
|
||||
max_import_img_count: this.max_import_img_count,
|
||||
enable_server_timing: this.enable_server_timing,
|
||||
thumbnail_format: this.thumbnail_format,
|
||||
logging_stack: this.logging_stack,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
2
main.ts
2
main.ts
@@ -74,7 +74,7 @@ if (cmd == CMD.Unknown) {
|
||||
}
|
||||
|
||||
const settings = await load_settings(args.config);
|
||||
await base_logger.init(settings.db_path || settings.base);
|
||||
await base_logger.init(settings);
|
||||
if (!check_file_permissions(settings.base)) {
|
||||
throw Error("Can not aceess download loaction.");
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { Handlers } from "$fresh/server.ts";
|
||||
import { return_data, return_error } from "../../server/utils.ts";
|
||||
import { User, UserPermission } from "../../db.ts";
|
||||
import { get_string, parse_int } from "../../server/parse_form.ts";
|
||||
import { get_string, parse_bool, parse_int } from "../../server/parse_form.ts";
|
||||
import { base_logger, LogLevel } from "../../utils/logger.ts";
|
||||
|
||||
export const handler: Handlers = {
|
||||
@@ -33,7 +33,9 @@ export const handler: Handlers = {
|
||||
base_logger.log("Failed to parse end_time:", e);
|
||||
return return_error(1, "Failed to parse end_time.");
|
||||
}
|
||||
const optimize = await parse_bool(form.get("optimize"), true);
|
||||
base_logger.clear(typ, min_level, max_level, deleted_level, end_time);
|
||||
if (optimize) base_logger.optimize();
|
||||
return return_data(true);
|
||||
},
|
||||
async GET(req, ctx) {
|
||||
|
||||
@@ -30,7 +30,7 @@ const renderFn: RenderFunction = (ctx, render) => {
|
||||
export async function startServer(path: string) {
|
||||
cfg_path = path;
|
||||
const cfg = await load_settings(path);
|
||||
await base_logger.init(cfg.db_path || cfg.base);
|
||||
await base_logger.init(cfg);
|
||||
task_manager = new TaskManager(cfg);
|
||||
await task_manager.init();
|
||||
task_manager.run(true).catch((e) => {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { join } from "@std/path";
|
||||
import { format as format_ver, parse as parse_ver } from "@std/semver";
|
||||
import type { Config } from "../config.ts";
|
||||
import { parse_bool, stackTrace } from "../utils.ts";
|
||||
import { Db, QueryParameterSet, SqliteMaster } from "./db_interface.ts";
|
||||
|
||||
@@ -60,10 +61,13 @@ export function format_message(
|
||||
|
||||
class BaseLogger {
|
||||
db?: Db;
|
||||
#cfg?: Config;
|
||||
#exist_table: Set<string> = new Set();
|
||||
#use_ffi = false;
|
||||
readonly version = parse_ver("1.0.0-0");
|
||||
async init(base_path: string) {
|
||||
async init(cfg: Config) {
|
||||
this.#cfg = cfg;
|
||||
const base_path = cfg.db_path || cfg.base;
|
||||
const db_path = join(base_path, "logs.db");
|
||||
this.#use_ffi = parse_bool(Deno.env.get("DB_USE_FFI") ?? "false");
|
||||
if (this.#use_ffi) {
|
||||
@@ -133,9 +137,10 @@ class BaseLogger {
|
||||
}
|
||||
add(type: string, level: number, ...messages: unknown[]) {
|
||||
this.#fallback(type, level, ...messages);
|
||||
if (!this.db) return;
|
||||
if (!this.db || !this.#cfg) return;
|
||||
const message = format_message(messages);
|
||||
const stack = (level >= LogLevel.Trace && level < LogLevel.Debug) ||
|
||||
const stack = this.#cfg.logging_stack ||
|
||||
(level >= LogLevel.Trace && level < LogLevel.Debug) ||
|
||||
level >= LogLevel.Warn
|
||||
? stackTrace(2)
|
||||
: undefined;
|
||||
@@ -360,6 +365,10 @@ class BaseLogger {
|
||||
log(type: string, ...messages: unknown[]) {
|
||||
this.add(type, LogLevel.Log, ...messages);
|
||||
}
|
||||
optimize() {
|
||||
if (!this.db) return;
|
||||
this.db.query("VACUUM;");
|
||||
}
|
||||
trace(type: string, ...messages: unknown[]) {
|
||||
this.add(type, LogLevel.Trace, ...messages);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user