Skip to content

Commit d2412a4

Browse files
Color runtime container's stderr in RED
Color runtime container's stderr in RED
2 parents eb24495 + 1eb9a81 commit d2412a4

File tree

4 files changed

+201
-52
lines changed

4 files changed

+201
-52
lines changed

codefresh.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@ version: '1.0'
22

33
steps:
44
unit-test-step:
5-
image: codefresh/buildpacks:all-5
5+
image: node:6.9.2
66
environment:
77
- COVERALLS_TOKEN=${{COVERALLS_TOKEN}}
88
working-directory: ${{initial-clone}}
99
commands:
1010
- npm install
11-
- gulp lint
12-
- gulp no.onlys
13-
- gulp unit_test
14-
- gulp coveralls
15-
- gulp integ_test
16-
- gulp clean
11+
- npm run gulp lint
12+
- npm run gulp no.onlys
13+
- npm run gulp unit_test
14+
- npm run gulp coveralls
15+
- npm run gulp integ_test
16+
- npm run gulp clean
1717

1818
build-step:
1919
type: build

lib/ContainerLogger.js

Lines changed: 46 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,24 @@ class ContainerLogger {
2828
return Q.reject(new CFError(`Strategy: ${this.loggerStrategy} is not supported`));
2929
}
3030
})
31-
.then((stream) => {
31+
.then(([stdout, stderr]) => {
3232
logger.info(`Attached stream to container: ${this.containerId}`);
3333
// Listening on the stream needs to be performed different depending if a tty is attached or not
3434
// See documentation of the docker api here: https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/attach-to-a-container
3535
if (this.tty) {
36-
this._handleTtyStream(stream);
36+
this._handleTtyStream(stdout, false);
37+
this._handleTtyStream(stderr, true);
3738
} else {
38-
this._handleNonTtyStream(stream);
39+
this._handleNonTtyStream(stdout, false);
40+
this._handleNonTtyStream(stderr, true);
3941
}
4042

41-
stream.on('end', () => {
42-
logger.info(`stream end event was fired for container: ${this.containerId}`);
43+
stdout.on('end', () => {
44+
logger.info(`stdout end event was fired for container: ${this.containerId}`);
45+
});
46+
47+
stderr.on('end', () => {
48+
logger.info(`stderr end event was fired for container: ${this.containerId}`);
4349
});
4450
}, (err) => {
4551
return Q.reject(new CFError({
@@ -50,47 +56,66 @@ class ContainerLogger {
5056
}
5157

5258
_getAttachStrategyStream() {
53-
return Q.ninvoke(this.containerInterface, 'attach', {
54-
stream: true,
55-
stdout: true,
56-
stderr: true,
57-
tty: true
58-
});
59+
return Q.all([
60+
Q.ninvoke(this.containerInterface, 'attach', {
61+
stream: true,
62+
stdout: true,
63+
stderr: false,
64+
tty: true
65+
}),
66+
Q.ninvoke(this.containerInterface, 'attach', {
67+
stream: true,
68+
stdout: false,
69+
stderr: true,
70+
tty: true
71+
})
72+
]);
5973
}
6074

6175
_getLogsStrategyStream() {
62-
return Q.ninvoke(this.containerInterface, 'logs', {
63-
follow: 1,
64-
stdout: 1,
65-
stderr: 1
66-
});
76+
return Q.all([
77+
Q.ninvoke(this.containerInterface, 'logs', {
78+
follow: 1,
79+
stdout: 1,
80+
stderr: 0
81+
}),
82+
Q.ninvoke(this.containerInterface, 'logs', {
83+
follow: 1,
84+
stdout: 0,
85+
stderr: 1
86+
})
87+
]);
6788
}
6889

69-
_handleTtyStream(stream) {
90+
_handleTtyStream(stream, isError) {
7091
stream.on('data', (chunk) => {
7192
const buf = new Buffer(chunk);
7293
const message = buf.toString('utf8');
73-
this._logMessageToFirebase(message);
94+
this._logMessageToFirebase(message, isError);
7495
});
7596
logger.info(`Listening on stream 'data' event for container: ${this.containerId}`);
7697
}
7798

78-
_handleNonTtyStream(stream) {
99+
_handleNonTtyStream(stream, isError) {
79100
stream.on('readable', () => {
80101
let header = stream.read(8);
81102
while (header !== null) {
82103
const payload = stream.read(header.readUInt32BE(4));
83104
if (payload === null) {
84105
break;
85106
}
86-
this._logMessageToFirebase(new Buffer(payload).toString('utf8'));
107+
this._logMessageToFirebase(new Buffer(payload).toString('utf8'), isError);
87108
header = stream.read(8);
88109
}
89110
});
90111
logger.info(`Listening on stream 'readable' event for container: ${this.containerId}`);
91112
}
92113

93-
_logMessageToFirebase(message) {
114+
_logMessageToFirebase(message, isError) {
115+
if (isError) {
116+
message = `\x1B[31m${message}\x1B[0m`;
117+
}
118+
94119
this.firebaseLogger.push(message);
95120
this.firebaseLastUpdate.set(new Date().getTime());
96121
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"sinon-chai": "^2.8.0"
3232
},
3333
"scripts": {
34+
"gulp": "gulp",
3435
"start": "node lib/index.js"
3536
}
3637
}

0 commit comments

Comments
 (0)