Skip to content

Commit 242b0de

Browse files

File tree

7 files changed

+39
-3
lines changed

7 files changed

+39
-3
lines changed

frontend/src/component/events/EventCard/EventCard.tsx

+6
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,12 @@ const EventCard = ({ entry }: IEventCardProps) => {
8989
<dd>{entry.type}</dd>
9090
<StyledDefinitionTerm>Changed by:</StyledDefinitionTerm>
9191
<dd title={entry.createdBy}>{entry.createdBy}</dd>
92+
{entry.ip && (
93+
<>
94+
<StyledDefinitionTerm>IP:</StyledDefinitionTerm>
95+
<dd title={entry.ip}>{entry.ip}</dd>
96+
</>
97+
)}
9298
<ConditionallyRender
9399
condition={Boolean(entry.project)}
94100
show={

frontend/src/openapi/models/eventSchema.ts

+5
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ export interface EventSchema {
4141
* @minimum 1
4242
*/
4343
id: number;
44+
/**
45+
* The IP address of the user that created the event. Only available in Enterprise.
46+
* @nullable
47+
*/
48+
ip?: string | null;
4449
/**
4550
* The concise, human-readable name of the event.
4651
* @nullable

src/lib/features/events/event-service.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,18 @@ export default class EventService {
3232

3333
private eventBus: EventEmitter;
3434

35+
private isEnterprise: boolean;
36+
3537
constructor(
3638
{
3739
eventStore,
3840
featureTagStore,
3941
}: Pick<IUnleashStores, 'eventStore' | 'featureTagStore'>,
40-
{ getLogger, eventBus }: Pick<IUnleashConfig, 'getLogger' | 'eventBus'>,
42+
{
43+
getLogger,
44+
eventBus,
45+
isEnterprise,
46+
}: Pick<IUnleashConfig, 'getLogger' | 'eventBus' | 'isEnterprise'>,
4147
privateProjectChecker: IPrivateProjectChecker,
4248
accessReadModel: IAccessReadModel,
4349
) {
@@ -46,6 +52,7 @@ export default class EventService {
4652
this.privateProjectChecker = privateProjectChecker;
4753
this.featureTagStore = featureTagStore;
4854
this.eventBus = eventBus;
55+
this.isEnterprise = isEnterprise;
4956
this.accessReadModel = accessReadModel;
5057
}
5158

@@ -101,6 +108,9 @@ export default class EventService {
101108
query: search.query,
102109
},
103110
queryParams,
111+
{
112+
withIp: this.isEnterprise,
113+
},
104114
);
105115
return {
106116
events,

src/lib/features/events/event-store.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ export interface IEventTable {
9393
project?: string;
9494
environment?: string;
9595
tags: ITag[];
96+
ip?: string;
9697
}
9798

9899
const TABLE = 'events';
@@ -374,15 +375,20 @@ class EventStore implements IEventStore {
374375
async searchEvents(
375376
params: IEventSearchParams,
376377
queryParams: IQueryParam[],
378+
options?: { withIp?: boolean },
377379
): Promise<IEvent[]> {
378380
const query = this.buildSearchQuery(params, queryParams)
379-
.select(EVENT_COLUMNS)
381+
.select(options?.withIp ? [...EVENT_COLUMNS, 'ip'] : EVENT_COLUMNS)
380382
.orderBy('created_at', 'desc')
381383
.limit(Number(params.limit) ?? 100)
382384
.offset(Number(params.offset) ?? 0);
383385

384386
try {
385-
return (await query).map(this.rowToEvent);
387+
return (await query).map((row) =>
388+
options?.withIp
389+
? { ...this.rowToEvent(row), ip: row.ip }
390+
: this.rowToEvent(row),
391+
);
386392
} catch (err) {
387393
return [];
388394
}

src/lib/openapi/spec/event-schema.ts

+7
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,13 @@ export const eventSchema = {
102102
nullable: true,
103103
description: 'A markdown-formatted summary of the event.',
104104
},
105+
ip: {
106+
type: 'string',
107+
nullable: true,
108+
description:
109+
'The IP address of the user that created the event. Only available in Enterprise.',
110+
example: '192.168.1.1',
111+
},
105112
},
106113
components: {
107114
schemas: {

src/lib/types/events.ts

+1
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,7 @@ export interface IBaseEvent {
400400
export interface IEvent extends Omit<IBaseEvent, 'ip'> {
401401
id: number;
402402
createdAt: Date;
403+
ip?: string;
403404
}
404405

405406
export interface IEnrichedEvent extends IEvent {

src/lib/types/stores/event-store.ts

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export interface IEventStore
4141
searchEvents(
4242
params: IEventSearchParams,
4343
queryParams: IQueryParam[],
44+
options?: { withIp?: boolean },
4445
): Promise<IEvent[]>;
4546
getMaxRevisionId(currentMax?: number): Promise<number>;
4647
getRevisionRange(start: number, end: number): Promise<IEvent[]>;

0 commit comments

Comments
 (0)