2
2
3
3
const fs = require ( 'fs' ) ;
4
4
const _ = require ( 'lodash' ) ;
5
- const Firebase = require ( 'firebase' ) ;
6
5
const Docker = require ( 'dockerode' ) ;
7
6
const DockerEvents = require ( 'docker-events' ) ;
8
7
const CFError = require ( 'cf-errors' ) ;
@@ -11,26 +10,24 @@ const ContainerStatus = require('./enums').ContainerStatus;
11
10
const LoggerStrategy = require ( './enums' ) . LoggerStrategy ;
12
11
const ContainerHandlingStatus = require ( './enums' ) . ContainerHandlingStatus ;
13
12
const ContainerLogger = require ( './ContainerLogger' ) ;
13
+ const { TaskLogger } = require ( '@codefresh-io/task-logger' ) ;
14
14
15
15
class Logger {
16
16
17
17
constructor ( {
18
18
loggerId,
19
- firebaseAuthUrl,
20
- firebaseSecret,
19
+ taskLoggerConfig,
21
20
findExistingContainers,
22
- firebaseMetricsLogsUrl,
23
21
logSizeLimit
24
22
} ) {
25
23
this . state = { status : 'init' } ;
26
- this . firebaseAuthUrl = firebaseAuthUrl ;
27
- this . firebaseSecret = firebaseSecret ;
24
+ this . taskLoggerConfig = taskLoggerConfig ;
28
25
this . loggerId = loggerId ;
29
26
this . findExistingContainers = findExistingContainers === 'true' ;
30
- this . firebaseMetricsLogsUrl = firebaseMetricsLogsUrl ;
31
27
this . logSizeLimit = logSizeLimit ;
32
28
this . containerLoggers = [ ] ;
33
29
this . logSize = 0 ;
30
+ this . taskLogger = undefined ;
34
31
35
32
let dockerSockPath ;
36
33
if ( fs . existsSync ( '/var/run/codefresh/docker.sock' ) ) {
@@ -51,11 +48,8 @@ class Logger {
51
48
* @returns {* }
52
49
*/
53
50
validate ( ) {
54
- if ( ! this . firebaseAuthUrl ) {
55
- return this . _error ( new CFError ( 'firebase auth url is missing' ) ) ;
56
- }
57
- if ( ! this . firebaseSecret ) {
58
- return this . _error ( new CFError ( 'firebase secret is missing' ) ) ;
51
+ if ( ! this . taskLoggerConfig ) {
52
+ return this . _error ( new CFError ( 'taskLogger configuration is missing' ) ) ;
59
53
}
60
54
if ( ! this . loggerId ) {
61
55
return this . _error ( new CFError ( 'logger id is missing' ) ) ;
@@ -67,38 +61,36 @@ class Logger {
67
61
* will attach it self to all created containers that their ids in their labels equals loggerId
68
62
* will attach it self to all existing containers if requested
69
63
* the container label should be 'io.codefresh.loggerId'
70
- * the path to write the containers logs will be passed through 'io.codefresh.firebaseUrl' label
71
- * @param loggerId
72
- * @param firebaseAuthUrl
73
- * @param firebaseSecret
74
64
*/
75
65
start ( ) {
76
66
77
67
logger . info ( `Logging container created for logger id: ${ this . loggerId } ` ) ;
78
68
79
- const authRef = new Firebase ( this . firebaseAuthUrl ) ;
80
- authRef . authWithCustomToken ( this . firebaseSecret , ( err ) => {
81
- if ( err ) {
82
- this . _error ( new CFError ( {
83
- cause : err ,
84
- message : `Failed to authenticate to firebase url ${ this . firebaseAuthUrl } `
85
- } ) ) ;
86
- return ;
87
- }
88
- logger . info ( `Authenticated to firebase url: ${ this . firebaseAuthUrl } ` ) ;
89
- this . firebaseMetricsLogs = new Firebase ( this . firebaseMetricsLogsUrl ) ;
90
-
91
- this . _listenForNewContainers ( ) ;
69
+ TaskLogger ( this . taskLoggerConfig . task , this . taskLoggerConfig . opts )
70
+ . then ( ( taskLogger ) => {
71
+ taskLogger . on ( 'error' , ( err ) => {
72
+ logger . error ( err . stack ) ;
73
+ } ) ;
92
74
93
- this . state . status = 'ready' ;
94
- this . _writeNewState ( ) ;
75
+ this . taskLogger = taskLogger ;
76
+ logger . info ( `taskLogger successfully created` ) ;
95
77
96
- if ( this . findExistingContainers ) {
97
- this . _listenForExistingContainers ( ) ;
98
- }
78
+ this . _listenForNewContainers ( ) ;
99
79
100
- } ) ;
80
+ this . state . status = 'ready' ;
81
+ this . _writeNewState ( ) ;
101
82
83
+ if ( this . findExistingContainers ) {
84
+ this . _listenForExistingContainers ( ) ;
85
+ }
86
+ } )
87
+ . catch ( ( err ) => {
88
+ this . _error ( new CFError ( {
89
+ cause : err ,
90
+ message : `Failed to create taskLogger`
91
+ } ) ) ;
92
+ return ;
93
+ } ) ;
102
94
}
103
95
104
96
/**
@@ -149,19 +141,12 @@ class Logger {
149
141
* @param docker
150
142
* @param newContainer
151
143
*/
152
- _handleContainer ( container ) {
144
+ async _handleContainer ( container ) { // jshint ignore:line
153
145
const containerId = container . Id || container . id ;
154
146
const containerStatus = container . Status || container . status ;
155
147
const receivedLoggerId = _ . get ( container , 'Labels' , _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.id' ] ;
156
- const receivedFirebaseLogsUrl = _ . get ( container ,
157
- 'Labels' ,
158
- _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.firebase.logsUrl' ] ;
159
- const receivedFirebaseLastUpdateUrl = _ . get ( container ,
160
- 'Labels' ,
161
- _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.firebase.lastUpdateUrl' ] ;
162
- const receivedFirebaseMetricsLogsUrl = _ . get ( container ,
163
- 'Labels' ,
164
- _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.firebase.metricsLogs' ] ;
148
+ const runCreationLogic = _ . get ( container , 'Labels' , _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.runCreationLogic' ] ;
149
+ const stepName = _ . get ( container , 'Labels' , _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.stepName' ] ;
165
150
const receivedLogSizeLimit = _ . get ( container ,
166
151
'Labels' ,
167
152
_ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.logSizeLimit' ] ;
@@ -188,23 +173,13 @@ class Logger {
188
173
return ;
189
174
}
190
175
191
- if ( ! receivedFirebaseLogsUrl ) {
192
- logger . error ( `Container: ${ containerId } does contain a firebaseUrl label` ) ;
193
- return ;
194
- }
195
-
196
- if ( ! receivedFirebaseLastUpdateUrl ) {
197
- logger . error ( `Container: ${ containerId } does contain a loggerFirebaseLastUpdateUrl label` ) ;
198
- return ;
199
- }
200
-
201
- if ( ! receivedFirebaseMetricsLogsUrl ) {
202
- logger . error ( `Container: ${ containerId } does contain a loggerFirebaseMetricsLogsUrl label` ) ;
176
+ if ( ! stepName ) {
177
+ logger . error ( `Container: ${ containerId } does not contain a stepName label` ) ;
203
178
return ;
204
179
}
205
180
206
181
if ( ! loggerStrategy ) {
207
- logger . error ( `Container: ${ containerId } does contain a loggerStrategy label` ) ;
182
+ logger . error ( `Container: ${ containerId } does not contain a loggerStrategy label` ) ;
208
183
return ;
209
184
}
210
185
@@ -222,37 +197,13 @@ class Logger {
222
197
223
198
this . state [ containerId ] = { status : ContainerHandlingStatus . INITIALIZING } ;
224
199
logger . info ( `Handling container: ${ containerId } , status: '${ containerStatus } '` ) ;
225
- let firebaseLogger ;
226
- try {
227
- firebaseLogger = new Firebase ( receivedFirebaseLogsUrl ) ;
228
- } catch ( err ) {
229
- const error = new CFError ( {
230
- cause : err ,
231
- message : `Failed to create a new firebase logger ref`
232
- } ) ;
233
- logger . error ( error . toString ( ) ) ;
234
- return ;
235
- }
236
-
237
- let firebaseLastUpdate ;
238
- try {
239
- firebaseLastUpdate = new Firebase ( receivedFirebaseLastUpdateUrl ) ;
240
- } catch ( err ) {
241
- const error = new CFError ( {
242
- cause : err ,
243
- message : `Failed to create a new firebase lastUpdate ref`
244
- } ) ;
245
- logger . error ( error . toString ( ) ) ;
246
- return ;
247
- }
248
-
249
- let firebaseMetricsLogs ;
200
+ const stepLogger = this . taskLogger . create ( stepName , undefined , undefined , runCreationLogic ) ;
250
201
try {
251
- firebaseMetricsLogs = new Firebase ( receivedFirebaseMetricsLogsUrl ) ;
202
+ await stepLogger . restore ( ) ; // jshint ignore:line
252
203
} catch ( err ) {
253
204
const error = new CFError ( {
254
205
cause : err ,
255
- message : `Failed to create a new firebase metricsLogs ref `
206
+ message : `Failed to restore step `
256
207
} ) ;
257
208
logger . error ( error . toString ( ) ) ;
258
209
return ;
@@ -264,9 +215,7 @@ class Logger {
264
215
const containerLogger = new ContainerLogger ( {
265
216
containerId,
266
217
containerInterface,
267
- firebaseLogger,
268
- firebaseLastUpdate,
269
- firebaseMetricsLogs,
218
+ stepLogger,
270
219
logSizeLimit,
271
220
isWorkflowLogSizeExceeded : this . logLimitExceeded . bind ( this ) ,
272
221
loggerStrategy
@@ -290,7 +239,7 @@ class Logger {
290
239
291
240
_updateTotalLogSize ( ) {
292
241
this . logSize = this . _getTotalLogSize ( ) ;
293
- this . firebaseMetricsLogs . child ( 'total' ) . set ( this . logSize ) ;
242
+ this . taskLogger . setLogSize ( this . logSize ) ;
294
243
}
295
244
296
245
/**
0 commit comments