feat: add logging functionality with LoggerService; implement log entity and controller; enhance query processing with logging support

This commit is contained in:
lborv
2025-10-11 16:21:03 +03:00
parent 323fc6e817
commit 57e4a8b932
19 changed files with 328 additions and 24 deletions

View File

@ -13,6 +13,8 @@ import { QueryHandlerService } from "../handler/query.handler.service";
import { ApiTokenGuard } from "src/api/guards/api-token.guard";
import { QueryExecuterService } from "../executer/query.executer.service";
import { QueryGuard } from "src/query/guards/query.guard";
import { LoggerService } from "../logger/logger.service";
import { TLogType } from "../logger/logger.types";
@UseGuards(ApiTokenGuard)
export abstract class BaseQueryController {
@ -20,7 +22,9 @@ export abstract class BaseQueryController {
@Inject(QueryHandlerService)
protected readonly queryHandlerService: QueryHandlerService,
@Inject(QueryExecuterService)
protected readonly queryExecuterService: QueryExecuterService
protected readonly queryExecuterService: QueryExecuterService,
@Inject(LoggerService)
protected readonly loggerService: LoggerService
) {}
protected abstract getIsCommand(): boolean;
@ -49,9 +53,26 @@ export abstract class BaseQueryController {
@Headers() headers: Record<string, any>,
@Res() res: Response
) {
const loggerTraceId =
headers["x-trace-id"] || LoggerService.generateTraceId();
const log = LoggerService.log(
{
traceId: loggerTraceId,
startTime: new Date().getTime(),
payload: query,
headers: headers,
cookies: headers.cookie,
url: `/run/${id}`,
response: null,
content: [],
},
{ content: "", type: TLogType.info, timeStamp: new Date().getTime() }
);
const queryResult = await this.queryExecuterService.runQueryQueued(
id,
query,
log,
headers,
headers.cookie.split("; ").reduce((acc, cookie) => {
const [key, value] = cookie.split("=");
@ -60,6 +81,11 @@ export abstract class BaseQueryController {
}, {})
);
if (queryResult?.log) {
queryResult.log.endTime = new Date().getTime();
await this.loggerService.create(queryResult.log.traceId, queryResult.log);
}
res.status(queryResult?.statusCode || 200);
if (queryResult?.cookies) {