1
1
/* eslint-disable @typescript-eslint/no-non-null-assertion */
2
2
import { expect } from 'chai' ;
3
3
import { EventEmitter } from 'events' ;
4
- import { Writable } from 'stream' ;
5
4
6
5
import {
7
6
AbstractCursor ,
@@ -26,6 +25,7 @@ import {
26
25
Document ,
27
26
GridFSBucket ,
28
27
HostAddress ,
28
+ Log ,
29
29
MongoClient ,
30
30
MongoCredentials ,
31
31
ReadConcern ,
@@ -107,33 +107,12 @@ function getClient(address) {
107
107
return new MongoClient ( `mongodb://${ address } ` , getEnvironmentalOptions ( ) ) ;
108
108
}
109
109
110
- // TODO(NODE-4813): Remove this class in favour of a simple object with a write method
111
- /* TODO(NODE-4813): Ensure that the object that we replace this with has logic to convert the
112
- * collected log into the format require by the unified spec runner
113
- * (see ExpectedLogMessage type in schema.ts) */
114
- export class UnifiedLogCollector extends Writable {
115
- collectedLogs : LogMessage [ ] = [ ] ;
116
-
117
- constructor ( ) {
118
- super ( { objectMode : true } ) ;
119
- }
120
-
121
- _write (
122
- log : LogMessage ,
123
- _ : string ,
124
- callback : ( e : Error | null , l : LogMessage | undefined ) => void
125
- ) {
126
- this . collectedLogs . push ( log ) ;
127
- callback ( null , log ) ;
128
- }
129
- }
130
-
131
110
export class UnifiedMongoClient extends MongoClient {
132
111
commandEvents : CommandEvent [ ] = [ ] ;
133
112
cmapEvents : CmapEvent [ ] = [ ] ;
134
113
sdamEvents : SdamEvent [ ] = [ ] ;
135
114
failPoints : Document [ ] = [ ] ;
136
- logCollector : UnifiedLogCollector ;
115
+ logCollector : { buffer : LogMessage [ ] ; write : ( log : Log ) => void } ;
137
116
138
117
ignoredEvents : string [ ] ;
139
118
observedCommandEvents : ( 'commandStarted' | 'commandSucceeded' | 'commandFailed' ) [ ] ;
@@ -186,7 +165,18 @@ export class UnifiedMongoClient extends MongoClient {
186
165
} as const ;
187
166
188
167
constructor ( uri : string , description : ClientEntity ) {
189
- const logCollector = new UnifiedLogCollector ( ) ;
168
+ const logCollector : { buffer : LogMessage [ ] ; write : ( log : Log ) => void } = {
169
+ buffer : [ ] ,
170
+ write ( log : Log ) : void {
171
+ const transformedLog = {
172
+ level : log . s ,
173
+ component : log . c ,
174
+ data : { ...log , s : undefined , c : undefined }
175
+ } ;
176
+
177
+ this . buffer . push ( transformedLog ) ;
178
+ }
179
+ } ;
190
180
const componentSeverities = {
191
181
MONGODB_LOG_ALL : 'off'
192
182
} ;
@@ -202,6 +192,7 @@ export class UnifiedMongoClient extends MongoClient {
202
192
[ Symbol . for ( '@@mdb.skipPingOnConnect' ) ] : true ,
203
193
[ Symbol . for ( '@@mdb.enableMongoLogger' ) ] : true ,
204
194
[ Symbol . for ( '@@mdb.internalMongoLoggerConfig' ) ] : componentSeverities ,
195
+ // @ts -expect-error TODO(NODE-4849): Remove this once we have support for mongodbLogPath
205
196
mongodbLogPath : logCollector ,
206
197
...getEnvironmentalOptions ( ) ,
207
198
...( description . serverApi ? { serverApi : description . serverApi } : { } )
@@ -296,7 +287,7 @@ export class UnifiedMongoClient extends MongoClient {
296
287
}
297
288
298
289
get collectedLogs ( ) : LogMessage [ ] {
299
- return this . logCollector . collectedLogs ;
290
+ return this . logCollector . buffer ;
300
291
}
301
292
}
302
293
0 commit comments