diff --git a/package.json b/package.json index ada05c0..75792e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@codefresh-io/task-logger", - "version": "1.8.16", + "version": "1.8.17", "description": "Codefresh utilities for working with build logs", "main": "index.js", "scripts": { diff --git a/taskLogger/mongo/StepLogger.js b/taskLogger/mongo/StepLogger.js index be93ea4..58ce637 100644 --- a/taskLogger/mongo/StepLogger.js +++ b/taskLogger/mongo/StepLogger.js @@ -1,29 +1,26 @@ -const _ = require('lodash'); -const BaseStepLogger = require('../StepLogger'); -const MongoTaskLogger = require('./TaskLogger'); -const { STATUS } = require('../enums'); -const MongoHelper = require('./mongoHelper'); -const EventEmitter = require('events'); - +const _ = require('lodash'); +const BaseStepLogger = require('../StepLogger'); +const MongoTaskLogger = require('./TaskLogger'); +const { STATUS } = require('../enums'); +const MongoHelper = require('./mongoHelper'); class MongoStepLogger extends BaseStepLogger { constructor(step, opts, taskLogger) { super(step, opts, taskLogger); this.db = MongoTaskLogger.getConnection(opts); - this.emitter = new EventEmitter(); } async restore() { const key = 'name'; const doc = await new Promise((resolve, reject) => { this.db.collection(MongoHelper.getCollection(key)).find(this.getFilter()) - .toArray((err, docs) => { - if (err) { - reject(err); - } else { - resolve(docs && docs[0]); - } - }); + .toArray((err, docs) => { + if (err) { + reject(err); + } else { + resolve(docs && docs[0]); + } + }); }); const stepFromDoc = _.get(doc, `steps[${this.name}]`); if (stepFromDoc) { @@ -38,12 +35,12 @@ class MongoStepLogger extends BaseStepLogger { return new Promise((resolve, reject) => { this.db.collection(MongoHelper.getCollection('logs')).find( where, { sort }) - .toArray((err, docs) => { - if (err) { - reject(err); - } - resolve(docs); - }); + .toArray((err, docs) => { + if (err) { + reject(err); + } + resolve(docs); + }); }); } @@ -53,7 +50,7 @@ class MongoStepLogger extends BaseStepLogger { this.db.collection(MongoHelper.getCollection(key)).insertOne( this.getObjectToPush(key, message, syncId), (err) => { if (err) { - this.emitter.emit('ERROR', err); + this.emit('error', err); } }); } @@ -63,7 +60,7 @@ class MongoStepLogger extends BaseStepLogger { this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), { $set: { [key]: this.outputUrl } }, { upsert: true }, (err) => { if (err) { - this.emitter.emit('ERROR', err); + this.emit('error', err); } }); } @@ -73,7 +70,7 @@ class MongoStepLogger extends BaseStepLogger { this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), { $set: { [key]: this.environmentName } }, { upsert: true }, (err) => { if (err) { - this.emitter.emit('ERROR', err); + this.emit('error', err); } }); } @@ -83,7 +80,7 @@ class MongoStepLogger extends BaseStepLogger { this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), { $set: { [key]: this.environmentId } }, { upsert: true }, (err) => { if (err) { - this.emitter.emit('ERROR', err); + this.emit('error', err); } }); } @@ -93,7 +90,7 @@ class MongoStepLogger extends BaseStepLogger { this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), { $set: { [key]: this.activityId } }, { upsert: true }, (err) => { if (err) { - this.emitter.emit('ERROR', err); + this.emit('error', err); } }); } @@ -101,51 +98,51 @@ class MongoStepLogger extends BaseStepLogger { _reportLastUpdate() { const key = `steps.${this.name}.lastUpdate`; this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), - { $set: { [key]: this.lastUpdate } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { [key]: this.lastUpdate } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } _reportPrevioulyExecuted() { const key = `steps.${this.name}.previouslyExecuted`; this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), - { $set: { [key]: this.previouslyExecuted } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { [key]: this.previouslyExecuted } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } async _reportStatus() { const key = `steps.${this.name}.status`; return this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), - { $set: { [key]: this.status } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { [key]: this.status } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } async _reportFinishTimestamp() { const key = `steps.${this.name}.finishTimeStamp`; return this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), - { $set: { [key]: this.finishTimeStamp } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { [key]: this.finishTimeStamp } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } _reportCreationTimestamp() { const key = `steps.${this.name}.creationTimeStamp`; this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), - { $set: { [key]: this.creationTimeStamp } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { [key]: this.creationTimeStamp } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } _reportMemoryUsage(time, memoryUsage, syncId) { @@ -153,7 +150,7 @@ class MongoStepLogger extends BaseStepLogger { this.db.collection(MongoHelper.getCollection(key)).insertOne( this.getObjectToPush(key, { time, usage: memoryUsage }, syncId), (err) => { if (err) { - this.emitter.emit('ERROR', err); + this.emit('error', err); } }); } @@ -163,7 +160,7 @@ class MongoStepLogger extends BaseStepLogger { this.db.collection(MongoHelper.getCollection(key)).insertOne( this.getObjectToPush(key, { time, usage: cpuUsage }, syncId), (err) => { if (err) { - this.emitter.emit('ERROR', err); + this.emit('error', err); } }); } @@ -171,21 +168,21 @@ class MongoStepLogger extends BaseStepLogger { _reportLogSize() { const key = `steps.${this.name}.metrics.logs.total`; this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), - { $set: { [key]: this.logSize } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { [key]: this.logSize } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } reportName() { const key = `steps.${this.name}.name`; this.db.collection(MongoHelper.getCollection(key)).updateOne(this.getFilter(), - { $set: { [key]: this.name } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { [key]: this.name } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } clearLogs() { @@ -212,7 +209,6 @@ class MongoStepLogger extends BaseStepLogger { jobId: this.jobId }; } - } module.exports = MongoStepLogger; diff --git a/taskLogger/mongo/TaskLogger.js b/taskLogger/mongo/TaskLogger.js index fb9439b..707f33c 100644 --- a/taskLogger/mongo/TaskLogger.js +++ b/taskLogger/mongo/TaskLogger.js @@ -1,20 +1,18 @@ -const TaskLogger = require('../TaskLogger'); -const CFError = require('cf-errors'); -const MongoClient = require('mongodb').MongoClient; -const { TYPES, STATUS } = require('../enums'); -const EventEmitter = require('events'); +const TaskLogger = require('../TaskLogger'); +const CFError = require('cf-errors'); +const MongoClient = require('mongodb').MongoClient; +const { TYPES, STATUS } = require('../enums'); -const mongoCacheMap = new Map(); +const mongoCacheMap = new Map(); class MongoTaskLogger extends TaskLogger { - constructor(db, task, opts) { super(task, opts); this.db = db; this.mongoDBName = opts.mongo.mongoDBName; this.type = TYPES.MONGO; - this.emitter = new EventEmitter(); } + static async factory(task, opts) { if (!opts || !opts.mongo) { throw new CFError(CFError.Errors.Error, 'no config'); @@ -57,13 +55,13 @@ class MongoTaskLogger extends TaskLogger { const dbSteps = await new Promise((resolve, reject) => { this.db.collection(this.getCollection(key)).find( Object.assign({ 'name': { $exists: true } }, this.getFilter())) - .toArray((err, docs) => { - if (err) { - reject(err); - } else { - resolve(docs); - } - }); + .toArray((err, docs) => { + if (err) { + reject(err); + } else { + resolve(docs); + } + }); }); if (dbSteps) { @@ -72,11 +70,11 @@ class MongoTaskLogger extends TaskLogger { this.steps = dbSteps.reduce((acc, current) => { const name = current.name; acc[name] = - new StepLogger({ - name: current.name, - jobId: this.jobId, - accountId: this.accountId - }, this.opts, this); + new StepLogger({ + name: current.name, + jobId: this.jobId, + accountId: this.accountId + }, this.opts, this); acc[name].pendingApproval = current.status === STATUS.PENDING_APPROVAL; acc[name].status = current.status; return acc; @@ -97,14 +95,14 @@ class MongoTaskLogger extends TaskLogger { const key = 'lastUpdate'; return new Promise((resolve, reject) => { this.db.collection(this.getCollection(key)).find( - this.getFilter()) - .toArray((err, docs) => { - if (err) { - reject(err); - } else { - resolve(docs && docs[0] && docs[0].lastUpdate); - } - }); + this.getFilter()) + .toArray((err, docs) => { + if (err) { + reject(err); + } else { + resolve(docs && docs[0] && docs[0].lastUpdate); + } + }); }); } @@ -112,92 +110,95 @@ class MongoTaskLogger extends TaskLogger { const key = 'lastUpdate'; const filter = this.getFilter(); this.db.collection(this.getCollection(key)).updateOne(filter, - { $set: Object.assign({ [key]: value }, filter) }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: Object.assign({ [key]: value }, filter) }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } async reportId() { const key = 'id'; const filter = this.getFilter(); return this.db.collection(this.getCollection(key)).updateOne(filter, - { $set: Object.assign({ [key]: this.jobId }, filter) }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: Object.assign({ [key]: this.jobId }, filter) }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } + async reportAccountId() { const key = 'accountId'; const filter = this.getFilter(); return this.db.collection(this.getCollection(key)).updateOne(filter, - { $set: Object.assign({ [key]: this.accountId }, filter) }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: Object.assign({ [key]: this.accountId }, filter) }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } + _reportMemoryUsage(time, memoryUsage) { const key = 'metrics.memory'; const filter = this.getFilter(); this.db.collection(this.getCollection(key)).insertOne( - Object.assign({ 'slot': 'metrics.memory', 'payload': { time, usage: memoryUsage } }, filter), { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + Object.assign({ 'slot': 'metrics.memory', 'payload': { time, usage: memoryUsage } }, filter), { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } _reportMemoryLimit() { const key = 'metrics.limits.memory'; this.db.collection(this.getCollection(key)).updateOne(this.getFilter(), - { $set: { 'metrics.limits.memory': { 'value': this.memoryLimit } } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { 'metrics.limits.memory': { 'value': this.memoryLimit } } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } async _reportVisibility() { const key = 'visibility'; return this.db.collection(this.getCollection(key)).updateOne(this.getFilter(), - { $set: { [key]: this.visibility } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { [key]: this.visibility } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } async _reportData() { const key = 'data'; return this.db.collection(this.getCollection(key)).updateOne(this.getFilter(), - { $set: { 'data': this.data } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { 'data': this.data } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } async _reportStatus() { const key = 'data'; return this.db.collection(this.getCollection(key)).updateOne(this.getFilter(), - { $set: { 'status': this.status } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { 'status': this.status } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } + _reportLogSize() { const key = 'metrics'; this.db.collection(this.getCollection(key)).updateOne(this.getFilter(), - { $set: { 'metrics.logs.total': this.logSize } }, { upsert: true }, (err) => { - if (err) { - this.emitter.emit('ERROR', err); - } - }); + { $set: { 'metrics.logs.total': this.logSize } }, { upsert: true }, (err) => { + if (err) { + this.emit('error', err); + } + }); } async _getStepsName() { @@ -208,7 +209,6 @@ class MongoTaskLogger extends TaskLogger { if (err) { reject(err); } else { - resolve(doc); } }); @@ -222,7 +222,7 @@ class MongoTaskLogger extends TaskLogger { if (!dbSteps) { return; } - // const stepFromRedis = Object.keys(keyToStatus); + // const stepFromRedis = Object.keys(keyToStatus); const StepLogger = require('./StepLogger'); // eslint-disable-line const steps = await Promise.all(Object.keys(dbSteps.steps).map((name) => { const logger = new StepLogger({ @@ -237,7 +237,8 @@ class MongoTaskLogger extends TaskLogger { const step = steps[idx] || []; return { name, - logs: step.map(record => record.payload) }; + logs: step.map(record => record.payload) + }; }, {}); // eslint-disable-next-line consistent-return return { @@ -259,5 +260,6 @@ class MongoTaskLogger extends TaskLogger { return key === 'metrics.memory' ? 'logs' : 'metadata'; } } + MongoTaskLogger.TYPE = TYPES.MONGO; module.exports = MongoTaskLogger;