perf: log
This commit is contained in:
parent
e32ca8a3e9
commit
4adb8b7e6f
@ -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;
|
||||||
})}
|
})}
|
||||||
|
|||||||
@ -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
|
||||||
});
|
};
|
||||||
|
|||||||
@ -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;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|||||||
@ -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
|
||||||
});
|
};
|
||||||
|
|||||||
@ -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';
|
|
||||||
|
|||||||
@ -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
|
||||||
});
|
};
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
})();
|
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user