重构AOP日志功能,新增日志查询、删除接口及相关页面,优化日志管理体验;更新前端组件以支持日志展示和操作。

This commit is contained in:
Chuck1sn
2025-07-08 13:03:59 +08:00
parent 0a0174c01e
commit eecc8bedae
26 changed files with 4424 additions and 2489 deletions

View File

@@ -0,0 +1,84 @@
import { faker } from "@faker-js/faker";
import { http, HttpResponse } from "msw";
// 生成AOP日志数据
const generateAopLog = () => ({
id: faker.number.int({ min: 1, max: 1000 }),
className: faker.helpers.arrayElement([
"com.example.controller.UserController",
"com.example.service.UserService",
"com.example.controller.RoleController",
"com.example.service.RoleService",
"com.example.controller.DepartmentController",
"com.example.service.DepartmentService",
]),
methodName: faker.helpers.arrayElement([
"findById",
"save",
"update",
"delete",
"findAll",
"findByName",
"pageQuery",
]),
methodArgs: JSON.stringify([
{ name: "id", value: faker.number.int({ min: 1, max: 100 }) },
{ name: "name", value: faker.person.fullName() },
]),
returnValue: JSON.stringify({
id: faker.number.int({ min: 1, max: 100 }),
name: faker.person.fullName(),
success: true,
}),
executionTime: faker.number.int({ min: 10, max: 5000 }),
success: faker.datatype.boolean(0.9), // 90%成功率
errorMessage: faker.helpers.maybe(() => faker.lorem.sentence(), { probability: 0.1 }),
userId: faker.number.int({ min: 1, max: 100 }),
username: faker.internet.userName(),
ipAddress: faker.internet.ip(),
userAgent: faker.internet.userAgent(),
curl: `curl -X GET "${faker.internet.url()}" -H "Authorization: Bearer ${faker.string.alphanumeric(32)}"`,
createTime: faker.date.recent({ days: 30 }).toISOString(),
});
export default [
// 分页查询AOP日志
http.get("/aop-log/page-query", () => {
const mockData = {
data: faker.helpers.multiple(generateAopLog, { count: 10 }),
total: 100,
};
return HttpResponse.json(mockData);
}),
// 查询单条日志详情
http.get("/aop-log/:id", ({ params }) => {
const id = params.id;
return HttpResponse.json({
...generateAopLog(),
id: Number(id),
});
}),
// 删除单条日志
http.delete("/aop-log/:id", ({ params }) => {
console.log(`Captured a "DELETE /aop-log/${params.id}" request`);
return HttpResponse.json({ success: true });
}),
// 批量删除日志
http.delete("/aop-log/batch", async ({ request }) => {
const ids = await request.json();
console.log(`Captured a "DELETE /aop-log/batch" request with ids: ${ids}`);
return HttpResponse.json(ids.length);
}),
// 删除指定时间前的日志
http.delete("/aop-log/before", ({ params }) => {
const { beforeTime } = Object.fromEntries(
new URL(params.request.url).searchParams
);
console.log(`Captured a "DELETE /aop-log/before" request with time: ${beforeTime}`);
return HttpResponse.json(faker.number.int({ min: 5, max: 50 }));
}),
];

View File

@@ -1,13 +1,14 @@
import { setupWorker } from "msw/browser";
import authHandlers from "./authHandlers";
import jobHandlers from "./schedulerHandlers";
import permissionHandlers from "./permissionHandlers";
import roleHandlers from "./roleHandlers";
import userHandlers from "./iamHandlers";
import departmentHandlers from "./departmentHandlers";
import positionHandlers from "./positionHandlers";
import aiHandlers from "./aiHandlers";
import aopLogHandlers from "./aopLogHandlers";
import authHandlers from "./authHandlers";
import departmentHandlers from "./departmentHandlers";
import userHandlers from "./iamHandlers";
import knowledgeHandlers from "./knowledgeHandlers";
import permissionHandlers from "./permissionHandlers";
import positionHandlers from "./positionHandlers";
import roleHandlers from "./roleHandlers";
import jobHandlers from "./schedulerHandlers";
export const worker = setupWorker(
...userHandlers,
@@ -19,4 +20,5 @@ export const worker = setupWorker(
...positionHandlers,
...aiHandlers,
...knowledgeHandlers,
...aopLogHandlers,
);

View File

@@ -10,6 +10,12 @@
"description": "Generated server url"
}
],
"tags": [
{
"name": "AOP日志管理",
"description": "AOP日志查看和管理接口"
}
],
"paths": {
"/scheduler/job/update": {
"put": {
@@ -1406,6 +1412,105 @@
}
}
},
"/aop-log/{id}": {
"get": {
"tags": [
"AOP日志管理"
],
"summary": "查询日志详情",
"description": "根据ID查询单条日志的详细信息",
"operationId": "getAopLogById",
"parameters": [
{
"name": "id",
"in": "path",
"description": "日志ID",
"required": true,
"schema": {
"type": "integer",
"format": "int64"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/AopLogRespDto"
}
}
}
}
}
},
"delete": {
"tags": [
"AOP日志管理"
],
"summary": "删除单条日志",
"description": "根据ID删除单条日志",
"operationId": "deleteAopLog",
"parameters": [
{
"name": "id",
"in": "path",
"description": "日志ID",
"required": true,
"schema": {
"type": "integer",
"format": "int64"
}
}
],
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/aop-log/page-query": {
"get": {
"tags": [
"AOP日志管理"
],
"summary": "分页查询AOP日志",
"description": "支持多种条件筛选的分页查询",
"operationId": "pageQueryAopLogs",
"parameters": [
{
"name": "pageRequestDto",
"in": "query",
"required": true,
"schema": {
"$ref": "#/components/schemas/PageRequestDto"
}
},
{
"name": "queryDto",
"in": "query",
"required": true,
"schema": {
"$ref": "#/components/schemas/AopLogQueryDto"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/PageResponseDtoListAopLogRespDto"
}
}
}
}
}
}
},
"/ai/llm/page-query": {
"get": {
"tags": [
@@ -1444,6 +1549,79 @@
}
}
},
"/aop-log/before": {
"delete": {
"tags": [
"AOP日志管理"
],
"summary": "删除指定时间前的日志",
"description": "删除指定时间之前的所有日志",
"operationId": "deleteLogsBeforeTime",
"parameters": [
{
"name": "beforeTime",
"in": "query",
"description": "截止时间",
"required": true,
"schema": {
"type": "string",
"format": "date-time"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"type": "integer",
"format": "int32"
}
}
}
}
}
}
},
"/aop-log/batch": {
"delete": {
"tags": [
"AOP日志管理"
],
"summary": "批量删除日志",
"description": "根据ID列表批量删除日志",
"operationId": "deleteAopLogs",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "array",
"description": "日志ID列表",
"items": {
"type": "integer",
"format": "int64"
}
}
}
},
"required": true
},
"responses": {
"200": {
"description": "OK",
"content": {
"*/*": {
"schema": {
"type": "integer",
"format": "int32"
}
}
}
}
}
}
},
"/ai/action/user": {
"delete": {
"tags": [
@@ -2477,6 +2655,113 @@
}
}
},
"AopLogRespDto": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"className": {
"type": "string"
},
"methodName": {
"type": "string"
},
"methodArgs": {
"type": "string"
},
"returnValue": {
"type": "string"
},
"executionTime": {
"type": "integer",
"format": "int64"
},
"success": {
"type": "boolean"
},
"errorMessage": {
"type": "string"
},
"userId": {
"type": "integer",
"format": "int64"
},
"username": {
"type": "string"
},
"ipAddress": {
"type": "string"
},
"userAgent": {
"type": "string"
},
"curl": {
"type": "string"
},
"createTime": {
"type": "string",
"format": "date-time"
}
}
},
"AopLogQueryDto": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"className": {
"type": "string"
},
"methodName": {
"type": "string"
},
"success": {
"type": "boolean"
},
"userId": {
"type": "integer",
"format": "int64"
},
"ipAddress": {
"type": "string"
},
"startTime": {
"type": "string",
"format": "date-time"
},
"endTime": {
"type": "string",
"format": "date-time"
},
"minExecutionTime": {
"type": "integer",
"format": "int64"
},
"maxExecutionTime": {
"type": "integer",
"format": "int64"
}
}
},
"PageResponseDtoListAopLogRespDto": {
"type": "object",
"properties": {
"total": {
"type": "integer",
"format": "int64"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/AopLogRespDto"
}
}
}
},
"LlmQueryDto": {
"type": "object",
"properties": {

File diff suppressed because it is too large Load Diff