11const fs = require ( 'fs' ) ;
22const { EventEmitter } = require ( 'events' ) ;
33const _ = require ( 'lodash' ) ;
4- const Q = require ( 'q' ) ;
54const Docker = require ( 'dockerode' ) ;
65const DockerEvents = require ( 'docker-events' ) ;
7- const bodyParser = require ( 'body-parser' ) ;
86const CFError = require ( 'cf-errors' ) ;
97const logger = require ( 'cf-logs' ) . Logger ( 'codefresh:containerLogger' ) ;
108const { TaskLogger } = require ( '@codefresh-io/task-logger' ) ;
11- const express = require ( 'express ' ) ;
9+ const fastify = require ( 'fastify ' ) ;
1210const { ContainerStatus } = require ( './enums' ) ;
1311const { LoggerStrategy } = require ( './enums' ) ;
1412const { ContainerHandlingStatus } = require ( './enums' ) ;
1513const ContainerLogger = require ( './ContainerLogger' ) ;
14+ const { getPromiseWithResolvers, saveServerAddress } = require ( './helpers' ) ;
1615
1716const initialState = {
1817 pid : process . pid , status : 'init' , lastLogsDate : new Date ( ) , failedHealthChecks : [ ] , restartCounter : 0 , containers : { }
@@ -35,7 +34,7 @@ class Logger {
3534 this . containerLoggers = [ ] ;
3635 this . totalLogSize = 0 ;
3736 this . taskLogger = undefined ;
38- this . buildFinishedPromise = buildFinishedPromise || Q . resolve ( ) ;
37+ this . buildFinishedPromise = buildFinishedPromise || Promise . resolve ( ) ;
3938 this . finishedContainers = 0 ;
4039 this . finishedContainersEmitter = new EventEmitter ( ) ;
4140 this . showProgress = showProgress ;
@@ -77,7 +76,7 @@ class Logger {
7776 * will attach it self to all existing containers if requested
7877 * the container label should be 'io.codefresh.loggerId'
7978 */
80- start ( ) {
79+ async start ( ) {
8180
8281 logger . info ( `Logging container created for logger id: ${ this . loggerId } ` ) ;
8382
@@ -124,7 +123,7 @@ class Logger {
124123
125124 } ) ;
126125
127- this . _listenForEngineUpdates ( ) ;
126+ await this . _listenForEngineUpdates ( ) ;
128127 }
129128
130129 _readState ( ) {
@@ -188,9 +187,11 @@ class Logger {
188187 const receivedLoggerId = _ . get ( container , 'Labels' , _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.id' ] ;
189188 const runCreationLogic = _ . get ( container , 'Labels' , _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.runCreationLogic' ] ;
190189 const stepName = _ . get ( container , 'Labels' , _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.stepName' ] ;
191- const receivedLogSizeLimit = _ . get ( container ,
190+ const receivedLogSizeLimit = _ . get (
191+ container ,
192192 'Labels' ,
193- _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.logSizeLimit' ] ;
193+ _ . get ( container , 'Actor.Attributes' )
194+ ) [ 'io.codefresh.logger.logSizeLimit' ] ;
194195 const loggerStrategy = _ . get ( container , 'Labels' , _ . get ( container , 'Actor.Attributes' ) ) [ 'io.codefresh.logger.strategy' ] ;
195196
196197 if ( ! containerId ) {
@@ -350,31 +351,45 @@ class Logger {
350351 } ) ;
351352 }
352353
353- _listenForEngineUpdates ( ) {
354- const app = express ( ) ;
355- this . _app = app ;
356- const port = process . env . PORT || 8080 ;
357- const host = process . env . HOST || 'localhost' ;
358-
359- app . use ( bodyParser . json ( ) ) ;
360-
361- app . post ( '/secrets' , ( req , res ) => {
362- try {
363- const secret = req . body ;
364- logger . info ( `got request to add new mask: ${ JSON . stringify ( secret ) } ` ) ;
365-
366- // secret must have { key, value } structure
367- this . taskLogger . addNewMask ( secret ) ;
368- res . status ( 201 ) . end ( 'secret added' ) ;
369- } catch ( err ) {
370- logger . info ( `could not create new mask due to error: ${ err } ` ) ;
371- res . status ( 400 ) . end ( err ) ;
372- }
373- } ) ;
354+ async _listenForEngineUpdates ( ) {
355+ try {
356+ const port = + ( process . env . PORT || 8080 ) ;
357+ const host = process . env . HOST || '0.0.0.0' ;
358+
359+ const server = fastify ( ) ;
360+ const secretsOptions = {
361+ schema : {
362+ body : {
363+ type : 'object' ,
364+ required : [ 'key' , 'value' ] ,
365+ properties : {
366+ key : { type : 'string' } ,
367+ value : { type : 'string' } ,
368+ } ,
369+ } ,
370+ } ,
371+ } ;
372+ server . post ( '/secrets' , secretsOptions , async ( request , reply ) => {
373+ try {
374+ const { body : secret } = request ;
375+ logger . info ( `got request to add new mask: ${ secret . key } ` ) ;
376+ this . taskLogger . addNewMask ( secret ) ;
377+ reply . code ( 201 ) ;
378+ return 'secret added' ;
379+ } catch ( err ) {
380+ logger . info ( `could not create new mask for due to error: ${ err } ` ) ;
381+ reply . code ( 500 ) ;
382+ throw err ;
383+ }
384+ } ) ;
374385
375- app . listen ( port , host , ( ) => {
376- logger . info ( `listening for engine updates on ${ host } :${ port } ` ) ;
377- } ) ;
386+ const address = await server . listen ( { host, port } ) ;
387+ await saveServerAddress ( address ) ;
388+ logger . info ( `listening for engine updates on ${ address } ` ) ;
389+ } catch ( error ) {
390+ logger . error ( `could not start server for engine updates due to error: ${ error } ` ) ;
391+ throw error ;
392+ }
378393 }
379394
380395 _handleContainerStreamEnd ( containerId ) {
@@ -385,7 +400,7 @@ class Logger {
385400
386401 // do not call before build is finished
387402 _awaitAllStreamsClosed ( ) {
388- const deferred = Q . defer ( ) ;
403+ const deferred = getPromiseWithResolvers ( ) ;
389404 this . _checkAllStreamsClosed ( deferred ) ;
390405 this . finishedContainersEmitter . on ( 'end' , this . _checkAllStreamsClosed . bind ( this , deferred ) ) ;
391406 return deferred . promise ;
0 commit comments