Fix audit logs UI rendering

This commit is contained in:
Tuan Dang
2023-12-04 18:23:04 +07:00
parent c917cf8a18
commit 8b1eaad7b5
5 changed files with 39 additions and 12 deletions

View File

@@ -3,6 +3,7 @@ import { PipelineStage, Types } from "mongoose";
import {
Folder,
MachineIdentity,
MachineMembership,
Membership,
Secret,
ServiceTokenData,
@@ -669,6 +670,21 @@ export const getWorkspaceAuditLogs = async (req: Request, res: Response) => {
ProjectPermissionSub.AuditLogs
);
let actorMetadataQuery = "";
if (actor) {
switch (actor?.split("-", 2)[0]) {
case ActorType.USER:
actorMetadataQuery = "actor.metadata.userId";
break;
case ActorType.SERVICE:
actorMetadataQuery = "actor.metadata.serviceId";
break;
case ActorType.MACHINE:
actorMetadataQuery = "actor.metadata.machineId";
break;
}
}
const query = {
workspace: new Types.ObjectId(workspaceId),
...(eventType
@@ -684,13 +700,9 @@ export const getWorkspaceAuditLogs = async (req: Request, res: Response) => {
...(actor
? {
"actor.type": actor.substring(0, actor.lastIndexOf("-")),
...(actor.split("-", 2)[0] === ActorType.USER
? {
"actor.metadata.userId": actor.substring(actor.lastIndexOf("-") + 1)
}
: {
"actor.metadata.serviceId": actor.substring(actor.lastIndexOf("-") + 1)
})
...({
[actorMetadataQuery]: actor.substring(actor.lastIndexOf("-") + 1)
})
}
: {}),
...(startDate || endDate
@@ -702,7 +714,9 @@ export const getWorkspaceAuditLogs = async (req: Request, res: Response) => {
}
: {})
};
const auditLogs = await AuditLog.find(query).sort({ createdAt: -1 }).skip(offset).limit(limit);
return res.status(200).send({
auditLogs
});
@@ -731,6 +745,7 @@ export const getWorkspaceAuditLogActorFilterOpts = async (req: Request, res: Res
const userIds = await Membership.distinct("user", {
workspace: new Types.ObjectId(workspaceId)
});
const userActors: UserActor[] = (
await User.find({
_id: {
@@ -757,9 +772,15 @@ export const getWorkspaceAuditLogActorFilterOpts = async (req: Request, res: Res
}
}));
const machineIds = await MachineMembership.distinct("machineIdentity", {
workspace: new Types.ObjectId(workspaceId)
});
const machineActors: MachineActor[] = (
await MachineIdentity.find({
workspace: new Types.ObjectId(workspaceId)
_id: {
$in: machineIds
}
})
).map((machineIdentity) => ({
type: ActorType.MACHINE,

View File

@@ -69,7 +69,7 @@ class EELicenseService {
rbac: false,
customRateLimits: false,
customAlerts: false,
auditLogs: true,
auditLogs: false,
auditLogsRetentionDays: 0,
samlSSO: false,
status: null,

View File

@@ -10,6 +10,11 @@ interface ServiceActorMetadata {
name: string;
}
interface MachineActorMetadata {
machineId: string;
name: string;
}
interface UserActor {
type: ActorType.USER;
metadata: UserActorMetadata;
@@ -22,7 +27,7 @@ export interface ServiceActor {
export interface MachineActor {
type: ActorType.MACHINE;
metadata: ServiceActorMetadata;
metadata: MachineActorMetadata;
}
export type Actor = UserActor | ServiceActor | MachineActor;

View File

@@ -53,8 +53,8 @@ export const LogsFilter = ({ control, reset }: Props) => {
case ActorType.MACHINE:
return (
<SelectItem
value={`${actor.type}-${actor.metadata.serviceId}`}
key={`machine-filter-${actor.metadata.serviceId}`}
value={`${actor.type}-${actor.metadata.machineId}`}
key={`machine-filter-${actor.metadata.machineId}`}
>
{actor.metadata.name}
</SelectItem>

View File

@@ -31,6 +31,7 @@ const AUDIT_LOG_LIMIT = 15;
export const LogsTable = ({ eventType, userAgentType, actor, startDate, endDate }: Props) => {
const { currentWorkspace } = useWorkspace();
const { data, isLoading, isFetchingNextPage, hasNextPage, fetchNextPage } = useGetAuditLogs(
currentWorkspace?._id ?? "",
{