@@ -10,6 +10,8 @@ import { v4 as uuid } from 'uuid'
10
10
11
11
import type { AuditLogEntry } from '@oxide/api'
12
12
13
+ import type { Json } from './json-type'
14
+
13
15
const mockUserIds = [
14
16
'a47ac10b-58cc-4372-a567-0e02b2c3d479' ,
15
17
'6ba7b810-9dad-11d1-80b4-00c04fd430c8' ,
@@ -56,7 +58,7 @@ const mockOperations = [
56
58
'ssh_key_delete' ,
57
59
]
58
60
59
- const mockAccessMethods = [ 'session_cookie' , 'api_token' , null ]
61
+ const mockAccessMethod = [ 'session_cookie' , 'api_token' , null ]
60
62
61
63
const mockHttpStatusCodes = [ 200 , 201 , 204 , 400 , 401 , 403 , 404 , 409 , 500 , 502 , 503 ]
62
64
@@ -70,7 +72,7 @@ const mockSourceIps = [
70
72
71
73
const mockRequestIds = Array . from ( { length : 20 } , ( ) => uuid ( ) )
72
74
73
- function generateAuditLogEntry ( index : number ) : AuditLogEntry {
75
+ function generateAuditLogEntry ( index : number ) : Json < AuditLogEntry > {
74
76
const operation = mockOperations [ index % mockOperations . length ]
75
77
const statusCode = mockHttpStatusCodes [ index % mockHttpStatusCodes . length ]
76
78
const isError = statusCode >= 400
@@ -84,105 +86,105 @@ function generateAuditLogEntry(index: number): AuditLogEntry {
84
86
85
87
return {
86
88
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 ] ,
100
102
}
101
103
}
102
104
103
- export const auditLogs : AuditLogEntry [ ] = [
105
+ export const auditLogs : Json < AuditLogEntry [ ] > = [
104
106
// Recent successful operations
105
107
{
106
108
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' ,
120
122
} ,
121
123
{
122
124
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' ,
136
138
} ,
137
139
// Failed operations
138
140
{
139
141
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' ,
153
155
} ,
154
156
{
155
157
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' ,
169
171
} ,
170
172
// More historical entries
171
173
{
172
174
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' ,
186
188
} ,
187
189
// Generate additional entries
188
190
...Array . from ( { length : 199995 } , ( _ , i ) => generateAuditLogEntry ( i + 5 ) ) ,
0 commit comments