@@ -20,7 +20,7 @@ interface DockerEvent {
20
20
} ;
21
21
}
22
22
23
- let dockerEventStream : NodeJS . ReadableStream | undefined ;
23
+ let dockerEventStream : EventStream . MapStream | undefined ;
24
24
25
25
/**
26
26
* Get a stream of events from Docker. Although Dockerode will only give us the raw event buffers,
@@ -33,31 +33,29 @@ function getDockerEventStream(docker: Docker) {
33
33
if ( ! dockerEventStream ) {
34
34
const dockerEventParsingStream = EventStream . pipeline (
35
35
EventStream . split ( ) ,
36
- EventStream . mapSync ( ( rawLine : Buffer ) =>
37
- JSON . parse ( rawLine . toString ( 'utf8' ) )
38
- )
36
+ EventStream . mapSync ( ( buffer : Buffer ) => buffer . toString ( 'utf8' ) ) ,
37
+ EventStream . filterSync ( ( line : string ) => line . length > 0 ) ,
38
+ EventStream . mapSync ( ( rawLine : string ) => JSON . parse ( rawLine ) )
39
39
) ;
40
40
41
41
// We expose the stream immediately, even though no data is coming yet
42
42
dockerEventStream = dockerEventParsingStream ;
43
43
44
44
// This gives us a stream of raw Buffer data. Inside, it contains
45
45
// JSON strings, newline separated, which we parse above.
46
- ( docker . getEvents ( ) as Promise < stream . Readable > ) // Wrong types, it's a raw http.IncomingMessage
47
- . then ( ( rawEventStream ) => {
48
- rawEventStream . pipe ( dockerEventParsingStream ) ;
49
- rawEventStream . on ( 'error' , ( e ) => {
50
- dockerEventParsingStream ?. emit ( 'error' , e ) ;
51
- } ) ;
52
- rawEventStream . on ( 'close' , ( ) => {
53
- dockerEventParsingStream ?. end ( ) ;
54
- dockerEventStream = undefined ;
55
- } ) ;
56
- } )
57
- . catch ( ( e ) => {
46
+ docker . getEvents ( ) . then ( ( rawEventStream ) => {
47
+ rawEventStream . pipe ( dockerEventParsingStream ) ;
48
+ rawEventStream . on ( 'error' , ( e ) => {
58
49
dockerEventParsingStream ?. emit ( 'error' , e ) ;
50
+ } ) ;
51
+ rawEventStream . on ( 'close' , ( ) => {
52
+ dockerEventParsingStream ?. end ( ) ;
59
53
dockerEventStream = undefined ;
60
54
} ) ;
55
+ } ) . catch ( ( e ) => {
56
+ dockerEventParsingStream ?. emit ( 'error' , e ) ;
57
+ dockerEventStream = undefined ;
58
+ } ) ;
61
59
}
62
60
63
61
return dockerEventStream ;
@@ -166,7 +164,7 @@ class DockerNetworkMonitor {
166
164
constructor (
167
165
private docker : Docker ,
168
166
private proxyPort : number ,
169
- private dockerEventStream : NodeJS . ReadableStream
167
+ private dockerEventStream : stream . Stream
170
168
) {
171
169
// We use mobx here to automatically propagate updates whilst avoiding
172
170
// unnecessary updates when nothing changes.
0 commit comments