@natlibfi/melinda-rest-api-commons 2.3.1-alpha.5 → 2.3.1-alpha.7

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/constants.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.QUEUE_ITEM_STATE = exports.OPERATIONS = exports.IMPORT_JOB_STATE = exports.CONVERSION_FORMATS = exports.CHUNK_SIZE = void 0;
6
+ exports.QUEUE_ITEM_STATE = exports.OPERATIONS = exports.LOG_ITEM_TYPE = exports.IMPORT_JOB_STATE = exports.CONVERSION_FORMATS = exports.CHUNK_SIZE = void 0;
7
7
 
8
8
  /**
9
9
  *
@@ -11,7 +11,7 @@ exports.QUEUE_ITEM_STATE = exports.OPERATIONS = exports.IMPORT_JOB_STATE = expor
11
11
  *
12
12
  * Shared modules for microservices of Melinda rest api batch import system
13
13
  *
14
- * Copyright (C) 2020-2021 University Of Helsinki (The National Library Of Finland)
14
+ * Copyright (C) 2020-2022 University Of Helsinki (The National Library Of Finland)
15
15
  *
16
16
  * This file is part of melinda-rest-api-commons
17
17
  *
@@ -68,8 +68,16 @@ const OPERATIONS = {
68
68
  UPDATE: 'UPDATE'
69
69
  };
70
70
  exports.OPERATIONS = OPERATIONS;
71
- const CHUNK_SIZE = 100;
71
+ const CHUNK_SIZE = 100; // We could configure here whether a logItemType is for a several records of a single record
72
+ // ie. whether is has bulkSequence or bulkSequenceStart & bulkSequenceEnd
73
+
72
74
  exports.CHUNK_SIZE = CHUNK_SIZE;
75
+ const LOG_ITEM_TYPE = {
76
+ MERGE_LOG: 'MERGE_LOG',
77
+ MATCH_LOG: 'MATCH_LOG',
78
+ SPLITTER_LOG: 'SPLITTER_LOG'
79
+ };
80
+ exports.LOG_ITEM_TYPE = LOG_ITEM_TYPE;
73
81
  const CONVERSION_FORMATS = {
74
82
  MARCXML: 'MARCXML',
75
83
  ISO2709: 'ISO2709',
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["QUEUE_ITEM_STATE","VALIDATOR","PENDING_QUEUING","PENDING_VALIDATION","QUEUING_IN_PROGRESS","UPLOADING","VALIDATING","WAITING_FOR_RECORDS","IMPORTER","IMPORTING","IN_PROCESS","IN_QUEUE","DONE","ERROR","ABORT","IMPORT_JOB_STATE","EMPTY","QUEUING","PROCESSING","OPERATIONS","CREATE","UPDATE","CHUNK_SIZE","CONVERSION_FORMATS","MARCXML","ISO2709","JSON","ALEPHSEQ"],"sources":["../src/constants.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\n// QueueItemState flows: see README.md\n\nexport const QUEUE_ITEM_STATE = {\n VALIDATOR: {\n PENDING_QUEUING: 'PENDING_QUEUING',\n PENDING_VALIDATION: 'PENDING_VALIDATION',\n QUEUING_IN_PROGRESS: 'QUEUING_IN_PROGRESS',\n UPLOADING: 'UPLOADING',\n VALIDATING: 'VALIDATING',\n WAITING_FOR_RECORDS: 'WAITING_FOR_RECORDS'\n },\n IMPORTER: {\n IMPORTING: 'IMPORTING',\n IN_PROCESS: 'IN_PROCESS',\n IN_QUEUE: 'IN_QUEUE'\n },\n DONE: 'DONE',\n ERROR: 'ERROR',\n ABORT: 'ABORT'\n};\n\nexport const IMPORT_JOB_STATE = {\n EMPTY: 'EMPTY',\n QUEUING: 'QUEUING',\n IN_QUEUE: 'IN_QUEUE',\n IMPORTING: 'IMPORTING',\n PROCESSING: 'PROCESSING',\n DONE: 'DONE',\n ERROR: 'ERROR',\n ABORT: 'ABORT'\n};\n\nexport const OPERATIONS = {\n CREATE: 'CREATE',\n UPDATE: 'UPDATE'\n};\n\nexport const CHUNK_SIZE = 100;\n\nexport const CONVERSION_FORMATS = {\n MARCXML: 'MARCXML',\n ISO2709: 'ISO2709',\n JSON: 'JSON',\n ALEPHSEQ: 'ALEPHSEQ'\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEO,MAAMA,gBAAgB,GAAG;EAC9BC,SAAS,EAAE;IACTC,eAAe,EAAE,iBADR;IAETC,kBAAkB,EAAE,oBAFX;IAGTC,mBAAmB,EAAE,qBAHZ;IAITC,SAAS,EAAE,WAJF;IAKTC,UAAU,EAAE,YALH;IAMTC,mBAAmB,EAAE;EANZ,CADmB;EAS9BC,QAAQ,EAAE;IACRC,SAAS,EAAE,WADH;IAERC,UAAU,EAAE,YAFJ;IAGRC,QAAQ,EAAE;EAHF,CAToB;EAc9BC,IAAI,EAAE,MAdwB;EAe9BC,KAAK,EAAE,OAfuB;EAgB9BC,KAAK,EAAE;AAhBuB,CAAzB;;AAmBA,MAAMC,gBAAgB,GAAG;EAC9BC,KAAK,EAAE,OADuB;EAE9BC,OAAO,EAAE,SAFqB;EAG9BN,QAAQ,EAAE,UAHoB;EAI9BF,SAAS,EAAE,WAJmB;EAK9BS,UAAU,EAAE,YALkB;EAM9BN,IAAI,EAAE,MANwB;EAO9BC,KAAK,EAAE,OAPuB;EAQ9BC,KAAK,EAAE;AARuB,CAAzB;;AAWA,MAAMK,UAAU,GAAG;EACxBC,MAAM,EAAE,QADgB;EAExBC,MAAM,EAAE;AAFgB,CAAnB;;AAKA,MAAMC,UAAU,GAAG,GAAnB;;AAEA,MAAMC,kBAAkB,GAAG;EAChCC,OAAO,EAAE,SADuB;EAEhCC,OAAO,EAAE,SAFuB;EAGhCC,IAAI,EAAE,MAH0B;EAIhCC,QAAQ,EAAE;AAJsB,CAA3B"}
1
+ {"version":3,"file":"constants.js","names":["QUEUE_ITEM_STATE","VALIDATOR","PENDING_QUEUING","PENDING_VALIDATION","QUEUING_IN_PROGRESS","UPLOADING","VALIDATING","WAITING_FOR_RECORDS","IMPORTER","IMPORTING","IN_PROCESS","IN_QUEUE","DONE","ERROR","ABORT","IMPORT_JOB_STATE","EMPTY","QUEUING","PROCESSING","OPERATIONS","CREATE","UPDATE","CHUNK_SIZE","LOG_ITEM_TYPE","MERGE_LOG","MATCH_LOG","SPLITTER_LOG","CONVERSION_FORMATS","MARCXML","ISO2709","JSON","ALEPHSEQ"],"sources":["../src/constants.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\n// QueueItemState flows: see README.md\n\nexport const QUEUE_ITEM_STATE = {\n VALIDATOR: {\n PENDING_QUEUING: 'PENDING_QUEUING',\n PENDING_VALIDATION: 'PENDING_VALIDATION',\n QUEUING_IN_PROGRESS: 'QUEUING_IN_PROGRESS',\n UPLOADING: 'UPLOADING',\n VALIDATING: 'VALIDATING',\n WAITING_FOR_RECORDS: 'WAITING_FOR_RECORDS'\n },\n IMPORTER: {\n IMPORTING: 'IMPORTING',\n IN_PROCESS: 'IN_PROCESS',\n IN_QUEUE: 'IN_QUEUE'\n },\n DONE: 'DONE',\n ERROR: 'ERROR',\n ABORT: 'ABORT'\n};\n\nexport const IMPORT_JOB_STATE = {\n EMPTY: 'EMPTY',\n QUEUING: 'QUEUING',\n IN_QUEUE: 'IN_QUEUE',\n IMPORTING: 'IMPORTING',\n PROCESSING: 'PROCESSING',\n DONE: 'DONE',\n ERROR: 'ERROR',\n ABORT: 'ABORT'\n};\n\nexport const OPERATIONS = {\n CREATE: 'CREATE',\n UPDATE: 'UPDATE'\n};\n\nexport const CHUNK_SIZE = 100;\n\n// We could configure here whether a logItemType is for a several records of a single record\n// ie. whether is has bulkSequence or bulkSequenceStart & bulkSequenceEnd\nexport const LOG_ITEM_TYPE = {\n MERGE_LOG: 'MERGE_LOG',\n MATCH_LOG: 'MATCH_LOG',\n SPLITTER_LOG: 'SPLITTER_LOG'\n};\n\nexport const CONVERSION_FORMATS = {\n MARCXML: 'MARCXML',\n ISO2709: 'ISO2709',\n JSON: 'JSON',\n ALEPHSEQ: 'ALEPHSEQ'\n};\n"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AAEO,MAAMA,gBAAgB,GAAG;EAC9BC,SAAS,EAAE;IACTC,eAAe,EAAE,iBADR;IAETC,kBAAkB,EAAE,oBAFX;IAGTC,mBAAmB,EAAE,qBAHZ;IAITC,SAAS,EAAE,WAJF;IAKTC,UAAU,EAAE,YALH;IAMTC,mBAAmB,EAAE;EANZ,CADmB;EAS9BC,QAAQ,EAAE;IACRC,SAAS,EAAE,WADH;IAERC,UAAU,EAAE,YAFJ;IAGRC,QAAQ,EAAE;EAHF,CAToB;EAc9BC,IAAI,EAAE,MAdwB;EAe9BC,KAAK,EAAE,OAfuB;EAgB9BC,KAAK,EAAE;AAhBuB,CAAzB;;AAmBA,MAAMC,gBAAgB,GAAG;EAC9BC,KAAK,EAAE,OADuB;EAE9BC,OAAO,EAAE,SAFqB;EAG9BN,QAAQ,EAAE,UAHoB;EAI9BF,SAAS,EAAE,WAJmB;EAK9BS,UAAU,EAAE,YALkB;EAM9BN,IAAI,EAAE,MANwB;EAO9BC,KAAK,EAAE,OAPuB;EAQ9BC,KAAK,EAAE;AARuB,CAAzB;;AAWA,MAAMK,UAAU,GAAG;EACxBC,MAAM,EAAE,QADgB;EAExBC,MAAM,EAAE;AAFgB,CAAnB;;AAKA,MAAMC,UAAU,GAAG,GAAnB,C,CAEP;AACA;;;AACO,MAAMC,aAAa,GAAG;EAC3BC,SAAS,EAAE,WADgB;EAE3BC,SAAS,EAAE,WAFgB;EAG3BC,YAAY,EAAE;AAHa,CAAtB;;AAMA,MAAMC,kBAAkB,GAAG;EAChCC,OAAO,EAAE,SADuB;EAEhCC,OAAO,EAAE,SAFuB;EAGhCC,IAAI,EAAE,MAH0B;EAIhCC,QAAQ,EAAE;AAJsB,CAA3B"}
package/dist/mongoLog.js CHANGED
@@ -19,6 +19,8 @@ var _httpStatus = _interopRequireDefault(require("http-status"));
19
19
 
20
20
  var _mongoSanitize = _interopRequireDefault(require("mongo-sanitize"));
21
21
 
22
+ var _constants = require("./constants");
23
+
22
24
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
25
 
24
26
  /**
@@ -74,6 +76,7 @@ async function _default(MONGO_URI) {
74
76
  };
75
77
 
76
78
  try {
79
+ checkLogItemType(logItem.logItemType, false);
77
80
  const result = await db.collection(collection).insertOne(newLogItem);
78
81
 
79
82
  if (result.acknowledged) {
@@ -83,7 +86,7 @@ async function _default(MONGO_URI) {
83
86
  blobSequenceEnd
84
87
  } = logItem;
85
88
  const itemString = blobSequenceStart && blobSequenceEnd ? `${blobSequenceStart} - ${blobSequenceEnd}` : `${blobSequence}`;
86
- logger.info(`*** New ${logItem.logItemType} added for ${logItem.correlationId} items ${itemString}. ***`);
89
+ logger.info(`*** New ${logItem.logItemType} added for ${logItem.correlationId}, blobSequence(s): ${itemString}. ***`);
87
90
  return;
88
91
  }
89
92
 
@@ -96,6 +99,7 @@ async function _default(MONGO_URI) {
96
99
 
97
100
  async function query(params) {
98
101
  logger.debug(`Query params: ${JSON.stringify(params)}`);
102
+ checkLogItemType(params.logItemType, false, false);
99
103
  const {
100
104
  limit = 5,
101
105
  skip = 0,
@@ -123,6 +127,7 @@ async function _default(MONGO_URI) {
123
127
  }
124
128
 
125
129
  async function getListOfLogs(logItemType = 'MERGE_LOG') {
130
+ checkLogItemType(logItemType, false, false);
126
131
  const result = await db.collection(collection) // eslint-disable-line functional/immutable-data
127
132
  .distinct('correlationId', {
128
133
  logItemType
@@ -135,7 +140,7 @@ async function _default(MONGO_URI) {
135
140
  }
136
141
 
137
142
  async function protect(correlationId, blobSequence) {
138
- logger.info(`Removing from Mongo (${collection}) correlationId: ${correlationId}, blobSequence: ${blobSequence}`);
143
+ logger.info(`Protecting in Mongo (${collection}) correlationId: ${correlationId}, blobSequence: ${blobSequence}`);
139
144
  const cleanCorrelationId = (0, _mongoSanitize.default)(correlationId);
140
145
  const cleanBlobSequence = (0, _mongoSanitize.default)(blobSequence);
141
146
  const filter = blobSequence ? {
@@ -185,5 +190,27 @@ async function _default(MONGO_URI) {
185
190
  throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, err.message);
186
191
  }
187
192
  }
193
+
194
+ function checkLogItemType(logItemType, errorUnknown = false, errorNotExisting = false) {
195
+ if (logItemType) {
196
+ const typeInLogItemTypes = Object.values(_constants.LOG_ITEM_TYPE).indexOf(logItemType) > -1;
197
+
198
+ if (typeInLogItemTypes) {
199
+ return logger.debug(`Valid logItemType: ${logItemType}`);
200
+ }
201
+
202
+ if (errorUnknown) {
203
+ throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Unknown logItemType: ${logItemType}`);
204
+ }
205
+
206
+ return logger.debug(`WARN: We have unknown logType: ${logItemType}`);
207
+ }
208
+
209
+ if (errorNotExisting) {
210
+ throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `No logItemType: ${logItemType}`);
211
+ }
212
+
213
+ return logger.debug(`No logItemType: ${logItemType}`);
214
+ }
188
215
  }
189
216
  //# sourceMappingURL=mongoLog.js.map
@@ -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","result","insertOne","acknowledged","blobSequence","blobSequenceStart","blobSequenceEnd","itemString","info","logItemType","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"],"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';\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 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} items ${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 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 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(`Removing from Mongo (${collection}) correlationId: ${correlationId}, blobSequence: ${blobSequence}`);\n const cleanCorrelationId = sanitize(correlationId);\n const cleanBlobSequence = sanitize(blobSequence);\n const filter = blobSequence ? {correlationId: cleanCorrelationId, blobSequence: cleanBlobSequence} : {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"],"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","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: cleanBlobSequence} : {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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"}
package/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "url": "git@github.com:natlibfi/melinda-rest-api-commons.git"
15
15
  },
16
16
  "license": "AGPL-3.0+",
17
- "version": "2.3.1-alpha.5",
17
+ "version": "2.3.1-alpha.7",
18
18
  "main": "./dist/index.js",
19
19
  "engines": {
20
20
  "node": ">=14"