@natlibfi/melinda-rest-api-commons 4.0.18-alpha.1 → 4.0.18-alpha.11

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/mongoLog.js CHANGED
@@ -19,7 +19,7 @@ var _constants = require("./constants");
19
19
  *
20
20
  * Shared modules for microservices of Melinda rest api batch import system
21
21
  *
22
- * Copyright (C) 2020-2022 University Of Helsinki (The National Library Of Finland)
22
+ * Copyright (C) 2020-2023 University Of Helsinki (The National Library Of Finland)
23
23
  *
24
24
  * This file is part of melinda-rest-api-commons
25
25
  *
@@ -41,6 +41,12 @@ var _constants = require("./constants");
41
41
  *
42
42
  */
43
43
 
44
+ /**
45
+ * Create log operator
46
+ * @param {String} MONGO_URI connnection address to mongo
47
+ * @param {String} dbName Mongo DB name, defaults 'rest-api
48
+ * @returns {Object} containing all log handling functions
49
+ */
44
50
  async function _default(MONGO_URI, dbName = 'rest-api') {
45
51
  const logger = (0, _melindaBackendCommons.createLogger)();
46
52
 
@@ -62,6 +68,12 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
62
68
  remove,
63
69
  removeBySequences
64
70
  };
71
+
72
+ /**
73
+ * Add log item to collection
74
+ * @param {Object}} logItem contains log item data
75
+ * @returns void
76
+ */
65
77
  async function addLogItem(logItem) {
66
78
  const time = (0, _moment.default)().toDate();
67
79
  const newLogItem = {
@@ -91,15 +103,22 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
91
103
  throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
92
104
  }
93
105
  }
94
- async function query(params) {
95
- logger.debug(`Query params: ${JSON.stringify(params)}`);
96
- checkLogItemType(params.logItemType, false, false);
97
- const {
98
- limit = 5,
99
- skip = 0,
100
- ...rest
101
- } = params;
102
- logger.debug(`Actual query params: ${JSON.stringify(rest)}`);
106
+
107
+ /**
108
+ * Querry log items
109
+ * @param {Integer} limit defaults 5
110
+ * @param {Integer} skip defaults 0
111
+ * @param {Object} rest query params
112
+ * @returns result array
113
+ */
114
+ async function query({
115
+ limit = 5,
116
+ skip = 0,
117
+ ...rest
118
+ }) {
119
+ logger.debug(`Query params: ${JSON.stringify(rest)}`);
120
+ logger.debug(`Limit and skip params: ${limit} | ${skip}`);
121
+ checkLogItemType(rest.logItemType, false, false);
103
122
  const result = await db.collection(collection) // eslint-disable-line functional/immutable-data
104
123
  .find(rest).sort({
105
124
  creationTime: 1
@@ -110,11 +129,20 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
110
129
  }
111
130
 
112
131
  // DEVELOP: queryById returns jsut one (randomish) log! is this useful?
113
- async function queryById(correlationIdString, skip = 0, limit = 1) {
114
- logger.debug(`QueryById: ${correlationIdString}`);
132
+ /**
133
+ * Get single log item by correlationId
134
+ * @param {String} correlationId
135
+ * @param {String} logItemType contant LOG_ITEM_TYPE defaults LOG_ITEM_TYPE.MERGE_LOG
136
+ * @param {Integer} skip defaults 0
137
+ * @param {Integer} limit defaults 1
138
+ * @returns query result array
139
+ */
140
+ async function queryById(correlationId, logItemType = _constants.LOG_ITEM_TYPE.MERGE_LOG, skip = 0, limit = 1) {
141
+ logger.debug(`QueryById: ${correlationId}`);
115
142
  const result = await db.collection(collection) // eslint-disable-line functional/immutable-data
116
143
  .find({
117
- correlationId: correlationIdString
144
+ correlationId,
145
+ logItemType
118
146
  }).sort({
119
147
  blobSequence: 1
120
148
  }).skip(parseInt(skip, 10)).limit(parseInt(limit, 10)).toArray();
@@ -124,18 +152,25 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
124
152
 
125
153
  // getListOfLogs returns list of correlationIds that have logs of given logItemType
126
154
  // if logItemType is not given, getListOfLogs returns list of correlationIds that have MERGE_LOG
127
- async function getListOfLogs(logItemType = 'MERGE_LOG') {
128
- checkLogItemType(logItemType, false, false);
155
+ /**
156
+ * Get list correlationId of logs filtered by logItemType
157
+ * @param {String} logItemType contant LOG_ITEM_TYPE defaults LOG_ITEM_TYPE.MERGE_LOG
158
+ * @returns Array of query results
159
+ */
160
+ async function getListOfLogs(logItemType = _constants.LOG_ITEM_TYPE.MERGE_LOG) {
161
+ // checkLogItemType(logItemType, false, false);
129
162
  const result = await db.collection(collection) // eslint-disable-line functional/immutable-data
130
163
  .distinct('correlationId', {
131
164
  logItemType
132
165
  });
133
166
  logger.debug(`Query result: ${result.length > 0 ? `Found ${result.length} log items!` : 'Not found!'}`);
134
- return {
135
- status: result.length > 0 ? _httpStatus.default.OK : _httpStatus.default.NOT_FOUND,
136
- payload: result.length > 0 ? result : 'No logs found'
137
- };
167
+ return result;
138
168
  }
169
+
170
+ /**
171
+ * Get list of catalogers from logs
172
+ * @returns Array of query results
173
+ */
139
174
  async function getListOfCatalogers() {
140
175
  logger.debug(`Getting list of Catalogers`);
141
176
  const result = await db.collection(collection) // eslint-disable-line functional/immutable-data
@@ -143,20 +178,40 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
143
178
  return result;
144
179
  }
145
180
 
146
- // getExpandedListOfLogs returns groped MERGE_LOGs and MATCH_LOGs
181
+ /**
182
+ * Get filtered list of logs with extra info. Give params in Object
183
+ * @param {[String]} logItemTypes: String array of logItemTypes. Defaults [LOG_ITEM_TYPE.MERGE_LOG, LOG_ITEM_TYPE.MATCH_LOG]
184
+ * @param {[String]} catalogers: String array of wanted catalogers. Defaults []
185
+ * @param {String} dateBefore: String date schema 'YYYY-MM-DD'. Defaults new Date()
186
+ * @param {String} dateAfter: String date schema 'YYYY-MM-DD'. Defaults '2000-01-01'
187
+ * @param {Boolean} test: Boolean is this test run. Defaults false
188
+ * @returns Parsed Object {'correlationId', 'logItemType', 'creationTime', 'cataloger', 'logCount'}
189
+ */
147
190
  async function getExpandedListOfLogs({
148
191
  logItemTypes = [_constants.LOG_ITEM_TYPE.MERGE_LOG, _constants.LOG_ITEM_TYPE.MATCH_LOG],
149
192
  catalogers = [],
150
193
  dateBefore = new Date(),
151
- dateAfter = new Date('2000-01-01')
194
+ dateAfter = '2000-01-01',
195
+ test = false
152
196
  }) {
153
197
  logger.debug(`commons: logItemTypes: ${JSON.stringify(logItemTypes)}, dateAfter: ${dateAfter}, dateBefore: ${dateBefore}}, catalogers: ${JSON.stringify(catalogers)}`);
154
- logger.debug(JSON.stringify(generateMatchObject(logItemTypes, catalogers, dateBefore, dateAfter))); // eslint-disable-line
198
+ logger.debug(JSON.stringify(generateMatchObject({
199
+ logItemTypes,
200
+ catalogers,
201
+ dateBefore,
202
+ dateAfter
203
+ }))); // eslint-disable-line
155
204
  //checkLogItemType(logItemType, false, false);
156
205
  logger.debug(`Getting expanded list of logs`);
157
206
  const pipeline = [
158
207
  // currently return only MERGE_LOG and MATCH_LOG
159
- generateMatchObject(logItemTypes, catalogers, dateBefore, dateAfter), {
208
+ generateMatchObject({
209
+ logItemTypes,
210
+ catalogers,
211
+ dateBefore,
212
+ dateAfter,
213
+ test
214
+ }), {
160
215
  '$sort': {
161
216
  'correlationId': 1,
162
217
  'logItemType': 1,
@@ -208,13 +263,24 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
208
263
  logger.silly(`Query result: ${JSON.stringify(result)}`);
209
264
  logger.silly(`Query result: ${JSON.stringify(fixedResult)}`);
210
265
  logger.debug(`Query result: ${fixedResult.length > 0 ? `Found ${fixedResult.length} log items!` : 'Not found!'}`);
211
- return {
212
- status: fixedResult.length > 0 ? _httpStatus.default.OK : _httpStatus.default.NOT_FOUND,
213
- payload: fixedResult.length > 0 ? fixedResult : 'No logs found'
214
- };
215
- function generateMatchObject(logItemTypes, catalogers, dateBefore, dateAfter) {
216
- const dateBeforeIso = new Date(dateBefore).toISOString();
217
- const dateAfterIso = new Date(dateAfter).toISOString();
266
+ return fixedResult;
267
+
268
+ /**
269
+ * Generate match object for aggregation pipeline
270
+ * @param {[String]} logItemTypes: String array of logItemTypes.
271
+ * @param {[String]} catalogers: String array of wanted catalogers
272
+ * @param {String} dateBefore: String date schema 'YYYY-MM-DD'
273
+ * @param {String} dateAfter: String date schema 'YYYY-MM-DD'
274
+ * @param {Boolean} test: Boolean is this test run. Defaults false
275
+ * @returns Match Object
276
+ */
277
+ function generateMatchObject({
278
+ logItemTypes,
279
+ catalogers,
280
+ dateBefore,
281
+ dateAfter,
282
+ test = false
283
+ }) {
218
284
  const matchOptions = {
219
285
  '$match': {
220
286
  'logItemType': logItemTypes.length > 0 ? {
@@ -224,14 +290,21 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
224
290
  '$in': catalogers
225
291
  } : /.*/ui,
226
292
  'creationTime': {
227
- '$gte': dateAfterIso,
228
- '$lte': dateBeforeIso
293
+ '$gte': test ? new Date(dateAfter).toISOString() : new Date(dateAfter),
294
+ '$lte': test ? new Date(dateBefore).toISOString() : new Date(dateBefore)
229
295
  }
230
296
  }
231
297
  };
232
298
  return matchOptions;
233
299
  }
234
300
  }
301
+
302
+ /**
303
+ * Protect logs from cleaning. Forced cleaning defaults 30days
304
+ * @param {String} correlationId
305
+ * @param {Integer} blobSequence
306
+ * @returns result
307
+ */
235
308
  async function protect(correlationId, blobSequence) {
236
309
  logger.info(`Protecting in Mongo (${collection}) correlationId: ${correlationId}, blobSequence: ${blobSequence}`);
237
310
  const cleanCorrelationId = (0, _mongoSanitize.default)(correlationId);
@@ -251,16 +324,20 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
251
324
  }
252
325
  }
253
326
  }]);
254
- return {
255
- status: result.modifiedCount > 0 ? _httpStatus.default.OK : _httpStatus.default.NOT_FOUND,
256
- payload: result.modifiedCount > 0 ? result : 'No logs found'
257
- };
327
+ return result;
258
328
  } catch (error) {
259
329
  const errorMessage = error.payload || error.message || '';
260
330
  (0, _utils.logError)(error);
261
331
  throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
262
332
  }
263
333
  }
334
+
335
+ /**
336
+ * Remove logs
337
+ * @param {String} correlationId
338
+ * @param {Boolean} force defaults false
339
+ * @returns result
340
+ */
264
341
  async function remove(correlationId, force = false) {
265
342
  logger.info(`Removing from Mongo (${collection}) correlationId: ${correlationId}`);
266
343
  const clean = (0, _mongoSanitize.default)(correlationId);
@@ -274,16 +351,21 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
274
351
  };
275
352
  try {
276
353
  const result = await db.collection(collection).deleteMany(filter);
277
- return {
278
- status: result.deletedCount > 0 ? _httpStatus.default.OK : _httpStatus.default.NOT_FOUND,
279
- payload: result.deletedCount > 0 ? result : 'No logs found'
280
- };
354
+ return result;
281
355
  } catch (error) {
282
356
  const errorMessage = error.payload || error.message || '';
283
357
  (0, _utils.logError)(error);
284
358
  throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
285
359
  }
286
360
  }
361
+
362
+ /**
363
+ * Remove logs by sequences
364
+ * @param {String} correlationId
365
+ * @param {[Integer]} sequences
366
+ * @param {Boolean} force defaults false
367
+ * @returns result
368
+ */
287
369
  async function removeBySequences(correlationId, sequences = [], force = false) {
288
370
  logger.info(`Removing from Mongo (${collection}) correlationId: ${correlationId}, sequences: ${sequences.length}`);
289
371
  const clean = (0, _mongoSanitize.default)(correlationId);
@@ -309,16 +391,21 @@ async function _default(MONGO_URI, dbName = 'rest-api') {
309
391
  };
310
392
  try {
311
393
  const result = await db.collection(collection).deleteMany(filter);
312
- return {
313
- status: result.deletedCount > 0 ? _httpStatus.default.OK : _httpStatus.default.NOT_FOUND,
314
- payload: result.deletedCount > 0 ? result : 'No logs found'
315
- };
394
+ return result;
316
395
  } catch (error) {
317
396
  const errorMessage = error.payload || error.message || '';
318
397
  (0, _utils.logError)(error);
319
398
  throw new _melindaCommons.Error(_httpStatus.default.INTERNAL_SERVER_ERROR, `Mongo errored: ${errorMessage}`);
320
399
  }
321
400
  }
401
+
402
+ /**
403
+ * Checks validy of logItemType
404
+ * @param {String} logItemType
405
+ * @param {Boolean} errorUnknown
406
+ * @param {Boolean} errorNotExisting
407
+ * @returns void
408
+ */
322
409
  function checkLogItemType(logItemType, errorUnknown = false, errorNotExisting = false) {
323
410
  if (logItemType) {
324
411
  const typeInLogItemTypes = Object.values(_constants.LOG_ITEM_TYPE).indexOf(logItemType) > -1;
@@ -1 +1 @@
1
- {"version":3,"file":"mongoLog.js","names":["_mongodb","require","_melindaBackendCommons","_melindaCommons","_utils","_moment","_interopRequireDefault","_httpStatus","_mongoSanitize","_constants","_default","MONGO_URI","dbName","logger","createLogger","client","MongoClient","connect","useNewUrlParser","useUnifiedTopology","db","collection","addLogItem","query","queryById","getListOfLogs","getListOfCatalogers","getExpandedListOfLogs","protect","remove","removeBySequences","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","logItemTypes","LOG_ITEM_TYPE","MERGE_LOG","MATCH_LOG","catalogers","dateBefore","Date","dateAfter","generateMatchObject","pipeline","aggregate","fixedResult","map","logListing","_id","cataloger","logCount","silly","dateBeforeIso","toISOString","dateAfterIso","matchOptions","cleanCorrelationId","sanitize","cleanBlobSequence","filter","updateMany","$set","modificationTime","$not","modifiedCount","force","clean","$ne","deleteMany","deletedCount","sequences","cleanSequences","sequence","Number","isInteger","$in","errorUnknown","errorNotExisting","typeInLogItemTypes","Object","values","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, dbName = 'rest-api') {\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(dbName);\n const collection = 'logs';\n return {addLogItem, query, queryById, getListOfLogs, getListOfCatalogers, getExpandedListOfLogs, protect, remove, removeBySequences};\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 // console.log(newLogItem); // eslint-disable-line\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 // console.log('addLogItem done', result); // eslint-disable-line\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 logger.debug(`Actual query params: ${JSON.stringify(rest)}`);\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .find(rest)\n .sort({creationTime: 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 // DEVELOP: queryById returns jsut one (randomish) log! is this useful?\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 // getListOfLogs returns list of correlationIds that have logs of given logItemType\n // if logItemType is not given, getListOfLogs returns list of correlationIds that have MERGE_LOG\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 getListOfCatalogers() {\n logger.debug(`Getting list of Catalogers`);\n\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .distinct('cataloger');\n\n return result;\n }\n\n // getExpandedListOfLogs returns groped MERGE_LOGs and MATCH_LOGs\n async function getExpandedListOfLogs({logItemTypes = [LOG_ITEM_TYPE.MERGE_LOG, LOG_ITEM_TYPE.MATCH_LOG], catalogers = [], dateBefore = new Date(), dateAfter = new Date('2000-01-01')}) {\n logger.debug(`commons: logItemTypes: ${JSON.stringify(logItemTypes)}, dateAfter: ${dateAfter}, dateBefore: ${dateBefore}}, catalogers: ${JSON.stringify(catalogers)}`);\n logger.debug(JSON.stringify(generateMatchObject(logItemTypes, catalogers, dateBefore, dateAfter))); // eslint-disable-line\n //checkLogItemType(logItemType, false, false);\n logger.debug(`Getting expanded list of logs`);\n const pipeline = [\n // currently return only MERGE_LOG and MATCH_LOG\n generateMatchObject(logItemTypes, catalogers, dateBefore, dateAfter),\n {\n '$sort':\n {'correlationId': 1, 'logItemType': 1, 'creationTime': 1}\n },\n {\n '$group':\n {\n '_id': {'correlationId': '$correlationId', 'logItemType': '$logItemType'},\n 'creationTime': {'$first': '$creationTime'},\n 'cataloger': {'$first': '$cataloger'},\n 'logCount': {'$sum': 1}\n }\n },\n {\n '$sort':\n {'correlationId': 1, 'logItemType': 1, 'creationTime': 1}\n }\n ];\n\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .aggregate(pipeline)\n .toArray();\n\n const fixedResult = result.map((logListing) => {\n const {correlationId, logItemType} = logListing._id;\n const {cataloger, creationTime, logCount} = logListing;\n return {correlationId, logItemType, cataloger, creationTime, logCount};\n });\n\n logger.silly(`Query result: ${JSON.stringify(result)}`);\n logger.silly(`Query result: ${JSON.stringify(fixedResult)}`);\n\n logger.debug(`Query result: ${fixedResult.length > 0 ? `Found ${fixedResult.length} log items!` : 'Not found!'}`);\n return {status: fixedResult.length > 0 ? httpStatus.OK : httpStatus.NOT_FOUND, payload: fixedResult.length > 0 ? fixedResult : 'No logs found'};\n\n function generateMatchObject(logItemTypes, catalogers, dateBefore, dateAfter) {\n const dateBeforeIso = new Date(dateBefore).toISOString();\n const dateAfterIso = new Date(dateAfter).toISOString();\n const matchOptions = {\n '$match': {\n 'logItemType': logItemTypes.length > 0 ? {'$in': logItemTypes} : /.*/ui,\n 'cataloger': catalogers.length > 0 ? {'$in': catalogers} : /.*/ui,\n 'creationTime': {\n '$gte': dateAfterIso,\n '$lte': dateBeforeIso\n }\n }\n };\n\n return matchOptions;\n }\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 {\n $set: {\n modificationTime: moment().toDate(),\n protected: {$not: '$protected'}\n }\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 async function removeBySequences(correlationId, sequences = [], force = false) {\n logger.info(`Removing from Mongo (${collection}) correlationId: ${correlationId}, sequences: ${sequences.length}`);\n const clean = sanitize(correlationId);\n // blobSequences are integers that start from 1\n // we accept also strings that are convertilble to integers greated than 0\n const cleanSequences = sequences.filter(sequence => Number.isInteger(Number(sequence)) && sequence > 0);\n\n if (sequences.length !== cleanSequences.length) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Invalid sequences in removeBySequences. Sequences should be positive integers`);\n }\n\n const filter = force ? {correlationId: clean, blobSequence: {$in: cleanSequences}} : {correlationId: clean, blobSequence: {$in: sequences}, 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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"}
1
+ {"version":3,"file":"mongoLog.js","names":["_mongodb","require","_melindaBackendCommons","_melindaCommons","_utils","_moment","_interopRequireDefault","_httpStatus","_mongoSanitize","_constants","_default","MONGO_URI","dbName","logger","createLogger","client","MongoClient","connect","useNewUrlParser","useUnifiedTopology","db","collection","addLogItem","query","queryById","getListOfLogs","getListOfCatalogers","getExpandedListOfLogs","protect","remove","removeBySequences","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","limit","skip","rest","debug","JSON","stringify","find","sort","parseInt","toArray","length","LOG_ITEM_TYPE","MERGE_LOG","distinct","logItemTypes","MATCH_LOG","catalogers","dateBefore","Date","dateAfter","test","generateMatchObject","pipeline","aggregate","fixedResult","map","logListing","_id","cataloger","logCount","silly","matchOptions","toISOString","cleanCorrelationId","sanitize","cleanBlobSequence","filter","updateMany","$set","modificationTime","$not","force","clean","$ne","deleteMany","sequences","cleanSequences","sequence","Number","isInteger","$in","errorUnknown","errorNotExisting","typeInLogItemTypes","Object","values","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-2023 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\n/**\n * Create log operator\n * @param {String} MONGO_URI connnection address to mongo\n * @param {String} dbName Mongo DB name, defaults 'rest-api\n * @returns {Object} containing all log handling functions\n */\nexport default async function (MONGO_URI, dbName = 'rest-api') {\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(dbName);\n const collection = 'logs';\n return {addLogItem, query, queryById, getListOfLogs, getListOfCatalogers, getExpandedListOfLogs, protect, remove, removeBySequences};\n\n /**\n * Add log item to collection\n * @param {Object}} logItem contains log item data\n * @returns void\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 // console.log(newLogItem); // eslint-disable-line\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 // console.log('addLogItem done', result); // eslint-disable-line\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 /**\n * Querry log items\n * @param {Integer} limit defaults 5\n * @param {Integer} skip defaults 0\n * @param {Object} rest query params\n * @returns result array\n */\n async function query({limit = 5, skip = 0, ...rest}) {\n logger.debug(`Query params: ${JSON.stringify(rest)}`);\n logger.debug(`Limit and skip params: ${limit} | ${skip}`);\n checkLogItemType(rest.logItemType, false, false);\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .find(rest)\n .sort({creationTime: 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 // DEVELOP: queryById returns jsut one (randomish) log! is this useful?\n /**\n * Get single log item by correlationId\n * @param {String} correlationId\n * @param {String} logItemType contant LOG_ITEM_TYPE defaults LOG_ITEM_TYPE.MERGE_LOG\n * @param {Integer} skip defaults 0\n * @param {Integer} limit defaults 1\n * @returns query result array\n */\n async function queryById(correlationId, logItemType = LOG_ITEM_TYPE.MERGE_LOG, skip = 0, limit = 1) {\n logger.debug(`QueryById: ${correlationId}`);\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .find({correlationId, logItemType})\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 // getListOfLogs returns list of correlationIds that have logs of given logItemType\n // if logItemType is not given, getListOfLogs returns list of correlationIds that have MERGE_LOG\n /**\n * Get list correlationId of logs filtered by logItemType\n * @param {String} logItemType contant LOG_ITEM_TYPE defaults LOG_ITEM_TYPE.MERGE_LOG\n * @returns Array of query results\n */\n async function getListOfLogs(logItemType = LOG_ITEM_TYPE.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 result;\n }\n\n /**\n * Get list of catalogers from logs\n * @returns Array of query results\n */\n async function getListOfCatalogers() {\n logger.debug(`Getting list of Catalogers`);\n\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .distinct('cataloger');\n\n return result;\n }\n\n /**\n * Get filtered list of logs with extra info. Give params in Object\n * @param {[String]} logItemTypes: String array of logItemTypes. Defaults [LOG_ITEM_TYPE.MERGE_LOG, LOG_ITEM_TYPE.MATCH_LOG]\n * @param {[String]} catalogers: String array of wanted catalogers. Defaults []\n * @param {String} dateBefore: String date schema 'YYYY-MM-DD'. Defaults new Date()\n * @param {String} dateAfter: String date schema 'YYYY-MM-DD'. Defaults '2000-01-01'\n * @param {Boolean} test: Boolean is this test run. Defaults false\n * @returns Parsed Object {'correlationId', 'logItemType', 'creationTime', 'cataloger', 'logCount'}\n */\n async function getExpandedListOfLogs({logItemTypes = [LOG_ITEM_TYPE.MERGE_LOG, LOG_ITEM_TYPE.MATCH_LOG], catalogers = [], dateBefore = new Date(), dateAfter = '2000-01-01', test = false}) {\n logger.debug(`commons: logItemTypes: ${JSON.stringify(logItemTypes)}, dateAfter: ${dateAfter}, dateBefore: ${dateBefore}}, catalogers: ${JSON.stringify(catalogers)}`);\n logger.debug(JSON.stringify(generateMatchObject({logItemTypes, catalogers, dateBefore, dateAfter}))); // eslint-disable-line\n //checkLogItemType(logItemType, false, false);\n logger.debug(`Getting expanded list of logs`);\n const pipeline = [\n // currently return only MERGE_LOG and MATCH_LOG\n generateMatchObject({logItemTypes, catalogers, dateBefore, dateAfter, test}),\n {\n '$sort':\n {'correlationId': 1, 'logItemType': 1, 'creationTime': 1}\n },\n {\n '$group':\n {\n '_id': {'correlationId': '$correlationId', 'logItemType': '$logItemType'},\n 'creationTime': {'$first': '$creationTime'},\n 'cataloger': {'$first': '$cataloger'},\n 'logCount': {'$sum': 1}\n }\n },\n {\n '$sort':\n {'correlationId': 1, 'logItemType': 1, 'creationTime': 1}\n }\n ];\n\n const result = await db.collection(collection) // eslint-disable-line functional/immutable-data\n .aggregate(pipeline)\n .toArray();\n\n const fixedResult = result.map((logListing) => {\n const {correlationId, logItemType} = logListing._id;\n const {cataloger, creationTime, logCount} = logListing;\n return {correlationId, logItemType, cataloger, creationTime, logCount};\n });\n\n logger.silly(`Query result: ${JSON.stringify(result)}`);\n logger.silly(`Query result: ${JSON.stringify(fixedResult)}`);\n\n logger.debug(`Query result: ${fixedResult.length > 0 ? `Found ${fixedResult.length} log items!` : 'Not found!'}`);\n return fixedResult;\n\n /**\n * Generate match object for aggregation pipeline\n * @param {[String]} logItemTypes: String array of logItemTypes.\n * @param {[String]} catalogers: String array of wanted catalogers\n * @param {String} dateBefore: String date schema 'YYYY-MM-DD'\n * @param {String} dateAfter: String date schema 'YYYY-MM-DD'\n * @param {Boolean} test: Boolean is this test run. Defaults false\n * @returns Match Object\n */\n function generateMatchObject({logItemTypes, catalogers, dateBefore, dateAfter, test = false}) {\n const matchOptions = {\n '$match': {\n 'logItemType': logItemTypes.length > 0 ? {'$in': logItemTypes} : /.*/ui,\n 'cataloger': catalogers.length > 0 ? {'$in': catalogers} : /.*/ui,\n 'creationTime': {\n '$gte': test ? new Date(dateAfter).toISOString() : new Date(dateAfter),\n '$lte': test ? new Date(dateBefore).toISOString() : new Date(dateBefore)\n }\n }\n };\n\n return matchOptions;\n }\n }\n\n /**\n * Protect logs from cleaning. Forced cleaning defaults 30days\n * @param {String} correlationId\n * @param {Integer} blobSequence\n * @returns result\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 {\n $set: {\n modificationTime: moment().toDate(),\n protected: {$not: '$protected'}\n }\n }\n ]\n );\n return result;\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 * Remove logs\n * @param {String} correlationId\n * @param {Boolean} force defaults false\n * @returns result\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 result;\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 * Remove logs by sequences\n * @param {String} correlationId\n * @param {[Integer]} sequences\n * @param {Boolean} force defaults false\n * @returns result\n */\n async function removeBySequences(correlationId, sequences = [], force = false) {\n logger.info(`Removing from Mongo (${collection}) correlationId: ${correlationId}, sequences: ${sequences.length}`);\n const clean = sanitize(correlationId);\n // blobSequences are integers that start from 1\n // we accept also strings that are convertilble to integers greated than 0\n const cleanSequences = sequences.filter(sequence => Number.isInteger(Number(sequence)) && sequence > 0);\n\n if (sequences.length !== cleanSequences.length) {\n throw new ApiError(httpStatus.INTERNAL_SERVER_ERROR, `Invalid sequences in removeBySequences. Sequences should be positive integers`);\n }\n\n const filter = force ? {correlationId: clean, blobSequence: {$in: cleanSequences}} : {correlationId: clean, blobSequence: {$in: sequences}, protected: {$ne: true}};\n\n try {\n const result = await db.collection(collection).deleteMany(filter);\n return result;\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 * Checks validy of logItemType\n * @param {String} logItemType\n * @param {Boolean} errorUnknown\n * @param {Boolean} errorNotExisting\n * @returns void\n */\n function checkLogItemType(logItemType, errorUnknown = false, errorNotExisting = false) {\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": "4.0.18-alpha.1",
17
+ "version": "4.0.18-alpha.11",
18
18
  "main": "./dist/index.js",
19
19
  "engines": {
20
20
  "node": ">=18"
@@ -39,32 +39,32 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "@natlibfi/marc-record": "^8.0.0",
42
- "@natlibfi/marc-record-serializers": "^10.1.1",
43
- "@natlibfi/marc-record-validate": "^8.0.1",
44
- "@natlibfi/marc-record-validators-melinda": "^10.13.0",
45
- "@natlibfi/melinda-backend-commons": "^2.2.1",
46
- "@natlibfi/melinda-commons": "^13.0.6",
42
+ "@natlibfi/marc-record-serializers": "^10.1.2-alpha.1",
43
+ "@natlibfi/marc-record-validate": "^8.0.3",
44
+ "@natlibfi/marc-record-validators-melinda": "^10.15.0",
45
+ "@natlibfi/melinda-backend-commons": "^2.2.2",
46
+ "@natlibfi/melinda-commons": "^13.0.7",
47
47
  "amqplib": "^0.10.3",
48
48
  "debug": "^4.3.4",
49
- "http-status": "^1.7.0",
49
+ "http-status": "^1.7.3",
50
50
  "moment": "^2.29.4",
51
51
  "mongo-sanitize": "^1.1.0",
52
52
  "mongodb": "^4.17.1"
53
53
  },
54
54
  "devDependencies": {
55
- "@babel/cli": "^7.22.15",
56
- "@babel/core": "^7.22.20",
57
- "@babel/plugin-transform-runtime": "^7.22.15",
58
- "@babel/preset-env": "^7.22.20",
55
+ "@babel/cli": "^7.23.0",
56
+ "@babel/core": "^7.23.2",
57
+ "@babel/plugin-transform-runtime": "^7.23.2",
58
+ "@babel/preset-env": "^7.23.2",
59
59
  "@natlibfi/eslint-config-melinda-backend": "^3.0.2",
60
- "@natlibfi/fixugen": "^2.0.1",
61
- "@natlibfi/fixura": "^3.0.1",
62
- "@natlibfi/fixura-mongo": "^2.0.10-alpha.1",
60
+ "@natlibfi/fixugen": "^2.0.2",
61
+ "@natlibfi/fixura": "^3.0.2",
62
+ "@natlibfi/fixura-mongo": "^2.0.10",
63
63
  "babel-plugin-istanbul": "^6.1.1",
64
64
  "babel-plugin-rewire": "^1.2.0",
65
- "chai": "^4.3.8",
65
+ "chai": "^4.3.10",
66
66
  "cross-env": "^7.0.3",
67
- "eslint": "^8.49.0",
67
+ "eslint": "^8.52.0",
68
68
  "mocha": "^10.2.0",
69
69
  "nodemon": "^3.0.1",
70
70
  "nyc": "^15.1.0"