@natlibfi/melinda-rest-api-commons 2.3.2-alpha.8 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/amqp.health.spec.js +69 -0
- package/dist/amqp.health.spec.js.map +1 -0
- package/dist/amqp.js +29 -17
- package/dist/amqp.js.map +1 -1
- package/dist/amqp.tests.spec.js +338 -0
- package/dist/amqp.tests.spec.js.map +1 -0
- package/dist/mongo.js +13 -3
- package/dist/mongo.js.map +1 -1
- package/dist/mongo.spec.js.draft +54 -0
- package/dist/mongoLog.js +10 -5
- package/dist/mongoLog.js.map +1 -1
- package/package.json +122 -118
- package/dist/amqp.spec.js +0 -252
- package/dist/amqp.spec.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amqp.tests.spec.js","names":["setTimeoutPromise","promisify","setTimeout","debug","createDebugLogger","testData","queue","correlationId","data","amqpUrl","amqpOperator","generateTests","callback","path","__dirname","recurse","useMetadataFile","fixura","failWhenNotFound","reader","READERS","JSON","mocha","before","amqpFactory","beforeEach","checkQueue","toRecord","purge","afterEach","removeQueue","after","closeConnection","getFixture","expectToFail","expectedErrorStatus","ackMessages","nackMessages","checkNextMessage","checkQueueStyle","sentToQueue","expectedMessageCount","expectedErrorMessage","undefined","expectApiError","expectFalseCheckResult","sendMessagesToQueue","ackOrNackMessages","queueRemoval","messageCount","style","expect","to","eql","headers","records","queueCheckNextMessage","nextMessage","expectedNextMessage","error","equal","testErrors","be","instanceOf","ApiError","status","payload","not","constructor","name","consumeOne","result","have","property","length","messages","fields","deliveryTag","redelivered","routingKey","expectedResult","message","promises","map","sendToQueue","Promise","all"],"sources":["../src/amqp.tests.spec.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2022 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {expect} from 'chai';\nimport {READERS} from '@natlibfi/fixura';\nimport createDebugLogger from 'debug';\nimport generateTests from '@natlibfi/fixugen';\nimport {amqpFactory} from './index';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {promisify} from 'util';\n\nconst setTimeoutPromise = promisify(setTimeout);\nconst debug = createDebugLogger('@natlibfi/melinda-rest-api-commons:amqp:test');\n//const debugData = debug.extend('data');\n\nconst testData = {\n queue: 'TESTQUEUE',\n correlationId: 'aaaaaaaa-0000-aaaa-0000-000000000000',\n data: {'leader': '02518cam a2200745zi 4500', 'fields': [{'tag': '001', 'value': '000019640'}]}\n};\n\ndebug(`Testing amqp against a local AMQP instance - we'll need some kind of mockup for this`);\nconst amqpUrl = 'amqp://127.0.0.1:5672/';\n// eslint-disable-next-line functional/no-let\nlet amqpOperator;\n\ngenerateTests({\n callback,\n path: [__dirname, '..', 'test-fixtures', 'amqp'],\n recurse: false,\n useMetadataFile: true,\n fixura: {\n failWhenNotFound: true,\n reader: READERS.JSON\n },\n mocha: {\n before: async () => {\n debug(`Connecting to ${amqpUrl}, with healthCheck running`);\n amqpOperator = await amqpFactory(amqpUrl, true);\n },\n beforeEach: async () => {\n await amqpOperator.checkQueue({queue: testData.queue, toRecord: false, purge: true});\n },\n afterEach: async () => {\n await amqpOperator.removeQueue(testData.queue);\n },\n after: async () => {\n await amqpOperator.closeConnection();\n //await testHeathCheck();\n }\n }\n});\n\n// eslint-disable-next-line max-statements\nasync function callback({\n getFixture,\n expectToFail = false,\n expectedErrorStatus = '',\n ackMessages = false,\n nackMessages = false,\n checkNextMessage = false,\n checkQueueStyle = false,\n queue = testData.queue,\n sentToQueue,\n expectedMessageCount,\n removeQueue = false,\n expectedErrorMessage = undefined,\n expectApiError = false,\n expectFalseCheckResult = false\n}) {\n try {\n await sendMessagesToQueue();\n\n await ackOrNackMessages();\n\n await checkQueue();\n\n await queueRemoval();\n\n const messageCount = await amqpOperator.checkQueue({queue, style: 'messages'});\n debug(`MessageCount: ${messageCount}`);\n expect(messageCount).to.eql(expectedMessageCount);\n\n if (checkNextMessage) { // eslint-disable-line\n const {headers, records} = await queueCheckNextMessage();\n const nextMessage = {headers, records};\n const expectedNextMessage = getFixture('expectedMessage.json');\n expect(nextMessage).to.eql(expectedNextMessage);\n }\n\n } catch (error) {\n if (!expectToFail) {\n throw error;\n }\n expect(expectToFail, 'This is expected to fail').to.equal(true);\n testErrors(error);\n }\n\n function testErrors(error) {\n\n if (expectApiError) {\n expect(error).to.be.instanceOf(ApiError);\n debug(`We expected and got an ApiError`);\n expect(error.status).to.equal(expectedErrorStatus);\n\n if (expectedErrorMessage) {\n expect(error.payload).to.eql(expectedErrorMessage);\n return;\n }\n\n return;\n }\n expect(error).not.to.be.instanceOf(ApiError);\n debug(`We expected and got an non-ApiError`);\n debug(`Error is a ${error.constructor.name}`);\n }\n\n function queueRemoval() {\n if (removeQueue) {\n return amqpOperator.removeQueue(removeQueue);\n }\n\n return;\n }\n\n function queueCheckNextMessage() {\n if (checkNextMessage) {\n return amqpOperator.consumeOne(testData.queue, true);\n }\n\n return false;\n }\n\n // eslint-disable-next-line max-statements\n async function checkQueue() {\n debug(`checkQueueStyle: ${checkQueueStyle}`);\n\n if (checkQueueStyle === 'oneToRecord') {\n const result = await amqpOperator.checkQueue({queue, style: 'one', toRecord: true, purge: false});\n\n if (expectFalseCheckResult) {\n expect(result).to.eql(false);\n return;\n }\n\n expect(result).to.have.property('headers');\n expect(result).to.have.property('records');\n expect(result).to.have.property('messages');\n expect(result.records.length).to.eql(1);\n expect(result.messages.length).to.eql(1);\n\n return;\n }\n\n if (checkQueueStyle === 'oneNotRecord') {\n const result = await amqpOperator.checkQueue({queue, style: 'one', toRecord: false, purge: false});\n const {fields} = result;\n\n if (expectFalseCheckResult) {\n expect(result).to.eql(false);\n return;\n }\n\n expect(fields).to.have.property('deliveryTag');\n expect(fields).to.have.property('exchange');\n expect(fields).to.have.property('messageCount');\n expect(fields).to.have.property('redelivered');\n expect(fields).to.have.property('routingKey');\n expect(typeof fields.deliveryTag).to.be.eql('number');\n expect(typeof fields.messageCount).to.be.eql('number');\n expect(typeof fields.redelivered).to.be.eql('boolean');\n expect(typeof fields.routingKey).to.be.eql('string');\n\n return;\n }\n\n if (checkQueueStyle === 'basicToRecord') {\n const result = await amqpOperator.checkQueue({queue, style: 'basic', toRecord: true, purge: false});\n\n if (expectFalseCheckResult) {\n expect(result).to.eql(false);\n return;\n }\n\n expect(result).to.have.property('headers');\n expect(result).to.have.property('records');\n expect(result).to.have.property('messages');\n expect(result.records.length).to.eql(3);\n expect(result.messages.length).to.eql(3);\n const expectedResult = getFixture('expectedResult.json');\n expect(result.records).to.eql(expectedResult);\n\n return;\n }\n\n if (checkQueueStyle === 'basicNotRecord') {\n const result = await amqpOperator.checkQueue({queue, style: 'basic', toRecord: false, purge: false});\n\n if (expectFalseCheckResult) {\n expect(result).to.eql(false);\n return;\n }\n\n expect(result).to.have.property('headers');\n expect(result).to.have.property('messages');\n expect(result.messages.length).to.eql(3);\n\n const [{fields}] = result.messages;\n\n expect(fields).to.have.property('deliveryTag');\n expect(fields).to.have.property('exchange');\n expect(fields).to.have.property('messageCount');\n expect(fields).to.have.property('redelivered');\n expect(fields).to.have.property('routingKey');\n\n expect(typeof fields.deliveryTag).to.be.eql('number');\n expect(typeof fields.messageCount).to.be.eql('number');\n expect(typeof fields.redelivered).to.be.eql('boolean');\n expect(typeof fields.routingKey).to.be.eql('string');\n\n return;\n }\n\n if (checkQueueStyle === 'purge') {\n return amqpOperator.checkQueue({queue, style: 'messages', purge: true});\n }\n\n if (checkQueueStyle === 'foobar') {\n return amqpOperator.checkQueue({queue, style: 'foobar', toRecord: false, purge: false});\n }\n\n return false;\n }\n\n async function ackOrNackMessages() {\n if (ackMessages) {\n const message = await amqpOperator.consumeOne(testData.queue, false);\n await amqpOperator.ackMessages([message]);\n\n return setTimeoutPromise(10);\n }\n\n if (nackMessages) {\n const message = await amqpOperator.consumeOne(testData.queue, false);\n await amqpOperator.nackMessages([message]);\n\n return setTimeoutPromise(10);\n }\n\n return;\n }\n\n async function sendMessagesToQueue() {\n if (sentToQueue) {\n const messages = getFixture('input.json');\n // {queue, correlationId, headers, data}\n\n const promises = messages.map(message => amqpOperator.sendToQueue(message));\n await Promise.all(promises);\n\n return setTimeoutPromise(10);\n }\n\n return;\n }\n}\n\n/*\nfunction testHeathCheck() {\n return it('expects healthCheck', async () => {\n\n const amqpOperator2 = await amqpFactory(amqpUrl, true);\n try {\n\n debug(`**********`);\n await testHealthCheckLoopWorking(amqpOperator2);\n\n debug(`**********`);\n await testHealthCheckLoopErroring(amqpOperator2);\n } catch (error) {\n debug(error);\n expect(error).to.eql('');\n } finally {\n amqpOperator2.closeConnection();\n }\n\n async function testHealthCheckLoopWorking(amqpOperator) {\n debug(`Testing healthCheckLoop for ${amqpOperator}`);\n debug(`Waiting 0.5s and expecting healthCheckLoop to work`);\n await setTimeoutPromise('500');\n debug(`Amqp Operator should have been alive.`);\n }\n\n async function testHealthCheckLoopErroring(amqpOperator) {\n debug(`Testing healthCheckLoop with closed channel`);\n amqpOperator.closeChannel();\n debug(`Waiting 0.5s and expecting healthCheckLoop to throw error`);\n await setTimeoutPromise('500');\n debug(`amqpOperator should have errored`);\n }\n });\n}\n*/\n"],"mappings":"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"}
|
package/dist/mongo.js
CHANGED
|
@@ -13,6 +13,7 @@ var _moment = _interopRequireDefault(require("moment"));
|
|
|
13
13
|
var _httpStatus = _interopRequireDefault(require("http-status"));
|
|
14
14
|
var _mongoSanitize = _interopRequireDefault(require("mongo-sanitize"));
|
|
15
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
/* eslint-disable max-lines */
|
|
16
17
|
/**
|
|
17
18
|
*
|
|
18
19
|
* @licstart The following is the entire license notice for the JavaScript code in this file.
|
|
@@ -143,10 +144,13 @@ async function _default(MONGO_URI, collection) {
|
|
|
143
144
|
}
|
|
144
145
|
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR);
|
|
145
146
|
} catch (error) {
|
|
147
|
+
const errorMessage = error.payload || error.message || '';
|
|
146
148
|
(0, _utils.logError)(error);
|
|
147
|
-
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR);
|
|
149
|
+
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
|
|
148
150
|
}
|
|
149
151
|
}
|
|
152
|
+
|
|
153
|
+
// eslint-disable-next-line max-statements
|
|
150
154
|
async function createBulk({
|
|
151
155
|
correlationId,
|
|
152
156
|
cataloger,
|
|
@@ -196,8 +200,9 @@ async function _default(MONGO_URI, collection) {
|
|
|
196
200
|
}));
|
|
197
201
|
});
|
|
198
202
|
} catch (error) {
|
|
203
|
+
const errorMessage = error.payload || error.message || '';
|
|
199
204
|
(0, _utils.logError)(error);
|
|
200
|
-
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR);
|
|
205
|
+
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
|
|
201
206
|
}
|
|
202
207
|
}
|
|
203
208
|
logger.debug(`No stream`);
|
|
@@ -214,8 +219,9 @@ async function _default(MONGO_URI, collection) {
|
|
|
214
219
|
}
|
|
215
220
|
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR);
|
|
216
221
|
} catch (error) {
|
|
222
|
+
const errorMessage = error.payload || error.message || '';
|
|
217
223
|
(0, _utils.logError)(error);
|
|
218
|
-
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR);
|
|
224
|
+
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
|
|
219
225
|
}
|
|
220
226
|
}
|
|
221
227
|
}
|
|
@@ -473,7 +479,9 @@ async function _default(MONGO_URI, collection) {
|
|
|
473
479
|
logger.debug(`getOne not working!`);
|
|
474
480
|
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, 'Missing parameters, cannot get queueItem');
|
|
475
481
|
} catch (error) {
|
|
482
|
+
const errorMessage = error.payload || error.message || '';
|
|
476
483
|
(0, _utils.logError)(error);
|
|
484
|
+
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
|
|
477
485
|
}
|
|
478
486
|
}
|
|
479
487
|
function getStream(correlationId) {
|
|
@@ -483,7 +491,9 @@ async function _default(MONGO_URI, collection) {
|
|
|
483
491
|
// Return content stream
|
|
484
492
|
return gridFSBucket.openDownloadStreamByName(clean);
|
|
485
493
|
} catch (error) {
|
|
494
|
+
const errorMessage = error.payload || error.message || '';
|
|
486
495
|
(0, _utils.logError)(error);
|
|
496
|
+
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
|
|
487
497
|
}
|
|
488
498
|
}
|
|
489
499
|
async function pushIds({
|
package/dist/mongo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.js","names":["MONGO_URI","collection","logger","createLogger","client","MongoClient","connect","useNewUrlParser","useUnifiedTopology","db","gridFSBucket","GridFSBucket","bucketName","createPrio","createBulk","checkAndSetState","checkAndSetImportJobState","query","queryById","remove","readContent","removeContent","getOne","getStream","setState","setImportJobState","pushIds","pushMessages","setOperation","setOperations","addBlobSize","setBlobSize","correlationId","cataloger","oCatalogerIn","operation","operationSettings","time","moment","toDate","newQueueItem","operations","prio","queueItemState","QUEUE_ITEM_STATE","VALIDATOR","PENDING_VALIDATION","blobSize","importJobState","CREATE","IMPORT_JOB_STATE","EMPTY","UPDATE","records","errorMessage","errorStatus","creationTime","modificationTime","result","insertOne","acknowledged","info","ApiError","httpStatus","INTERNAL_SERVER_ERROR","error","logError","contentType","recordLoadParams","stream","UPLOADING","WAITING_FOR_RECORDS","Promise","resolve","reject","outputStream","openUploadStream","on","chunk","write","end","undefined","debug","state","timeOut","checkTimeOut","params","showParams","showOperations","showOperationSettings","showRecordLoadParams","showImportJobState","limit","skip","rest","find","projection","_id","parseInt","toArray","length","checkModTime","findOne","queueitemState","oldState","ABORT","ERROR","DONE","includes","silly","timeoutTime","add","isBefore","finalImportJobStates","REQUEST_TIMEOUT","JSON","stringify","clean","sanitize","noContent","deleteOne","err","MongoDriverError","message","indexOf","noStream","readStream","openDownloadStreamByName","BAD_REQUEST","NOT_FOUND","delete","cleanQueueItemState","handledIds","rejectedIds","verbose","updateOne","$set","$push","$each","messages","messageField","cleanMessageField","errorString","stateInQueueItemStates","Object","values","stateInQueueItemStatesValidator","stateInQueueItemStatesImporter","IMPORTER","updateValues","keys","forEach","key","findOneAndUpdate","returnNewDocument","cleanCorrelationId","cleanImportJobState","OPERATIONS","newJobState","newOperation","oldOperation","cleanNewOperation","ok","addOperation","removeOperation","queueItem","oldOperations","operationsAfterRemove","filter","operationsAfterRemoveAndAdd","$inc","cleanBlobSize"],"sources":["../src/mongo.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020-2021 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {MongoClient, GridFSBucket, MongoDriverError} from 'mongodb';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {QUEUE_ITEM_STATE, IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport {logError} from './utils.js';\nimport moment from 'moment';\nimport httpStatus from 'http-status';\nimport sanitize from 'mongo-sanitize';\n//import isDeepStrictEqual from 'util';\n\n/* QueueItem:\n{\n \"correlationId\":\"FOO\",\n \"cataloger\":\"xxx0000\",\n \"oCatalogerIn\":\"xxx0000\"\n \"operation\":\"UPDATE\",\n \"operations\":[\"UPDATE\", \"CREATE\"]\n \"contentType\":\"application/json\",\n \"recordLoadParams\": {\n \"pActiveLibrary\": \"XXX00\",\n \"pInputFile\": \"filename.seq\",\n \"pRejectFile\": \"filename.rej\",\n \"pLogFile\": \"filename.syslog\",\n \"pOldNew\": \"NEW\"\n },\n \"queueItemState\":\"PENDING_QUEUING\",\n \"importJobState\": {\n \"CREATE\": \"EMPTY\",\n \"UPDATE\": \"EMPTY\"\n },\n blobSize: 1,\n records: [],\n errorMessage: '',\n errorStatus: '',\n \"creationTime\":\"2020-01-01T00:00:00.000Z\",\n \"modificationTime\":\"2020-01-01T00:00:01.000Z\",\n}\n*/\n\nexport default async function (MONGO_URI, collection) {\n const logger = createLogger();\n\n // Connect to mongo (MONGO)\n const client = await MongoClient.connect(MONGO_URI, {useNewUrlParser: true, useUnifiedTopology: true});\n const db = client.db('rest-api');\n const gridFSBucket = new GridFSBucket(db, {bucketName: collection});\n\n return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, queryById, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n\n async function createPrio({correlationId, cataloger, oCatalogerIn, operation, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n operation,\n operations: [operation],\n oCatalogerIn,\n operationSettings: {\n prio: true,\n ...operationSettings\n },\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.PENDING_VALIDATION,\n blobSize: 1,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n try {\n const result = await db.collection(collection).insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New PRIO queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return;\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n }\n }\n\n async function createBulk({correlationId, cataloger, oCatalogerIn, operation, contentType, recordLoadParams, stream, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n oCatalogerIn,\n operation,\n operations: [operation],\n operationSettings: {\n prio: false,\n ...operationSettings\n },\n contentType,\n recordLoadParams,\n queueItemState: stream ? QUEUE_ITEM_STATE.VALIDATOR.UPLOADING : QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS,\n blobSize: 0,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n\n // eslint-disable-next-line functional/no-conditional-statement\n if (stream) {\n try {\n // No await here, promises later\n db.collection(collection).insertOne(newQueueItem);\n logger.info(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n return new Promise((resolve, reject) => {\n const outputStream = gridFSBucket.openUploadStream(correlationId);\n\n stream\n .on('error', reject)\n .on('data', chunk => outputStream.write(chunk))\n .on('end', () => outputStream.end(undefined, undefined, () => {\n resolve(correlationId);\n }));\n });\n } catch (error) {\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n }\n }\n\n logger.debug(`No stream`);\n // eslint-disable-next-line functional/no-conditional-statement\n if (!stream) {\n try {\n const result = await db.collection(collection).insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return {correlationId, queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS};\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n }\n }\n }\n\n // Check state that the queueItem has not waited too long and set state\n async function checkAndSetState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR\n // otherwise it sets queueItem to state ABORT (408, 'Timeout')\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return setState({correlationId, state, errorMessage, errorStatus});\n }\n return false;\n }\n\n // Check state that the queueItem has not waited too long and set state\n async function checkAndSetImportJobState({correlationId, operation, importJobState, errorMessage = '', errorStatus = ''}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR\n // otherwise it sets queueItem to state ABORT (408, 'Timeout')\n logger.debug(`${correlationId}, ${importJobState}, ${operation}`);\n const timeOut = await checkTimeOut({correlationId, operation, importJobState});\n if (timeOut) {\n return setImportJobState({correlationId, operation, importJobState, errorMessage, errorStatus});\n }\n return false;\n }\n\n async function query(params, showParams = {}) {\n const {showOperations = 0, showOperationSettings = 0, showRecordLoadParams = 0, showImportJobState = 0} = showParams;\n const {limit = 1000, skip = 0, ...rest} = params;\n const result = await db.collection(collection).find(rest, {projection: {\n _id: 0,\n operations: showOperations,\n operationSettings: showOperationSettings,\n recordLoadParams: showRecordLoadParams,\n importJobState: showImportJobState\n }})\n .limit(parseInt(limit, 10))\n .skip(parseInt(skip, 10))\n .toArray();\n logger.debug(`Query result: ${result.length > 0 ? 'Found!' : 'Not found!'}`);\n return result;\n }\n\n async function queryById({correlationId, checkModTime = false}) {\n const result = await db.collection(collection).findOne({correlationId});\n if (checkModTime) {\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return queryById({correlationId});\n }\n return result;\n }\n\n return result;\n }\n\n // Check that if the item has waited too long\n // If the last modification time for the queueItem is older than 1 minute\n // set state to ABORT and return false, otherwise return true\n // If the state is already ABORT or ERROR return false\n\n async function checkTimeOut({correlationId}) {\n const {modificationTime, queueitemState: oldState, importJobState} = await db.collection(collection).findOne({correlationId});\n\n // should we check for DONE too?\n if ([QUEUE_ITEM_STATE.ABORT, QUEUE_ITEM_STATE.ERROR, QUEUE_ITEM_STATE.DONE].includes(oldState)) {\n logger.silly(`${correlationId} has already state: ${oldState}`);\n return false;\n }\n\n const timeoutTime = moment(modificationTime).add(1, 'm');\n logger.silly(`timeOut @ ${timeoutTime}`);\n\n if (timeoutTime.isBefore()) {\n const finalImportJobStates = [IMPORT_JOB_STATE.ABORT, IMPORT_JOB_STATE.DONE, IMPORT_JOB_STATE.EMPTY, IMPORT_JOB_STATE.ERROR];\n if (!finalImportJobStates.includes(importJobState.CREATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'CREATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.UPDATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'UPDATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n await setState({correlationId, state: QUEUE_ITEM_STATE.ABORT, errorStatus: httpStatus.REQUEST_TIMEOUT, errorMessage: `Timeout in ${oldState}`});\n\n return false;\n }\n\n return true;\n }\n\n async function remove(params) {\n logger.silly(`${JSON.stringify(params)}`);\n logger.info(`Removing from Mongo (${collection}) id: ${params.correlationId}`);\n const clean = sanitize(params.correlationId);\n logger.silly(`mongo/remove: clean: ${JSON.stringify(clean)}`);\n\n try {\n //const metadataResult = await getFileMetadata({filename: clean});\n //logger.debug(`mongo/remove: metadataResult: ${JSON.stringify(metadataResult)}`);\n const noContent = await removeContent(params);\n if (noContent) {\n await db.collection(collection).deleteOne({correlationId: clean});\n return true;\n }\n } catch (err) {\n if (err instanceof MongoDriverError) {\n if (err.message.indexOf('File not found for id') !== -1) {\n logger.silly(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);\n await db.collection(collection).deleteOne({correlationId: clean});\n return true;\n }\n logger.error(err.message);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n }\n\n async function readContent(correlationId) {\n logger.info(`Reading content from mongo for id: ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n const result = await db.collection(collection).findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n\n if (result) {\n const {operationSettings} = result;\n if (operationSettings.prio === false && operationSettings.noStream === false) {\n return {\n contentType: result.contentType,\n readStream: gridFSBucket.openDownloadStreamByName(clean)\n };\n }\n logger.debug(`OperationSetting for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, {message: `Content is only available for streamBulk jobs. ${correlationId} is not a streamBulk job.`});\n }\n\n throw new ApiError(httpStatus.NOT_FOUND, {message: `Job ${correlationId} not found.`});\n }\n\n async function removeContent(params) {\n logger.info(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);\n const clean = sanitize(params.correlationId);\n\n const result = await db.collection(collection).findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n logger.silly(`mongo/removeContent: result ${JSON.stringify(result)}`);\n\n if (result) {\n await gridFSBucket.delete(clean);\n return true;\n }\n\n return true;\n }\n\n // eslint-disable-next-line max-statements\n function getOne({queueItemState, importJobState = undefined}) {\n\n logger.silly(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n const cleanQueueItemState = queueItemState ? {queueItemState: sanitize(queueItemState)} : undefined;\n\n try {\n\n // Just queueItemState\n if (queueItemState && importJobState === undefined) {\n logger.silly(`Checking DB ${collection} for just ${JSON.stringify(cleanQueueItemState.queueItemState)}`);\n return db.collection(collection).findOne({...cleanQueueItemState});\n }\n\n // importJobState\n if (importJobState && queueItemState === undefined) {\n logger.silly(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n return db.collection(collection).findOne({...importJobState});\n }\n\n // importJobState and queueItemState\n if (importJobState && queueItemState) {\n logger.silly(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n return db.collection(collection).findOne({...cleanQueueItemState, ...importJobState});\n }\n\n logger.debug(`getOne not working!`);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, 'Missing parameters, cannot get queueItem');\n\n } catch (error) {\n logError(error);\n }\n }\n\n function getStream(correlationId) {\n logger.info(`Forming stream from mongo for ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n try {\n // Return content stream\n return gridFSBucket.openDownloadStreamByName(clean);\n } catch (error) {\n logError(error);\n }\n }\n\n async function pushIds({correlationId, handledIds, rejectedIds}) {\n logger.verbose(`Push ids (${handledIds.length}) and rejectedIds (${rejectedIds.length}) ${correlationId} to ${collection}`);\n logger.debug(`ids (${handledIds.length}): ${JSON.stringify(handledIds)}, rejectedIds ${rejectedIds.length}: ${JSON.stringify(rejectedIds)}`);\n const clean = sanitize(correlationId);\n await db.collection(collection).updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n handledIds: {$each: handledIds},\n rejectedIds: {$each: rejectedIds}\n }\n });\n }\n\n async function pushMessages({correlationId, messages, messageField = 'messages'}) {\n logger.verbose(`Push messages (${messages.length}) to ${messageField} ${correlationId} to ${collection}`);\n logger.silly(`Messages (${messages.length}): ${JSON.stringify(messages)}}`);\n const clean = sanitize(correlationId);\n const cleanMessageField = sanitize(messageField);\n await db.collection(collection).updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n [cleanMessageField]: {$each: messages}\n }\n });\n }\n\n function setState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n const errorString = errorMessage || errorStatus ? `, Error message: '${JSON.stringify(errorMessage) || ''}', Error status: '${errorStatus || ''}'` : '';\n logger.info(`Setting queue-item state ${state} for ${correlationId}${errorString} to ${collection}`);\n\n const stateInQueueItemStates = Object.values(QUEUE_ITEM_STATE).indexOf(state) > -1;\n const stateInQueueItemStatesValidator = Object.values(QUEUE_ITEM_STATE.VALIDATOR).indexOf(state) > -1;\n const stateInQueueItemStatesImporter = Object.values(QUEUE_ITEM_STATE.IMPORTER).indexOf(state) > -1;\n if (!stateInQueueItemStates && !stateInQueueItemStatesValidator && !stateInQueueItemStatesImporter) {\n throw new ApiError(httpStatus.BAD_REQUEST, 'Trying to set invalid state');\n }\n\n const clean = sanitize(correlationId);\n const updateValues = {\n queueItemState: state,\n modificationTime: moment().toDate(),\n errorMessage,\n errorStatus\n };\n\n // Do not update value that are undefined\n // eslint-disable-next-line functional/immutable-data\n Object.keys(updateValues).forEach(key => updateValues[key] === undefined && delete updateValues[key]);\n\n return db.collection(collection)\n .findOneAndUpdate(\n {correlationId: clean},\n {$set: updateValues},\n {projection: {_id: 0}, returnNewDocument: true}\n );\n }\n\n function setImportJobState({correlationId, operation, importJobState}) {\n\n // should this also get importJobState as previously created object? {}\n logger.info(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanImportJobState = sanitize(importJobState);\n\n if (!(operation in OPERATIONS)) {\n throw new ApiError('400', 'Invalid operation for import job state');\n }\n\n if (!(cleanImportJobState in IMPORT_JOB_STATE)) {\n throw new ApiError('400', 'Invalid import job state');\n }\n\n const newJobState = operation === OPERATIONS.CREATE ? {'importJobState.CREATE': cleanImportJobState} : {'importJobState.UPDATE': cleanImportJobState};\n return db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n ...newJobState,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n }\n\n async function setOperation({correlationId, operation}) {\n const newOperation = operation;\n const {operation: oldOperation} = await db.collection(collection).findOne({correlationId});\n logger.info(`Setting queue-item operation from ${oldOperation} to ${newOperation} for ${correlationId} to ${collection}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanNewOperation = sanitize(newOperation);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operation: cleanNewOperation,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n return result.ok;\n // logger.debug(JSON.stringify(result));\n }\n\n async function setOperations({correlationId, addOperation, removeOperation = undefined}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const queueItem = await db.collection(collection).findOne({correlationId: cleanCorrelationId});\n logger.silly(`We found a queueItem: ${JSON.stringify(queueItem)}`);\n\n const oldOperations = queueItem.operations;\n\n logger.info(`Setting queue-item operations from ${JSON.stringify(oldOperations)} by adding ${addOperation} and removing ${removeOperation} for ${correlationId} to ${collection}`);\n\n const operationsAfterRemove = oldOperations.filter(operation => operation !== removeOperation);\n const operationsAfterRemoveAndAdd = operationsAfterRemove.includes(addOperation) ? operationsAfterRemove : [...operationsAfterRemove, addOperation];\n\n logger.silly(`operationsAfterRemove: ${operationsAfterRemove}`);\n logger.silly(`operationAfterRemoveAndAdd: ${operationsAfterRemoveAndAdd}`);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operations: operationsAfterRemoveAndAdd,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n return result.ok;\n // logger.debug(JSON.stringify(result));\n }\n\n async function addBlobSize({correlationId}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId,\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS\n }, {\n $inc: {\n blobSize: 1\n },\n $set: {\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n logger.verbose(`AddBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n return result;\n }\n\n async function setBlobSize({correlationId, blobSize}) {\n const cleanCorrelationId = sanitize(correlationId);\n const cleanBlobSize = sanitize(blobSize);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n blobSize: cleanBlobSize,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n logger.verbose(`SetBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n return result;\n }\n\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mongo.js","names":["MONGO_URI","collection","logger","createLogger","client","MongoClient","connect","useNewUrlParser","useUnifiedTopology","db","gridFSBucket","GridFSBucket","bucketName","createPrio","createBulk","checkAndSetState","checkAndSetImportJobState","query","queryById","remove","readContent","removeContent","getOne","getStream","setState","setImportJobState","pushIds","pushMessages","setOperation","setOperations","addBlobSize","setBlobSize","correlationId","cataloger","oCatalogerIn","operation","operationSettings","time","moment","toDate","newQueueItem","operations","prio","queueItemState","QUEUE_ITEM_STATE","VALIDATOR","PENDING_VALIDATION","blobSize","importJobState","CREATE","IMPORT_JOB_STATE","EMPTY","UPDATE","records","errorMessage","errorStatus","creationTime","modificationTime","result","insertOne","acknowledged","info","ApiError","httpStatus","INTERNAL_SERVER_ERROR","error","payload","message","logError","contentType","recordLoadParams","stream","UPLOADING","WAITING_FOR_RECORDS","Promise","resolve","reject","outputStream","openUploadStream","on","chunk","write","end","undefined","debug","state","timeOut","checkTimeOut","params","showParams","showOperations","showOperationSettings","showRecordLoadParams","showImportJobState","limit","skip","rest","find","projection","_id","parseInt","toArray","length","checkModTime","findOne","queueitemState","oldState","ABORT","ERROR","DONE","includes","silly","timeoutTime","add","isBefore","finalImportJobStates","REQUEST_TIMEOUT","JSON","stringify","clean","sanitize","noContent","deleteOne","err","MongoDriverError","indexOf","noStream","readStream","openDownloadStreamByName","BAD_REQUEST","NOT_FOUND","delete","cleanQueueItemState","handledIds","rejectedIds","verbose","updateOne","$set","$push","$each","messages","messageField","cleanMessageField","errorString","stateInQueueItemStates","Object","values","stateInQueueItemStatesValidator","stateInQueueItemStatesImporter","IMPORTER","updateValues","keys","forEach","key","findOneAndUpdate","returnNewDocument","cleanCorrelationId","cleanImportJobState","OPERATIONS","newJobState","newOperation","oldOperation","cleanNewOperation","ok","addOperation","removeOperation","queueItem","oldOperations","operationsAfterRemove","filter","operationsAfterRemoveAndAdd","$inc","cleanBlobSize"],"sources":["../src/mongo.js"],"sourcesContent":["/* eslint-disable max-lines */\n/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020-2021 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {MongoClient, GridFSBucket, MongoDriverError} from 'mongodb';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {QUEUE_ITEM_STATE, IMPORT_JOB_STATE, OPERATIONS} from './constants';\nimport {logError} from './utils.js';\nimport moment from 'moment';\nimport httpStatus from 'http-status';\nimport sanitize from 'mongo-sanitize';\n//import isDeepStrictEqual from 'util';\n\n/* QueueItem:\n{\n \"correlationId\":\"FOO\",\n \"cataloger\":\"xxx0000\",\n \"oCatalogerIn\":\"xxx0000\"\n \"operation\":\"UPDATE\",\n \"operations\":[\"UPDATE\", \"CREATE\"]\n \"contentType\":\"application/json\",\n \"recordLoadParams\": {\n \"pActiveLibrary\": \"XXX00\",\n \"pInputFile\": \"filename.seq\",\n \"pRejectFile\": \"filename.rej\",\n \"pLogFile\": \"filename.syslog\",\n \"pOldNew\": \"NEW\"\n },\n \"queueItemState\":\"PENDING_QUEUING\",\n \"importJobState\": {\n \"CREATE\": \"EMPTY\",\n \"UPDATE\": \"EMPTY\"\n },\n blobSize: 1,\n records: [],\n errorMessage: '',\n errorStatus: '',\n \"creationTime\":\"2020-01-01T00:00:00.000Z\",\n \"modificationTime\":\"2020-01-01T00:00:01.000Z\",\n}\n*/\n\nexport default async function (MONGO_URI, collection) {\n const logger = createLogger();\n\n // Connect to mongo (MONGO)\n const client = await MongoClient.connect(MONGO_URI, {useNewUrlParser: true, useUnifiedTopology: true});\n const db = client.db('rest-api');\n const gridFSBucket = new GridFSBucket(db, {bucketName: collection});\n\n return {createPrio, createBulk, checkAndSetState, checkAndSetImportJobState, query, queryById, remove, readContent, removeContent, getOne, getStream, setState, setImportJobState, pushIds, pushMessages, setOperation, setOperations, addBlobSize, setBlobSize};\n\n async function createPrio({correlationId, cataloger, oCatalogerIn, operation, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n operation,\n operations: [operation],\n oCatalogerIn,\n operationSettings: {\n prio: true,\n ...operationSettings\n },\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.PENDING_VALIDATION,\n blobSize: 1,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n try {\n const result = await db.collection(collection).insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New PRIO queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return;\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n // eslint-disable-next-line max-statements\n async function createBulk({correlationId, cataloger, oCatalogerIn, operation, contentType, recordLoadParams, stream, operationSettings}) {\n const time = moment().toDate();\n const newQueueItem = {\n correlationId,\n cataloger,\n oCatalogerIn,\n operation,\n operations: [operation],\n operationSettings: {\n prio: false,\n ...operationSettings\n },\n contentType,\n recordLoadParams,\n queueItemState: stream ? QUEUE_ITEM_STATE.VALIDATOR.UPLOADING : QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS,\n blobSize: 0,\n importJobState: {\n CREATE: IMPORT_JOB_STATE.EMPTY,\n UPDATE: IMPORT_JOB_STATE.EMPTY\n },\n records: [],\n errorMessage: '',\n errorStatus: '',\n creationTime: time,\n modificationTime: time\n };\n\n // eslint-disable-next-line functional/no-conditional-statement\n if (stream) {\n try {\n // No await here, promises later\n db.collection(collection).insertOne(newQueueItem);\n logger.info(`New BULK queue item for ${operation} ${correlationId} has been made in ${collection}!`);\n return new Promise((resolve, reject) => {\n const outputStream = gridFSBucket.openUploadStream(correlationId);\n\n stream\n .on('error', reject)\n .on('data', chunk => outputStream.write(chunk))\n .on('end', () => outputStream.end(undefined, undefined, () => {\n resolve(correlationId);\n }));\n });\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n logger.debug(`No stream`);\n // eslint-disable-next-line functional/no-conditional-statement\n if (!stream) {\n try {\n const result = await db.collection(collection).insertOne(newQueueItem);\n if (result.acknowledged) {\n logger.info(`New noStream BULK queue item for ${operation} ${correlationId} has been made in ${collection}`);\n return {correlationId, queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS};\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n }\n\n // Check state that the queueItem has not waited too long and set state\n async function checkAndSetState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR\n // otherwise it sets queueItem to state ABORT (408, 'Timeout')\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return setState({correlationId, state, errorMessage, errorStatus});\n }\n return false;\n }\n\n // Check state that the queueItem has not waited too long and set state\n async function checkAndSetImportJobState({correlationId, operation, importJobState, errorMessage = '', errorStatus = ''}) {\n // checkTimeOut returns true, if queueItem is fresher than 1 minute and it's state is not ABORT/ERROR\n // otherwise it sets queueItem to state ABORT (408, 'Timeout')\n logger.debug(`${correlationId}, ${importJobState}, ${operation}`);\n const timeOut = await checkTimeOut({correlationId, operation, importJobState});\n if (timeOut) {\n return setImportJobState({correlationId, operation, importJobState, errorMessage, errorStatus});\n }\n return false;\n }\n\n async function query(params, showParams = {}) {\n const {showOperations = 0, showOperationSettings = 0, showRecordLoadParams = 0, showImportJobState = 0} = showParams;\n const {limit = 1000, skip = 0, ...rest} = params;\n const result = await db.collection(collection).find(rest, {projection: {\n _id: 0,\n operations: showOperations,\n operationSettings: showOperationSettings,\n recordLoadParams: showRecordLoadParams,\n importJobState: showImportJobState\n }})\n .limit(parseInt(limit, 10))\n .skip(parseInt(skip, 10))\n .toArray();\n logger.debug(`Query result: ${result.length > 0 ? 'Found!' : 'Not found!'}`);\n return result;\n }\n\n async function queryById({correlationId, checkModTime = false}) {\n const result = await db.collection(collection).findOne({correlationId});\n if (checkModTime) {\n const timeOut = await checkTimeOut({correlationId});\n if (timeOut) {\n return queryById({correlationId});\n }\n return result;\n }\n\n return result;\n }\n\n // Check that if the item has waited too long\n // If the last modification time for the queueItem is older than 1 minute\n // set state to ABORT and return false, otherwise return true\n // If the state is already ABORT or ERROR return false\n\n async function checkTimeOut({correlationId}) {\n const {modificationTime, queueitemState: oldState, importJobState} = await db.collection(collection).findOne({correlationId});\n\n // should we check for DONE too?\n if ([QUEUE_ITEM_STATE.ABORT, QUEUE_ITEM_STATE.ERROR, QUEUE_ITEM_STATE.DONE].includes(oldState)) {\n logger.silly(`${correlationId} has already state: ${oldState}`);\n return false;\n }\n\n const timeoutTime = moment(modificationTime).add(1, 'm');\n logger.silly(`timeOut @ ${timeoutTime}`);\n\n if (timeoutTime.isBefore()) {\n const finalImportJobStates = [IMPORT_JOB_STATE.ABORT, IMPORT_JOB_STATE.DONE, IMPORT_JOB_STATE.EMPTY, IMPORT_JOB_STATE.ERROR];\n if (!finalImportJobStates.includes(importJobState.CREATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'CREATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n if (!finalImportJobStates.includes(importJobState.UPDATE)) { // eslint-disable-line\n await setImportJobState({correlationId, operation: 'UPDATE', importJobState: IMPORT_JOB_STATE.ABORT});\n }\n\n await setState({correlationId, state: QUEUE_ITEM_STATE.ABORT, errorStatus: httpStatus.REQUEST_TIMEOUT, errorMessage: `Timeout in ${oldState}`});\n\n return false;\n }\n\n return true;\n }\n\n async function remove(params) {\n logger.silly(`${JSON.stringify(params)}`);\n logger.info(`Removing from Mongo (${collection}) id: ${params.correlationId}`);\n const clean = sanitize(params.correlationId);\n logger.silly(`mongo/remove: clean: ${JSON.stringify(clean)}`);\n\n try {\n //const metadataResult = await getFileMetadata({filename: clean});\n //logger.debug(`mongo/remove: metadataResult: ${JSON.stringify(metadataResult)}`);\n const noContent = await removeContent(params);\n if (noContent) {\n await db.collection(collection).deleteOne({correlationId: clean});\n return true;\n }\n } catch (err) {\n if (err instanceof MongoDriverError) {\n if (err.message.indexOf('File not found for id') !== -1) {\n logger.silly(`mongo/remove: File not found, removing queueItem ${JSON.stringify(clean)} from ${collection}`);\n await db.collection(collection).deleteOne({correlationId: clean});\n return true;\n }\n logger.error(err.message);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n }\n\n async function readContent(correlationId) {\n logger.info(`Reading content from mongo for id: ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n const result = await db.collection(collection).findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n\n if (result) {\n const {operationSettings} = result;\n if (operationSettings.prio === false && operationSettings.noStream === false) {\n return {\n contentType: result.contentType,\n readStream: gridFSBucket.openDownloadStreamByName(clean)\n };\n }\n logger.debug(`OperationSetting for ${correlationId}: ${JSON.stringify(operationSettings)}`);\n throw new ApiError(httpStatus.BAD_REQUEST, {message: `Content is only available for streamBulk jobs. ${correlationId} is not a streamBulk job.`});\n }\n\n throw new ApiError(httpStatus.NOT_FOUND, {message: `Job ${correlationId} not found.`});\n }\n\n async function removeContent(params) {\n logger.info(`Removing content from mongo for id: ${params.correlationId} in ${collection}`);\n const clean = sanitize(params.correlationId);\n\n const result = await db.collection(collection).findOne({correlationId: clean}); // njsscan-ignore: node_nosqli_injection\n logger.silly(`mongo/removeContent: result ${JSON.stringify(result)}`);\n\n if (result) {\n await gridFSBucket.delete(clean);\n return true;\n }\n\n return true;\n }\n\n // eslint-disable-next-line max-statements\n function getOne({queueItemState, importJobState = undefined}) {\n\n logger.silly(`queueItemState: ${queueItemState}, importJobState: ${JSON.stringify(importJobState)}`);\n const cleanQueueItemState = queueItemState ? {queueItemState: sanitize(queueItemState)} : undefined;\n\n try {\n\n // Just queueItemState\n if (queueItemState && importJobState === undefined) {\n logger.silly(`Checking DB ${collection} for just ${JSON.stringify(cleanQueueItemState.queueItemState)}`);\n return db.collection(collection).findOne({...cleanQueueItemState});\n }\n\n // importJobState\n if (importJobState && queueItemState === undefined) {\n logger.silly(`Checking DB ${collection} for ${JSON.stringify(importJobState)}`);\n return db.collection(collection).findOne({...importJobState});\n }\n\n // importJobState and queueItemState\n if (importJobState && queueItemState) {\n logger.silly(`Checking DB ${collection} for ${queueItemState} and ${JSON.stringify(importJobState)}`);\n return db.collection(collection).findOne({...cleanQueueItemState, ...importJobState});\n }\n\n logger.debug(`getOne not working!`);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, 'Missing parameters, cannot get queueItem');\n\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n function getStream(correlationId) {\n logger.info(`Forming stream from mongo for ${correlationId} in ${collection}`);\n const clean = sanitize(correlationId);\n try {\n // Return content stream\n return gridFSBucket.openDownloadStreamByName(clean);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n async function pushIds({correlationId, handledIds, rejectedIds}) {\n logger.verbose(`Push ids (${handledIds.length}) and rejectedIds (${rejectedIds.length}) ${correlationId} to ${collection}`);\n logger.debug(`ids (${handledIds.length}): ${JSON.stringify(handledIds)}, rejectedIds ${rejectedIds.length}: ${JSON.stringify(rejectedIds)}`);\n const clean = sanitize(correlationId);\n await db.collection(collection).updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n handledIds: {$each: handledIds},\n rejectedIds: {$each: rejectedIds}\n }\n });\n }\n\n async function pushMessages({correlationId, messages, messageField = 'messages'}) {\n logger.verbose(`Push messages (${messages.length}) to ${messageField} ${correlationId} to ${collection}`);\n logger.silly(`Messages (${messages.length}): ${JSON.stringify(messages)}}`);\n const clean = sanitize(correlationId);\n const cleanMessageField = sanitize(messageField);\n await db.collection(collection).updateOne({\n correlationId: clean\n }, {\n $set: {\n modificationTime: moment().toDate()\n },\n $push: {\n [cleanMessageField]: {$each: messages}\n }\n });\n }\n\n function setState({correlationId, state, errorMessage = undefined, errorStatus = undefined}) {\n const errorString = errorMessage || errorStatus ? `, Error message: '${JSON.stringify(errorMessage) || ''}', Error status: '${errorStatus || ''}'` : '';\n logger.info(`Setting queue-item state ${state} for ${correlationId}${errorString} to ${collection}`);\n\n const stateInQueueItemStates = Object.values(QUEUE_ITEM_STATE).indexOf(state) > -1;\n const stateInQueueItemStatesValidator = Object.values(QUEUE_ITEM_STATE.VALIDATOR).indexOf(state) > -1;\n const stateInQueueItemStatesImporter = Object.values(QUEUE_ITEM_STATE.IMPORTER).indexOf(state) > -1;\n if (!stateInQueueItemStates && !stateInQueueItemStatesValidator && !stateInQueueItemStatesImporter) {\n throw new ApiError(httpStatus.BAD_REQUEST, 'Trying to set invalid state');\n }\n\n const clean = sanitize(correlationId);\n const updateValues = {\n queueItemState: state,\n modificationTime: moment().toDate(),\n errorMessage,\n errorStatus\n };\n\n // Do not update value that are undefined\n // eslint-disable-next-line functional/immutable-data\n Object.keys(updateValues).forEach(key => updateValues[key] === undefined && delete updateValues[key]);\n\n return db.collection(collection)\n .findOneAndUpdate(\n {correlationId: clean},\n {$set: updateValues},\n {projection: {_id: 0}, returnNewDocument: true}\n );\n }\n\n function setImportJobState({correlationId, operation, importJobState}) {\n\n // should this also get importJobState as previously created object? {}\n logger.info(`Setting queue-item importJobState: {${operation}: ${importJobState}} for ${correlationId}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanImportJobState = sanitize(importJobState);\n\n if (!(operation in OPERATIONS)) {\n throw new ApiError('400', 'Invalid operation for import job state');\n }\n\n if (!(cleanImportJobState in IMPORT_JOB_STATE)) {\n throw new ApiError('400', 'Invalid import job state');\n }\n\n const newJobState = operation === OPERATIONS.CREATE ? {'importJobState.CREATE': cleanImportJobState} : {'importJobState.UPDATE': cleanImportJobState};\n return db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n ...newJobState,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n }\n\n async function setOperation({correlationId, operation}) {\n const newOperation = operation;\n const {operation: oldOperation} = await db.collection(collection).findOne({correlationId});\n logger.info(`Setting queue-item operation from ${oldOperation} to ${newOperation} for ${correlationId} to ${collection}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanNewOperation = sanitize(newOperation);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operation: cleanNewOperation,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n return result.ok;\n // logger.debug(JSON.stringify(result));\n }\n\n async function setOperations({correlationId, addOperation, removeOperation = undefined}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const queueItem = await db.collection(collection).findOne({correlationId: cleanCorrelationId});\n logger.silly(`We found a queueItem: ${JSON.stringify(queueItem)}`);\n\n const oldOperations = queueItem.operations;\n\n logger.info(`Setting queue-item operations from ${JSON.stringify(oldOperations)} by adding ${addOperation} and removing ${removeOperation} for ${correlationId} to ${collection}`);\n\n const operationsAfterRemove = oldOperations.filter(operation => operation !== removeOperation);\n const operationsAfterRemoveAndAdd = operationsAfterRemove.includes(addOperation) ? operationsAfterRemove : [...operationsAfterRemove, addOperation];\n\n logger.silly(`operationsAfterRemove: ${operationsAfterRemove}`);\n logger.silly(`operationAfterRemoveAndAdd: ${operationsAfterRemoveAndAdd}`);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n operations: operationsAfterRemoveAndAdd,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n return result.ok;\n // logger.debug(JSON.stringify(result));\n }\n\n async function addBlobSize({correlationId}) {\n const cleanCorrelationId = sanitize(correlationId);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId,\n queueItemState: QUEUE_ITEM_STATE.VALIDATOR.WAITING_FOR_RECORDS\n }, {\n $inc: {\n blobSize: 1\n },\n $set: {\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n logger.verbose(`AddBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n return result;\n }\n\n async function setBlobSize({correlationId, blobSize}) {\n const cleanCorrelationId = sanitize(correlationId);\n const cleanBlobSize = sanitize(blobSize);\n\n const result = await db.collection(collection).findOneAndUpdate({\n correlationId: cleanCorrelationId\n }, {\n $set: {\n blobSize: cleanBlobSize,\n modificationTime: moment().toDate()\n }\n }, {projection: {_id: 0}, returnNewDocument: true});\n\n logger.verbose(`SetBlobSizeResult in mongo: ${JSON.stringify(result)}`);\n return result;\n }\n\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import {expect} from 'chai';
|
|
2
|
+
import {READERS} from '@natlibfi/fixura';
|
|
3
|
+
import mongoFixturesFactory from '@natlibfi/fixura-mongo';
|
|
4
|
+
import generateTests from '@natlibfi/fixugen';
|
|
5
|
+
|
|
6
|
+
let mongoFixtures; // eslint-disable-line functional/no-let
|
|
7
|
+
|
|
8
|
+
generateTests({
|
|
9
|
+
callback,
|
|
10
|
+
path: [__dirname, '..', '..', 'test-fixtures', 'xxx'],
|
|
11
|
+
recurse: false,
|
|
12
|
+
useMetadataFile: true,
|
|
13
|
+
fixura: {
|
|
14
|
+
failWhenNotFound: true,
|
|
15
|
+
reader: READERS.JSON
|
|
16
|
+
},
|
|
17
|
+
mocha: {
|
|
18
|
+
before: async () => {
|
|
19
|
+
mongoFixtures = await mongoFixturesFactory({
|
|
20
|
+
rootPath: [__dirname, '..', '..', 'test-fixtures', 'xxx'],
|
|
21
|
+
gridFS: {bucketName: 'blobs'},
|
|
22
|
+
useObjectId: true,
|
|
23
|
+
format: {
|
|
24
|
+
blobmetadatas: {
|
|
25
|
+
creationTime: v => new Date(v),
|
|
26
|
+
modificationTime: v => new Date(v)
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
await MONGOCONNECTION.connect();
|
|
31
|
+
},
|
|
32
|
+
beforeEach: async () => {
|
|
33
|
+
await mongoFixtures.clear();
|
|
34
|
+
},
|
|
35
|
+
afterEach: async () => {
|
|
36
|
+
await mongoFixtures.clear();
|
|
37
|
+
},
|
|
38
|
+
after: async () => {
|
|
39
|
+
await MONGOCONNECTION.disconnect();
|
|
40
|
+
await mongoFixtures.close();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
async function callback({
|
|
46
|
+
getFixture
|
|
47
|
+
}) {
|
|
48
|
+
try {
|
|
49
|
+
expect().to.eql();
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.log(error); // eslint-disable-line
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
package/dist/mongoLog.js
CHANGED
|
@@ -81,8 +81,9 @@ async function _default(MONGO_URI) {
|
|
|
81
81
|
}
|
|
82
82
|
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR);
|
|
83
83
|
} catch (error) {
|
|
84
|
+
const errorMessage = error.payload || error.message || '';
|
|
84
85
|
(0, _utils.logError)(error);
|
|
85
|
-
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR);
|
|
86
|
+
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
async function query(params) {
|
|
@@ -147,8 +148,10 @@ async function _default(MONGO_URI) {
|
|
|
147
148
|
status: result.modifiedCount > 0 ? _httpStatus.default.OK : _httpStatus.default.NOT_FOUND,
|
|
148
149
|
payload: result.modifiedCount > 0 ? result : 'No logs found'
|
|
149
150
|
};
|
|
150
|
-
} catch (
|
|
151
|
-
|
|
151
|
+
} catch (error) {
|
|
152
|
+
const errorMessage = error.payload || error.message || '';
|
|
153
|
+
(0, _utils.logError)(error);
|
|
154
|
+
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
|
|
152
155
|
}
|
|
153
156
|
}
|
|
154
157
|
async function remove(correlationId, force = false) {
|
|
@@ -168,8 +171,10 @@ async function _default(MONGO_URI) {
|
|
|
168
171
|
status: result.deletedCount > 0 ? _httpStatus.default.OK : _httpStatus.default.NOT_FOUND,
|
|
169
172
|
payload: result.deletedCount > 0 ? result : 'No logs found'
|
|
170
173
|
};
|
|
171
|
-
} catch (
|
|
172
|
-
|
|
174
|
+
} catch (error) {
|
|
175
|
+
const errorMessage = error.payload || error.message || '';
|
|
176
|
+
(0, _utils.logError)(error);
|
|
177
|
+
throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
|
|
173
178
|
}
|
|
174
179
|
}
|
|
175
180
|
function checkLogItemType(logItemType, errorUnknown = false, errorNotExisting = false) {
|
package/dist/mongoLog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongoLog.js","names":["MONGO_URI","logger","createLogger","client","MongoClient","connect","useNewUrlParser","useUnifiedTopology","db","collection","addLogItem","query","queryById","getListOfLogs","protect","remove","logItem","time","moment","toDate","newLogItem","creationTime","protected","checkLogItemType","logItemType","result","insertOne","acknowledged","blobSequence","blobSequenceStart","blobSequenceEnd","itemString","info","correlationId","ApiError","httpStatus","INTERNAL_SERVER_ERROR","error","logError","params","debug","JSON","stringify","limit","skip","rest","find","sort","parseInt","toArray","length","correlationIdString","distinct","status","OK","NOT_FOUND","payload","cleanCorrelationId","sanitize","cleanBlobSequence","filter","updateMany","$set","modificationTime","$not","modifiedCount","err","message","force","clean","$ne","deleteMany","deletedCount","errorUnknown","errorNotExisting","typeInLogItemTypes","Object","values","LOG_ITEM_TYPE","indexOf"],"sources":["../src/mongoLog.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020-2022 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {MongoClient} from 'mongodb';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {logError} from './utils.js';\nimport moment from 'moment';\nimport httpStatus from 'http-status';\nimport sanitize from 'mongo-sanitize';\nimport {LOG_ITEM_TYPE} from './constants';\n\nexport default async function (MONGO_URI) {\n const logger = createLogger();\n\n // Connect to mongo (MONGO)\n const client = await MongoClient.connect(MONGO_URI, {useNewUrlParser: true, useUnifiedTopology: true});\n const db = client.db('rest-api');\n const collection = 'logs';\n return {addLogItem, query, queryById, getListOfLogs, protect, remove};\n\n async function addLogItem(logItem) {\n const time = moment().toDate();\n const newLogItem = {\n ...logItem,\n creationTime: time,\n protected: false\n };\n try {\n checkLogItemType(logItem.logItemType, false);\n const result = await db.collection(collection).insertOne(newLogItem);\n if (result.acknowledged) {\n const {blobSequence, blobSequenceStart, blobSequenceEnd} = logItem;\n const itemString = blobSequenceStart && blobSequenceEnd ? `${blobSequenceStart} - ${blobSequenceEnd}` : `${blobSequence}`;\n logger.info(`*** New ${logItem.logItemType} added for ${logItem.correlationId}, blobSequence(s): ${itemString}. ***`);\n return;\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n }\n }\n\n async function query(params) {\n logger.debug(`Query params: ${JSON.stringify(params)}`);\n checkLogItemType(params.logItemType, false, false);\n const {limit = 5, skip = 0, ...rest} = params;\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .find(rest)\n .sort({blobSequence: 1})\n .skip(parseInt(skip, 10))\n .limit(parseInt(limit, 10))\n .toArray();\n logger.debug(`Query result: ${result}`);\n logger.debug(`Query result: ${result.length > 0 ? `Found ${result.length} log items! (skip: ${skip} limit: ${limit})` : 'Not found!'}`);\n return result;\n }\n\n async function queryById(correlationIdString, skip = 0, limit = 1) {\n logger.debug(`QueryById: ${correlationIdString}`);\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .find({correlationId: correlationIdString})\n .sort({blobSequence: 1})\n .skip(parseInt(skip, 10))\n .limit(parseInt(limit, 10))\n .toArray();\n logger.debug(`Query result: ${result.length > 0 ? `Found ${result.length} log items!` : 'Not found!'}`);\n return result;\n }\n\n async function getListOfLogs(logItemType = 'MERGE_LOG') {\n checkLogItemType(logItemType, false, false);\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .distinct('correlationId', {logItemType});\n logger.debug(`Query result: ${result.length > 0 ? `Found ${result.length} log items!` : 'Not found!'}`);\n return {status: result.length > 0 ? httpStatus.OK : httpStatus.NOT_FOUND, payload: result.length > 0 ? result : 'No logs found'};\n }\n\n async function protect(correlationId, blobSequence) {\n logger.info(`Protecting in Mongo (${collection}) correlationId: ${correlationId}, blobSequence: ${blobSequence}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanBlobSequence = sanitize(blobSequence);\n const filter = blobSequence ? {correlationId: cleanCorrelationId, blobSequence: parseInt(cleanBlobSequence, 10)} : {correlationId: cleanCorrelationId};\n\n try {\n const result = await db.collection(collection).updateMany(\n filter,\n {\n $set: {\n modificationTime: moment().toDate(),\n protect: {$not: '$protect'}\n }\n }\n );\n return {status: result.modifiedCount > 0 ? httpStatus.OK : httpStatus.NOT_FOUND, payload: result.modifiedCount > 0 ? result : 'No logs found'};\n } catch (err) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n }\n\n async function remove(correlationId, force = false) {\n logger.info(`Removing from Mongo (${collection}) correlationId: ${correlationId}`);\n const clean = sanitize(correlationId);\n const filter = force ? {correlationId: clean} : {correlationId: clean, protected: {$ne: true}};\n\n try {\n const result = await db.collection(collection).deleteMany(filter);\n return {status: result.deletedCount > 0 ? httpStatus.OK : httpStatus.NOT_FOUND, payload: result.deletedCount > 0 ? result : 'No logs found'};\n } catch (err) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, err.message);\n }\n }\n\n function checkLogItemType(logItemType, errorUnknown = false, errorNotExisting = false) {\n\n if (logItemType) {\n const typeInLogItemTypes = Object.values(LOG_ITEM_TYPE).indexOf(logItemType) > -1;\n if (typeInLogItemTypes) {\n return logger.debug(`Valid logItemType: ${logItemType}`);\n }\n if (errorUnknown) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Unknown logItemType: ${logItemType}`);\n }\n return logger.debug(`WARN: We have unknown logType: ${logItemType}`);\n }\n\n if (errorNotExisting) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `No logItemType: ${logItemType}`);\n }\n return logger.debug(`No logItemType: ${logItemType}`);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mongoLog.js","names":["MONGO_URI","logger","createLogger","client","MongoClient","connect","useNewUrlParser","useUnifiedTopology","db","collection","addLogItem","query","queryById","getListOfLogs","protect","remove","logItem","time","moment","toDate","newLogItem","creationTime","protected","checkLogItemType","logItemType","result","insertOne","acknowledged","blobSequence","blobSequenceStart","blobSequenceEnd","itemString","info","correlationId","ApiError","httpStatus","INTERNAL_SERVER_ERROR","error","errorMessage","payload","message","logError","params","debug","JSON","stringify","limit","skip","rest","find","sort","parseInt","toArray","length","correlationIdString","distinct","status","OK","NOT_FOUND","cleanCorrelationId","sanitize","cleanBlobSequence","filter","updateMany","$set","modificationTime","$not","modifiedCount","force","clean","$ne","deleteMany","deletedCount","errorUnknown","errorNotExisting","typeInLogItemTypes","Object","values","LOG_ITEM_TYPE","indexOf"],"sources":["../src/mongoLog.js"],"sourcesContent":["/**\n*\n* @licstart The following is the entire license notice for the JavaScript code in this file.\n*\n* Shared modules for microservices of Melinda rest api batch import system\n*\n* Copyright (C) 2020-2022 University Of Helsinki (The National Library Of Finland)\n*\n* This file is part of melinda-rest-api-commons\n*\n* melinda-rest-api-commons program is free software: you can redistribute it and/or modify\n* it under the terms of the GNU Affero General Public License as\n* published by the Free Software Foundation, either version 3 of the\n* License, or (at your option) any later version.\n*\n* melinda-rest-api-commons is distributed in the hope that it will be useful,\n* but WITHOUT ANY WARRANTY; without even the implied warranty of\n* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n* GNU Affero General Public License for more details.\n*\n* You should have received a copy of the GNU Affero General Public License\n* along with this program. If not, see <http://www.gnu.org/licenses/>.\n*\n* @licend The above is the entire license notice\n* for the JavaScript code in this file.\n*\n*/\n\nimport {MongoClient} from 'mongodb';\nimport {createLogger} from '@natlibfi/melinda-backend-commons';\nimport {Error as ApiError} from '@natlibfi/melinda-commons';\nimport {logError} from './utils.js';\nimport moment from 'moment';\nimport httpStatus from 'http-status';\nimport sanitize from 'mongo-sanitize';\nimport {LOG_ITEM_TYPE} from './constants';\n\nexport default async function (MONGO_URI) {\n const logger = createLogger();\n\n // Connect to mongo (MONGO)\n const client = await MongoClient.connect(MONGO_URI, {useNewUrlParser: true, useUnifiedTopology: true});\n const db = client.db('rest-api');\n const collection = 'logs';\n return {addLogItem, query, queryById, getListOfLogs, protect, remove};\n\n async function addLogItem(logItem) {\n const time = moment().toDate();\n const newLogItem = {\n ...logItem,\n creationTime: time,\n protected: false\n };\n try {\n checkLogItemType(logItem.logItemType, false);\n const result = await db.collection(collection).insertOne(newLogItem);\n if (result.acknowledged) {\n const {blobSequence, blobSequenceStart, blobSequenceEnd} = logItem;\n const itemString = blobSequenceStart && blobSequenceEnd ? `${blobSequenceStart} - ${blobSequenceEnd}` : `${blobSequence}`;\n logger.info(`*** New ${logItem.logItemType} added for ${logItem.correlationId}, blobSequence(s): ${itemString}. ***`);\n return;\n }\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR);\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n async function query(params) {\n logger.debug(`Query params: ${JSON.stringify(params)}`);\n checkLogItemType(params.logItemType, false, false);\n const {limit = 5, skip = 0, ...rest} = params;\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .find(rest)\n .sort({blobSequence: 1})\n .skip(parseInt(skip, 10))\n .limit(parseInt(limit, 10))\n .toArray();\n logger.debug(`Query result: ${result}`);\n logger.debug(`Query result: ${result.length > 0 ? `Found ${result.length} log items! (skip: ${skip} limit: ${limit})` : 'Not found!'}`);\n return result;\n }\n\n async function queryById(correlationIdString, skip = 0, limit = 1) {\n logger.debug(`QueryById: ${correlationIdString}`);\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .find({correlationId: correlationIdString})\n .sort({blobSequence: 1})\n .skip(parseInt(skip, 10))\n .limit(parseInt(limit, 10))\n .toArray();\n logger.debug(`Query result: ${result.length > 0 ? `Found ${result.length} log items!` : 'Not found!'}`);\n return result;\n }\n\n async function getListOfLogs(logItemType = 'MERGE_LOG') {\n checkLogItemType(logItemType, false, false);\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .distinct('correlationId', {logItemType});\n logger.debug(`Query result: ${result.length > 0 ? `Found ${result.length} log items!` : 'Not found!'}`);\n return {status: result.length > 0 ? httpStatus.OK : httpStatus.NOT_FOUND, payload: result.length > 0 ? result : 'No logs found'};\n }\n\n async function protect(correlationId, blobSequence) {\n logger.info(`Protecting in Mongo (${collection}) correlationId: ${correlationId}, blobSequence: ${blobSequence}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanBlobSequence = sanitize(blobSequence);\n const filter = blobSequence ? {correlationId: cleanCorrelationId, blobSequence: parseInt(cleanBlobSequence, 10)} : {correlationId: cleanCorrelationId};\n\n try {\n const result = await db.collection(collection).updateMany(\n filter,\n {\n $set: {\n modificationTime: moment().toDate(),\n protect: {$not: '$protect'}\n }\n }\n );\n return {status: result.modifiedCount > 0 ? httpStatus.OK : httpStatus.NOT_FOUND, payload: result.modifiedCount > 0 ? result : 'No logs found'};\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n async function remove(correlationId, force = false) {\n logger.info(`Removing from Mongo (${collection}) correlationId: ${correlationId}`);\n const clean = sanitize(correlationId);\n const filter = force ? {correlationId: clean} : {correlationId: clean, protected: {$ne: true}};\n\n try {\n const result = await db.collection(collection).deleteMany(filter);\n return {status: result.deletedCount > 0 ? httpStatus.OK : httpStatus.NOT_FOUND, payload: result.deletedCount > 0 ? result : 'No logs found'};\n } catch (error) {\n const errorMessage = error.payload || error.message || '';\n logError(error);\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);\n }\n }\n\n function checkLogItemType(logItemType, errorUnknown = false, errorNotExisting = false) {\n\n if (logItemType) {\n const typeInLogItemTypes = Object.values(LOG_ITEM_TYPE).indexOf(logItemType) > -1;\n if (typeInLogItemTypes) {\n return logger.debug(`Valid logItemType: ${logItemType}`);\n }\n if (errorUnknown) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Unknown logItemType: ${logItemType}`);\n }\n return logger.debug(`WARN: We have unknown logType: ${logItemType}`);\n }\n\n if (errorNotExisting) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `No logItemType: ${logItemType}`);\n }\n return logger.debug(`No logItemType: ${logItemType}`);\n }\n}\n"],"mappings":"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"}
|