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
@@ -3,6 +3,7 @@ import { PipelineStage, Types } from "mongoose";
import { import {
Folder, Folder,
MachineIdentity, MachineIdentity,
MachineMembership,
Membership, Membership,
Secret, Secret,
ServiceTokenData, ServiceTokenData,
@@ -669,6 +670,21 @@ export const getWorkspaceAuditLogs = async (req: Request, res: Response) => {
ProjectPermissionSub.AuditLogs 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 = { const query = {
workspace: new Types.ObjectId(workspaceId), workspace: new Types.ObjectId(workspaceId),
...(eventType ...(eventType
@@ -684,13 +700,9 @@ export const getWorkspaceAuditLogs = async (req: Request, res: Response) => {
...(actor ...(actor
? { ? {
"actor.type": actor.substring(0, actor.lastIndexOf("-")), "actor.type": actor.substring(0, actor.lastIndexOf("-")),
...(actor.split("-", 2)[0] === ActorType.USER ...({
? { [actorMetadataQuery]: actor.substring(actor.lastIndexOf("-") + 1)
"actor.metadata.userId": actor.substring(actor.lastIndexOf("-") + 1) })
}
: {
"actor.metadata.serviceId": actor.substring(actor.lastIndexOf("-") + 1)
})
} }
: {}), : {}),
...(startDate || endDate ...(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); const auditLogs = await AuditLog.find(query).sort({ createdAt: -1 }).skip(offset).limit(limit);
return res.status(200).send({ return res.status(200).send({
auditLogs auditLogs
}); });
@@ -731,6 +745,7 @@ export const getWorkspaceAuditLogActorFilterOpts = async (req: Request, res: Res
const userIds = await Membership.distinct("user", { const userIds = await Membership.distinct("user", {
workspace: new Types.ObjectId(workspaceId) workspace: new Types.ObjectId(workspaceId)
}); });
const userActors: UserActor[] = ( const userActors: UserActor[] = (
await User.find({ await User.find({
_id: { _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[] = ( const machineActors: MachineActor[] = (
await MachineIdentity.find({ await MachineIdentity.find({
workspace: new Types.ObjectId(workspaceId) _id: {
$in: machineIds
}
}) })
).map((machineIdentity) => ({ ).map((machineIdentity) => ({
type: ActorType.MACHINE, type: ActorType.MACHINE,
+1 -1
View File
@@ -69,7 +69,7 @@ class EELicenseService {
rbac: false, rbac: false,
customRateLimits: false, customRateLimits: false,
customAlerts: false, customAlerts: false,
auditLogs: true, auditLogs: false,
auditLogsRetentionDays: 0, auditLogsRetentionDays: 0,
samlSSO: false, samlSSO: false,
status: null, status: null,
+6 -1
View File
@@ -10,6 +10,11 @@ interface ServiceActorMetadata {
name: string; name: string;
} }
interface MachineActorMetadata {
machineId: string;
name: string;
}
interface UserActor { interface UserActor {
type: ActorType.USER; type: ActorType.USER;
metadata: UserActorMetadata; metadata: UserActorMetadata;
@@ -22,7 +27,7 @@ export interface ServiceActor {
export interface MachineActor { export interface MachineActor {
type: ActorType.MACHINE; type: ActorType.MACHINE;
metadata: ServiceActorMetadata; metadata: MachineActorMetadata;
} }
export type Actor = UserActor | ServiceActor | MachineActor; export type Actor = UserActor | ServiceActor | MachineActor;
@@ -53,8 +53,8 @@ export const LogsFilter = ({ control, reset }: Props) => {
case ActorType.MACHINE: case ActorType.MACHINE:
return ( return (
<SelectItem <SelectItem
value={`${actor.type}-${actor.metadata.serviceId}`} value={`${actor.type}-${actor.metadata.machineId}`}
key={`machine-filter-${actor.metadata.serviceId}`} key={`machine-filter-${actor.metadata.machineId}`}
> >
{actor.metadata.name} {actor.metadata.name}
</SelectItem> </SelectItem>
@@ -31,6 +31,7 @@ const AUDIT_LOG_LIMIT = 15;
export const LogsTable = ({ eventType, userAgentType, actor, startDate, endDate }: Props) => { export const LogsTable = ({ eventType, userAgentType, actor, startDate, endDate }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentWorkspace } = useWorkspace();
const { data, isLoading, isFetchingNextPage, hasNextPage, fetchNextPage } = useGetAuditLogs( const { data, isLoading, isFetchingNextPage, hasNextPage, fetchNextPage } = useGetAuditLogs(
currentWorkspace?._id ?? "", currentWorkspace?._id ?? "",
{ {