@@ -10,6 +10,8 @@ import { v4 as uuid } from 'uuid'
1010
1111import type { AuditLogEntry } from '@oxide/api'
1212
13+ import type { Json } from './json-type'
14+
1315const mockUserIds = [
1416 'a47ac10b-58cc-4372-a567-0e02b2c3d479' ,
1517 '6ba7b810-9dad-11d1-80b4-00c04fd430c8' ,
@@ -56,7 +58,7 @@ const mockOperations = [
5658 'ssh_key_delete' ,
5759]
5860
59- const mockAccessMethods = [ 'session_cookie' , 'api_token' , null ]
61+ const mockAccessMethod = [ 'session_cookie' , 'api_token' , null ]
6062
6163const mockHttpStatusCodes = [ 200 , 201 , 204 , 400 , 401 , 403 , 404 , 409 , 500 , 502 , 503 ]
6264
@@ -70,7 +72,7 @@ const mockSourceIps = [
7072
7173const mockRequestIds = Array . from ( { length : 20 } , ( ) => uuid ( ) )
7274
73- function generateAuditLogEntry ( index : number ) : AuditLogEntry {
75+ function generateAuditLogEntry ( index : number ) : Json < AuditLogEntry > {
7476 const operation = mockOperations [ index % mockOperations . length ]
7577 const statusCode = mockHttpStatusCodes [ index % mockHttpStatusCodes . length ]
7678 const isError = statusCode >= 400
@@ -84,105 +86,105 @@ function generateAuditLogEntry(index: number): AuditLogEntry {
8486
8587 return {
8688 id : uuid ( ) ,
87- accessMethod : mockAccessMethods [ index % mockAccessMethods . length ] ,
88- actorId : mockUserIds [ index % mockUserIds . length ] ,
89- actorSiloId : mockSiloIds [ index % mockSiloIds . length ] ,
90- errorCode : isError ? `E${ statusCode } ` : null ,
91- errorMessage : isError ? `Operation failed with status ${ statusCode } ` : null ,
92- httpStatusCode : statusCode ,
93- operationId : operation ,
94- requestId : mockRequestIds [ index % mockRequestIds . length ] ,
95- timestamp : baseTime ,
96- timeCompleted : completedTime ,
97- requestUri : `/v1/projects/default/${ operation . replace ( '_' , '/' ) } ` ,
98- resourceId : index % 3 === 0 ? uuid ( ) : null ,
99- sourceIp : mockSourceIps [ index % mockSourceIps . length ] ,
89+ access_method : mockAccessMethod [ index % mockAccessMethod . length ] ,
90+ actor_id : mockUserIds [ index % mockUserIds . length ] ,
91+ actor_silo_id : mockSiloIds [ index % mockSiloIds . length ] ,
92+ error_code : isError ? `E${ statusCode } ` : null ,
93+ error_message : isError ? `Operation failed with status ${ statusCode } ` : null ,
94+ http_status_code : statusCode ,
95+ operation_id : operation ,
96+ request_id : mockRequestIds [ index % mockRequestIds . length ] ,
97+ timestamp : baseTime . toISOString ( ) ,
98+ time_completed : completedTime . toISOString ( ) ,
99+ request_uri : `/v1/projects/default/${ operation . replace ( '_' , '/' ) } ` ,
100+ resource_id : index % 3 === 0 ? uuid ( ) : null ,
101+ source_ip : mockSourceIps [ index % mockSourceIps . length ] ,
100102 }
101103}
102104
103- export const auditLogs : AuditLogEntry [ ] = [
105+ export const auditLogs : Json < AuditLogEntry [ ] > = [
104106 // Recent successful operations
105107 {
106108 id : uuid ( ) ,
107- accessMethod : 'session_cookie' ,
108- actorId : mockUserIds [ 0 ] ,
109- actorSiloId : mockSiloIds [ 0 ] ,
110- errorCode : null ,
111- errorMessage : null ,
112- httpStatusCode : 201 ,
113- operationId : 'instance_create' ,
114- requestId : mockRequestIds [ 0 ] ,
115- timestamp : new Date ( Date . now ( ) - 1000 * 60 * 5 ) , // 5 minutes ago
116- timeCompleted : new Date ( Date . now ( ) - 1000 * 60 * 5 + 321 ) , // 1 second later
117- requestUri : '/v1/projects/admin-project/instances' ,
118- resourceId : uuid ( ) ,
119- sourceIp : '192.168.1.100' ,
109+ access_method : 'session_cookie' ,
110+ actor_id : mockUserIds [ 0 ] ,
111+ actor_silo_id : mockSiloIds [ 0 ] ,
112+ error_code : null ,
113+ error_message : null ,
114+ http_status_code : 201 ,
115+ operation_id : 'instance_create' ,
116+ request_id : mockRequestIds [ 0 ] ,
117+ timestamp : new Date ( Date . now ( ) - 1000 * 60 * 5 ) . toISOString ( ) , // 5 minutes ago
118+ time_completed : new Date ( Date . now ( ) - 1000 * 60 * 5 + 321 ) . toISOString ( ) , // 1 second later
119+ request_uri : '/v1/projects/admin-project/instances' ,
120+ resource_id : uuid ( ) ,
121+ source_ip : '192.168.1.100' ,
120122 } ,
121123 {
122124 id : uuid ( ) ,
123- accessMethod : 'api_token' ,
124- actorId : mockUserIds [ 1 ] ,
125- actorSiloId : mockSiloIds [ 0 ] ,
126- errorCode : null ,
127- errorMessage : null ,
128- httpStatusCode : 200 ,
129- operationId : 'instance_start' ,
130- requestId : mockRequestIds [ 1 ] ,
131- timestamp : new Date ( Date . now ( ) - 1000 * 60 * 10 ) , // 10 minutes ago
132- timeCompleted : new Date ( Date . now ( ) - 1000 * 60 * 10 + 126 ) , // 1 second later
133- requestUri : '/v1/projects/admin-project/instances/web-server-prod/start' ,
134- resourceId : uuid ( ) ,
135- sourceIp : '10.0.0.50' ,
125+ access_method : 'api_token' ,
126+ actor_id : mockUserIds [ 1 ] ,
127+ actor_silo_id : mockSiloIds [ 0 ] ,
128+ error_code : null ,
129+ error_message : null ,
130+ http_status_code : 200 ,
131+ operation_id : 'instance_start' ,
132+ request_id : mockRequestIds [ 1 ] ,
133+ timestamp : new Date ( Date . now ( ) - 1000 * 60 * 10 ) . toISOString ( ) , // 10 minutes ago
134+ time_completed : new Date ( Date . now ( ) - 1000 * 60 * 10 + 126 ) . toISOString ( ) , // 1 second later
135+ request_uri : '/v1/projects/admin-project/instances/web-server-prod/start' ,
136+ resource_id : uuid ( ) ,
137+ source_ip : '10.0.0.50' ,
136138 } ,
137139 // Failed operations
138140 {
139141 id : uuid ( ) ,
140- accessMethod : 'session_cookie' ,
141- actorId : mockUserIds [ 2 ] ,
142- actorSiloId : mockSiloIds [ 1 ] ,
143- errorCode : 'E403' ,
144- errorMessage : 'Insufficient permissions to delete instance' ,
145- httpStatusCode : 403 ,
146- operationId : 'instance_delete' ,
147- requestId : mockRequestIds [ 2 ] ,
148- timestamp : new Date ( Date . now ( ) - 1000 * 60 * 15 ) , // 15 minutes ago
149- timeCompleted : new Date ( Date . now ( ) - 1000 * 60 * 15 + 147 ) , // 1 second later
150- requestUri : '/v1/projects/dev-project/instances/test-instance' ,
151- resourceId : uuid ( ) ,
152- sourceIp : '172.16.0.25' ,
142+ access_method : 'session_cookie' ,
143+ actor_id : mockUserIds [ 2 ] ,
144+ actor_silo_id : mockSiloIds [ 1 ] ,
145+ error_code : 'E403' ,
146+ error_message : 'Insufficient permissions to delete instance' ,
147+ http_status_code : 403 ,
148+ operation_id : 'instance_delete' ,
149+ request_id : mockRequestIds [ 2 ] ,
150+ timestamp : new Date ( Date . now ( ) - 1000 * 60 * 15 ) . toISOString ( ) , // 15 minutes ago
151+ time_completed : new Date ( Date . now ( ) - 1000 * 60 * 15 + 147 ) . toISOString ( ) , // 1 second later
152+ request_uri : '/v1/projects/dev-project/instances/test-instance' ,
153+ resource_id : uuid ( ) ,
154+ source_ip : '172.16.0.25' ,
153155 } ,
154156 {
155157 id : uuid ( ) ,
156- accessMethod : null ,
157- actorId : null ,
158- actorSiloId : null ,
159- errorCode : 'E401' ,
160- errorMessage : 'Authentication required' ,
161- httpStatusCode : 401 ,
162- operationId : 'user_login' ,
163- requestId : mockRequestIds [ 3 ] ,
164- timestamp : new Date ( Date . now ( ) - 1000 * 60 * 20 ) , // 20 minutes ago
165- timeCompleted : new Date ( Date . now ( ) - 1000 * 60 * 20 + 16 ) , // 1 second later
166- requestUri : '/v1/login' ,
167- resourceId : null ,
168- sourceIp : '203.0.113.15' ,
158+ access_method : null ,
159+ actor_id : null ,
160+ actor_silo_id : null ,
161+ error_code : 'E401' ,
162+ error_message : 'Authentication required' ,
163+ http_status_code : 401 ,
164+ operation_id : 'user_login' ,
165+ request_id : mockRequestIds [ 3 ] ,
166+ timestamp : new Date ( Date . now ( ) - 1000 * 60 * 20 ) . toISOString ( ) , // 20 minutes ago
167+ time_completed : new Date ( Date . now ( ) - 1000 * 60 * 20 + 16 ) . toISOString ( ) , // 1 second later
168+ request_uri : '/v1/login' ,
169+ resource_id : null ,
170+ source_ip : '203.0.113.15' ,
169171 } ,
170172 // More historical entries
171173 {
172174 id : uuid ( ) ,
173- accessMethod : 'session_cookie' ,
174- actorId : mockUserIds [ 0 ] ,
175- actorSiloId : mockSiloIds [ 0 ] ,
176- errorCode : null ,
177- errorMessage : null ,
178- httpStatusCode : 201 ,
179- operationId : 'project_create' ,
180- requestId : mockRequestIds [ 4 ] ,
181- timestamp : new Date ( Date . now ( ) - 1000 * 60 * 60 ) , // 1 hour ago
182- timeCompleted : new Date ( Date . now ( ) - 1000 * 60 * 60 + 36 ) , // 1 second later
183- requestUri : '/v1/projects' ,
184- resourceId : uuid ( ) ,
185- sourceIp : '192.168.1.100' ,
175+ access_method : 'session_cookie' ,
176+ actor_id : mockUserIds [ 0 ] ,
177+ actor_silo_id : mockSiloIds [ 0 ] ,
178+ error_code : null ,
179+ error_message : null ,
180+ http_status_code : 201 ,
181+ operation_id : 'project_create' ,
182+ request_id : mockRequestIds [ 4 ] ,
183+ timestamp : new Date ( Date . now ( ) - 1000 * 60 * 60 ) . toISOString ( ) , // 1 hour ago
184+ time_completed : new Date ( Date . now ( ) - 1000 * 60 * 60 + 36 ) . toISOString ( ) , // 1 second later
185+ request_uri : '/v1/projects' ,
186+ resource_id : uuid ( ) ,
187+ source_ip : '192.168.1.100' ,
186188 } ,
187189 // Generate additional entries
188190 ...Array . from ( { length : 199995 } , ( _ , i ) => generateAuditLogEntry ( i + 5 ) ) ,
0 commit comments