perf: log

This commit is contained in:
archer 2025-06-03 22:03:12 +08:00
parent e32ca8a3e9
commit 4adb8b7e6f
No known key found for this signature in database
GPG Key ID: 4446499B846D4A9E
7 changed files with 67 additions and 103 deletions

View File

@ -1,6 +1,5 @@
import { import {
Box, Box,
Button,
Flex, Flex,
Table, Table,
TableContainer, TableContainer,
@ -11,12 +10,11 @@ import {
Tr, Tr,
HStack HStack
} from '@chakra-ui/react'; } from '@chakra-ui/react';
import { useState, useEffect, useMemo } from 'react'; import { useState, useEffect, useMemo, useCallback } from 'react';
import { useTranslation } from 'next-i18next'; import { useTranslation } from 'next-i18next';
import MyBox from '@fastgpt/web/components/common/MyBox'; import MyBox from '@fastgpt/web/components/common/MyBox';
import { useScrollPagination } from '@fastgpt/web/hooks/useScrollPagination'; import { useScrollPagination } from '@fastgpt/web/hooks/useScrollPagination';
import { getOperationLogs } from '@/web/support/user/team/operantionLog/api'; import { getOperationLogs } from '@/web/support/user/team/operantionLog/api';
import { TeamPermission } from '@fastgpt/global/support/permission/user/controller';
import { operationLogMap } from '@fastgpt/service/support/operationLog/constants'; import { operationLogMap } from '@fastgpt/service/support/operationLog/constants';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants'; import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { formatTime2YMDHMS } from '@fastgpt/global/common/string/time'; import { formatTime2YMDHMS } from '@fastgpt/global/common/string/time';
@ -26,7 +24,8 @@ import MultipleSelect, {
} from '@fastgpt/web/components/common/MySelect/MultipleSelect'; } from '@fastgpt/web/components/common/MySelect/MultipleSelect';
import Avatar from '@fastgpt/web/components/common/Avatar'; import Avatar from '@fastgpt/web/components/common/Avatar';
import { getTeamMembers } from '@/web/support/user/team/api'; import { getTeamMembers } from '@/web/support/user/team/api';
import { createMetadataProcessorMap, type MetadataProcessor } from './processors'; import { specialProcessors } from './processors';
import { defaultMetadataProcessor } from './processors/commonProcessor';
function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) { function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
const { t } = useTranslation(); const { t } = useTranslation();
@ -59,13 +58,14 @@ function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
[t] [t]
); );
const processMetadataByEvent = useMemo(() => { const processMetadataByEvent = useCallback(
const metadataProcessorMap = createMetadataProcessorMap(); (event: string, metadata: any) => {
return (event: string, metadata: any) => { const defaultFormat = defaultMetadataProcessor(metadata, t);
const processor = metadataProcessorMap[event as OperationLogEventEnum]; const specialFormat = specialProcessors[event as OperationLogEventEnum]?.(defaultFormat, t);
return processor ? processor(metadata, t) : metadata; return specialFormat || defaultFormat;
}; },
}, [t]); [t]
);
const { const {
data: operationLogs = [], data: operationLogs = [],
@ -182,7 +182,7 @@ function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
</Td> </Td>
<Td>{formatTime2YMDHMS(log.timestamp)}</Td> <Td>{formatTime2YMDHMS(log.timestamp)}</Td>
<Td>{t(i18nData.typeLabel)}</Td> <Td>{t(i18nData.typeLabel)}</Td>
<Td>{t(i18nData.content, metadata as any) as string}</Td> <Td>{t(i18nData.content as any, metadata)}</Td>
</Tr> </Tr>
) : null; ) : null;
})} })}

View File

@ -1,5 +1,4 @@
import { AppPermission } from '@fastgpt/global/support/permission/app/controller'; import { AppPermission } from '@fastgpt/global/support/permission/app/controller';
import { createSpecialProcessor } from './commonProcessor';
export const processUpdateAppCollaboratorSpecific = (metadata: any) => { export const processUpdateAppCollaboratorSpecific = (metadata: any) => {
const permissionValue = parseInt(metadata.permission, 10); const permissionValue = parseInt(metadata.permission, 10);
@ -12,6 +11,6 @@ export const processUpdateAppCollaboratorSpecific = (metadata: any) => {
}; };
}; };
export const createAppProcessors = () => ({ export const createAppProcessors = {
UPDATE_APP_COLLABORATOR: createSpecialProcessor(processUpdateAppCollaboratorSpecific) UPDATE_APP_COLLABORATOR: processUpdateAppCollaboratorSpecific
}); };

View File

@ -10,13 +10,11 @@ export interface CommonMetadataFields {
export const defaultMetadataProcessor = (metadata: CommonMetadataFields, t: any): any => { export const defaultMetadataProcessor = (metadata: CommonMetadataFields, t: any): any => {
const result = { ...metadata }; const result = { ...metadata };
const translatableFields = ['appType', 'datasetType', 'operationName', 'itemName']; Object.entries(metadata).forEach(([key, value]) => {
if (typeof value === 'string' && value.includes(':')) {
Object.entries(metadata)
.filter(([key, value]) => translatableFields.includes(key) && value)
.forEach(([key, value]) => {
result[key] = t(value as any); result[key] = t(value as any);
}); }
});
if (metadata.newItemNames) { if (metadata.newItemNames) {
if (Array.isArray(metadata.newItemNames)) { if (Array.isArray(metadata.newItemNames)) {
@ -33,11 +31,3 @@ export const defaultMetadataProcessor = (metadata: CommonMetadataFields, t: any)
return result; return result;
}; };
export const createSpecialProcessor = (specificProcessor: (metadata: any) => any) => {
return (metadata: any, t: any) => {
let processedMetadata = defaultMetadataProcessor(metadata, t);
processedMetadata = specificProcessor(processedMetadata);
return processedMetadata;
};
};

View File

@ -1,5 +1,4 @@
import { DatasetPermission } from '@fastgpt/global/support/permission/dataset/controller'; import { DatasetPermission } from '@fastgpt/global/support/permission/dataset/controller';
import { createSpecialProcessor } from './commonProcessor';
export const processUpdateDatasetCollaboratorSpecific = (metadata: any) => { export const processUpdateDatasetCollaboratorSpecific = (metadata: any) => {
const permissionValue = parseInt(metadata.permission, 10); const permissionValue = parseInt(metadata.permission, 10);
@ -12,6 +11,6 @@ export const processUpdateDatasetCollaboratorSpecific = (metadata: any) => {
}; };
}; };
export const createDatasetProcessors = () => ({ export const createDatasetProcessors = {
UPDATE_DATASET_COLLABORATOR: createSpecialProcessor(processUpdateDatasetCollaboratorSpecific) UPDATE_DATASET_COLLABORATOR: processUpdateDatasetCollaboratorSpecific
}); };

View File

@ -1,30 +1,11 @@
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants'; import type { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { defaultMetadataProcessor } from './commonProcessor';
import { createTeamProcessors } from './teamProcessors'; import { createTeamProcessors } from './teamProcessors';
import { createAppProcessors } from './appProcessors'; import { createAppProcessors } from './appProcessors';
import { createDatasetProcessors } from './datasetProcessors'; import { createDatasetProcessors } from './datasetProcessors';
export type MetadataProcessor = (metadata: any, t: any) => any; export type MetadataProcessor = (metadata: any, t: any) => any;
export const specialProcessors: Partial<Record<OperationLogEventEnum, MetadataProcessor>> = {
export const createMetadataProcessorMap = (): Record<OperationLogEventEnum, MetadataProcessor> => { ...createTeamProcessors,
const specialProcessors: Partial<Record<OperationLogEventEnum, MetadataProcessor>> = { ...createAppProcessors,
...createTeamProcessors(), ...createDatasetProcessors
...createAppProcessors(),
...createDatasetProcessors()
};
const processorMap = {} as Record<OperationLogEventEnum, MetadataProcessor>;
Object.values(OperationLogEventEnum).forEach((event) => {
processorMap[event] =
specialProcessors[event] ||
((metadata: any, t: any) => defaultMetadataProcessor(metadata, t));
});
return processorMap;
}; };
export * from './commonProcessor';
export * from './teamProcessors';
export * from './appProcessors';
export * from './datasetProcessors';

View File

@ -1,5 +1,4 @@
import { TeamPermission } from '@fastgpt/global/support/permission/user/controller'; import { TeamPermission } from '@fastgpt/global/support/permission/user/controller';
import { createSpecialProcessor } from './commonProcessor';
export const processAssignPermissionSpecific = (metadata: any) => { export const processAssignPermissionSpecific = (metadata: any) => {
const permissionValue = parseInt(metadata.permission, 10); const permissionValue = parseInt(metadata.permission, 10);
@ -14,6 +13,6 @@ export const processAssignPermissionSpecific = (metadata: any) => {
}; };
}; };
export const createTeamProcessors = () => ({ export const createTeamProcessors = {
ASSIGN_PERMISSION: createSpecialProcessor(processAssignPermissionSpecific) ASSIGN_PERMISSION: processAssignPermissionSpecific
}); };

View File

@ -205,18 +205,16 @@ const logAppMove = ({
app: any; app: any;
targetName: string; targetName: string;
}) => { }) => {
(async () => { addOperationLog({
addOperationLog({ tmbId,
tmbId, teamId,
teamId, event: OperationLogEventEnum.MOVE_APP,
event: OperationLogEventEnum.MOVE_APP, params: {
params: { appName: app.name,
appName: app.name, targetFolderName: targetName,
targetFolderName: targetName, appType: getI18nAppType(app.type)
appType: getI18nAppType(app.type) }
} });
});
})();
}; };
const logAppUpdate = ({ const logAppUpdate = ({
@ -232,39 +230,37 @@ const logAppUpdate = ({
name?: string; name?: string;
intro?: string; intro?: string;
}) => { }) => {
(async () => { const getUpdateItems = () => {
const getUpdateItems = () => { const names: string[] = [];
const names: string[] = []; const values: string[] = [];
const values: string[] = [];
if (name !== undefined) { if (name !== undefined) {
names.push(i18nT('common:core.app.name')); names.push(i18nT('common:core.app.name'));
values.push(name); values.push(name);
} }
if (intro !== undefined) { if (intro !== undefined) {
names.push(i18nT('common:Intro')); names.push(i18nT('common:Intro'));
values.push(intro); values.push(intro);
} }
return { return {
names, names,
values values
};
}; };
};
const { names: newItemNames, values: newItemValues } = getUpdateItems(); const { names: newItemNames, values: newItemValues } = getUpdateItems();
addOperationLog({ addOperationLog({
tmbId, tmbId,
teamId, teamId,
event: OperationLogEventEnum.UPDATE_APP_INFO, event: OperationLogEventEnum.UPDATE_APP_INFO,
params: { params: {
appName: app.name, appName: app.name,
newItemNames: newItemNames, newItemNames: newItemNames,
newItemValues: newItemValues, newItemValues: newItemValues,
appType: getI18nAppType(app.type) appType: getI18nAppType(app.type)
} }
}); });
})();
}; };