@resolveio/server-lib 9.6.26 → 9.6.28

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.
@@ -228,7 +228,7 @@ var SubscriptionManager = /** @class */ (function () {
228
228
  userCopy = common_1.deepCopy(this._loggedInUsers);
229
229
  _loop_2 = function (i) {
230
230
  var loggedInUser = userCopy[i];
231
- if (!loggedInUser.date || moment().diff(moment(loggedInUser.date), 'seconds') >= 60) {
231
+ if (!loggedInUser.date || moment().diff(moment(loggedInUser.date), 'seconds') >= 30) {
232
232
  if (this_2._mainServer.getWS(loggedInUser.id_ws)) {
233
233
  this_2.unsubscribeAll(this_2._mainServer.getWS(loggedInUser.id_ws));
234
234
  }
@@ -268,7 +268,7 @@ var SubscriptionManager = /** @class */ (function () {
268
268
  return [2 /*return*/];
269
269
  }
270
270
  });
271
- }); }, 60000);
271
+ }); }, 30000);
272
272
  }
273
273
  SubscriptionManager.prototype.addToQueue = function (mongoQueue) {
274
274
  // let startDate = new Date();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/subscription.manager.ts"],"names":[],"mappings":"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","file":"subscription.manager.js","sourcesContent":["import { ServerResponseModel } from '../models/server-response.model';\nimport { ActiveSubscriptionModel, SubscriptionModel } from '../models/subscription.model';\nimport * as WebSocket from 'ws';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAppVersionPublications } from '../publications/app-version';\nimport { loadFilePublications } from '../publications/files';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadMethodResponsePublications } from '../publications/method-responses';\nimport ResolveIOMainServer from '../server-app';\nimport { ResolveIOServer } from '../index';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\n\nimport { ChangeStream } from 'mongodb';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { objectIdHexString } from './mongo.manager';\nimport { dateReviver, deepCopy } from '../util/common';\nimport * as moment from 'moment';\nimport * as NodeCache from 'node-cache';\n\n// Performance Dependencies\n// import * as path from 'path';\n// const { Worker } = require('worker_threads');\n\ninterface MongoQueueModel {\n\t_id: number,\n\ttype: string;\n\tcollection: string;\n\tsubscription: ActiveSubscriptionModel;\n\trunning: boolean;\n\trun_again: boolean;\n}\n\n// interface CurrentPerformanceMonitor {\n// \t_id: number;\n// \tfunction: string;\n// \tpublication: string;\n// \tsubscriptionData: any[];\n// \tdate_start: Date;\n// \tdate_end: Date;\n// \tduration: number;\n// \tresult: string;\n// }\n\nexport class SubscriptionManager {\n\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\n\tprivate _sendQueue = [];\n\tprivate _runningQueue = false;\n\t\n\tprivate _oplog: ChangeStream;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate serverConfig;\n\n\t// private currentPerfomanceMonitor: CurrentPerformanceMonitor[] = [];\n\t// private idPerformance: number = 0;\n\t// private performanceThread;\n\n\tconstructor(mainServer, wss: WebSocket.Server, serverConfig) {\n\t\tthis._mainServer = mainServer;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppVersionPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadMethodResponsePublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\n\t\tthis.tailOpLog();\n\n\t\t// DEBUG\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Active Subs:');\n\t\t// \tthis._subscriptions.forEach(sub => {\n\t\t// \t\tconsole.log(sub.publication, sub.cacheId, sub.cacheValid, sub.collections, JSON.stringify(sub.subscriptionData, null, 2), JSON.stringify(sub.clients, null, 2));\n\t\t// \t})\n\t\t// }, 10000);\n\n\t\tsetInterval(async () => {\n\t\t\tif (!this._runningQueue) {\n\t\t\t\tif (this._sendQueue.length) {\n\t\t\t\t\t// let startDate = new Date();\n\n\t\t\t\t\tthis._runningQueue = true;\n\t\t\t\t\tfor (let i = this._sendQueue.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(this._sendQueue[i].id_ws);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tif (ws.bufferedAmount < 20480) {\n\t\t\t\t\t\t\t\tlet sendItem = this._sendQueue.pop();\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(sendItem.data), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._sendQueue.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runningQueue = false;\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendInterval',\n\t\t\t\t\t// \tpublication: '',\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Done'\n\t\t\t\t\t// });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running);\n\t\t\tif (queueArr.length) {\n\t\t\t\tqueueArr.forEach(entry => {\n\t\t\t\t\tentry.running = true;\n\t\t\t\t});\n\n\t\t\t\t// let startDate = new Date();\n\n\t\t\t\tfor (let i = 0; i < queueArr.length; i++) {\n\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\tif (this._publications[mongoQueue.subscription.publication].ws_specific) {\n\t\t\t\t\t\tfor (let j = 0; j < mongoQueue.subscription.clients.length; j++) {\n\t\t\t\t\t\t\tlet client = mongoQueue.subscription.clients[j];\n\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\t\t\t\t\t\t\tif (ws && ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tthis.sendPubDataOnce(ws, client.messageId, mongoQueue.subscription, mongoQueue.type, mongoQueue.collection);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.sendPubData(mongoQueue.subscription, mongoQueue.type, mongoQueue.collection);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (mongoQueue.run_again) {\n\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\tmongoQueue.run_again = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'mongoQueue',\n\t\t\t\t// \tpublication: '',\n\t\t\t\t// \tsubscriptionData: queueArr,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Done'\n\t\t\t\t// });\n\t\t\t}\n\t\t}, 10);\n\n\t\tsetInterval(async () => {\n\t\t\tthis._loggedInUsers = await LoggedInUsers.find();\n\t\n\t\t\tlet userCopy = deepCopy(this._loggedInUsers);\n\t\t\tfor (let i = this._loggedInUsers.length - 1; i >= 0; i--) {\n\t\t\t\tlet loggedInUser = userCopy[i];\n\n\t\t\t\tif (!loggedInUser.date || moment().diff(moment(loggedInUser.date), 'seconds') >= 60) {\n\t\t\t\t\tif (this._mainServer.getWS(loggedInUser.id_ws)) {\n\t\t\t\t\t\tthis.unsubscribeAll(this._mainServer.getWS(loggedInUser.id_ws));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._subscriptions.forEach(sub => {\n\t\t\t\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\t\t\t\tif (client.id_socket === loggedInUser.id_ws) {\n\t\t\t\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\n\t\t\t\t\t\tif (this._loggedInUsers.findIndex(a => a._id === loggedInUser._id) >= 0) {\n\t\t\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.findIndex(a => a._id === loggedInUser._id), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < this._subscriptions.length; i++) {\n\t\t\t\tlet sub = this._subscriptions[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\tif (!this._loggedInUsers.some(a => a.id_ws === client.id_socket)) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 60000);\n\t}\n\n\tprivate addToQueue(mongoQueue: MongoQueueModel) {\n\t\t// let startDate = new Date();\n\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.subscription.publication === mongoQueue.subscription.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(mongoQueue.subscription.subscriptionData))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (_mongoQueue.running) {\n\t\t\t\t_mongoQueue.run_again = true;\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'addToQueue',\n\t\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t\t// \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Run Again'\n\t\t\t\t// });\n\t\t\t}\n\t\t\t// else {\n\t\t\t// \tlet endDate = new Date();\n\t\t\t// \tthis.currentPerfomanceMonitor.push({\n\t\t\t// \t\t_id: this.idPerformance++,\n\t\t\t// \t\tfunction: 'addToQueue',\n\t\t\t// \t\tpublication: mongoQueue.subscription.publication,\n\t\t\t// \t\tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \t\tdate_start: startDate,\n\t\t\t// \t\tdate_end: endDate,\n\t\t\t// \t\tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \t\tresult: 'Not Running Yet'\n\t\t\t// \t});\n\t\t\t// }\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.push(mongoQueue);\n\t\t\t\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'addToQueue',\n\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t// \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Add to Queue'\n\t\t\t// });\n\t\t}\n\t}\n\n\tpublic invalidatePubsCache(collection, type) {\n\t\t// let startDate = new Date();\n\n\t\tlet collSubs = this._subscriptions.filter(a => a.collections.includes(collection));\n\n\t\tfor (let i = collSubs.length - 1; i >= 0; i--) {\n\t\t\tlet sub = collSubs[i];\n\n\t\t\tsub.cacheValid = false;\n\n\t\t\tthis.addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\ttype: type,\n\t\t\t\tcollection: collection,\n\t\t\t\tsubscription: sub,\n\t\t\t\trunning: false,\n\t\t\t\trun_again: false\n\t\t\t});\n\t\t}\n\n\t\tResolveIOServer.getMongoManager().invalidateQueryCache(collection);\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'invalidatePubsCache',\n\t\t// \tpublication: collection,\n\t\t// \tsubscriptionData: [],\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Add all files to publications private object\n\tpublic publications(method: SubscriptionModel) {\n\t\tthis._publications = Object.assign(this._publications, method);\n\t}\n\n\tpublic async loggedInLatency(ws: WebSocket) {\n\t\tlet date = new Date();\n\n\t\tlet loggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\tif (loggedInUser) {\n\t\t\tloggedInUser.date = date;\n\t\t}\n\n\t\tLoggedInUsers.findOneAndUpdate({id_ws: ws['id_socket']}, {$set: {latency: ws['latency'], date: date}}).then(res => {\n\t\t\tif (!res) {\n\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t}\n\t\t}, () => {\n\t\t\tthis.unsubscribeAll(ws);\n\t\t});\n\t}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\t// let startDate = new Date();\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error(new Date(), 'No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 0; i < subscriptionData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = subscriptionData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tif (errors) {\n\t\t\t\t\t\t\tconsole.error(new Date(), 'Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet sub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\n\t\t\t// If sub found (another user watching same data), add client to same sub\n\t\t\tif (sub) {\n\t\t\t\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionData: subscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t}],\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tcacheValid: false\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\t\t\t}\n\n\t\t\tif (!sub.cacheId && !this._mongoQueue.some(a => a.subscription.publication === sub.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(sub.subscriptionData))) {\n\t\t\t\tthis.addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\tcollection: '',\n\t\t\t\t\tsubscription: sub,\n\t\t\t\t\trunning: false,\n\t\t\t\t\trun_again: false\n\t\t\t\t});\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Add to Queue'\n\t\t\t\t// });\n\t\t\t}\n\t\t\telse if (sub.cacheValid) {\n\t\t\t\tthis.sendPubDataOnce(ws, messageId, sub, 'newSub', publication);\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Send Pub Data Once'\n\t\t\t\t// });\n\t\t\t}\n\t\t}\n\n\t\tif (publication === 'appversion') {\n\t\t\tlet newLoggedInUser = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t__v: 0,\n\t\t\t\tdate: new Date(),\n\t\t\t\tid_user: ws['id_user'],\n\t\t\t\tuser: ws['user'],\n\t\t\t\tid_ws: ws['id_socket']\n\t\t\t};\n\n\t\t\tthis._loggedInUsers.push(newLoggedInUser);\n\n\t\t\tLoggedInUsers.insertOne(newLoggedInUser);\n\n\t\t\tif (ws['user'] !== 'Admin' && this.serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'supportCreateBillingUser', {\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tdate: new Date(),\n\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic async unsubscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\t// let startDate = new Date();\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet sub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\n\t\t\tif (sub) {\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (sub.clients[i].id_user === ws['id_user'] && sub.clients[i].messageId === messageId && sub.clients[i].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'unsubscribe',\n\t\t// \tpublication: publication,\n\t\t// \tsubscriptionData: subscriptionData,\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\t// let startDate = new Date();\n\n\t\tif (ws) {\n\t\t\tlet loggedInUser = await LoggedInUsers.findOne({id_ws: ws['id_socket']});\n\n\t\t\tif (loggedInUser) {\t\n\t\t\t\tif (this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id) >= 0) {\n\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\t\t\t}\n\n\t\t\tlet userSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\t\tlet sub = userSubs[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws.terminate();\n\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'unsubscribeAll',\n\t\t\t// \tpublication: '',\n\t\t\t// \tsubscriptionData: [ws['id_socket']],\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Done'\n\t\t\t// });\n\t\t}\n\n\t\t// console.log('After');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\t}\n\n\t// Get publication collection\n\tprivate getPublicationCollections(publication: string) {\n\t\treturn this._publications[publication].collections;\n\t}\n\n\t// Watch (tail) Mongo's operation log on the entire database (all insert/modify/delete will trigger this function)\n\tprivate tailOpLog() {\n\t\tthis._oplog = ResolveIOServer.getMainDB().watch();\n\n\t\tthis._oplog.on('change', (doc: any) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (doc.ns) {\n\t\t\t\tlet collection = doc.ns.coll;\n\t\t\t\t// console.log(new Date(), 'Op log doc', doc.operationType, collection);\n\n\t\t\t\tif (collection && !collection.endsWith('.versions') && !collection.startsWith('monitor-') && collection !== 'logs' && collection !== 'log-method-latencies' && collection !== 'log-subscriptions') {\n\t\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (collection === 'support-tickets') {\n\t\t\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'https://resolveio.com') {\n\t\t\t\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'sendSupportTicketEmail', doc.documentKey._id);\n\t\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Insert'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'update');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Update'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'delete');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Delete'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis._oplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit(1);\n\t\t});\n\t\t\n\t\tthis._oplog.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tprocess.exit(1);\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubDataOnce(ws: WebSocket, messageId: number, subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (!this._publications[subscription.publication].ws_specific) { // Same pub for all users\n\t\t\t\tif (subscription.cacheId && subscription.cacheValid) {\n\t\t\t\t\tlet cacheData = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcacheData = JSON.parse(this._nodeCache.get(subscription.cacheId), dateReviver);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(err) {\n\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cacheData) {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: cacheData\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif (serverRes.data === undefined) {\n\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - Invalid Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.addToQueue({\n\t\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tsubscription: subscription,\n\t\t\t\t\t\t\trunning: false,\n\t\t\t\t\t\t\trun_again: false\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send cache'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - No Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\n\t\t\t\t\tresolve(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse { // Pub is different for each user (Look at users publication) [MUCH SLOWER, RE-RUNS FOR EACH USER]\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ws['id_user'], ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubDataOnce - WS)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: res\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Success', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send ws spec data'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\n\t\t\t\t}, err => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: err\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Error', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubData(subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (!subscription.clients.length) {\n\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t}\n\n\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\tresolve(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubData)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tif (!subscription.clients.length) {\n\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'No clients'\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (subscription.cacheId && this._nodeCache.get(subscription.cacheId) === JSON.stringify(res)) {\n\t\t\t\t\t\t\tsubscription.cacheValid = true;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same cache dont send'\n\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\t\t\tif (ws) {\n\t\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (nodeCacheSize > 100000000) {\n\t\t\t\t\t\t\t\tlet deleteCount = 0;\n\n\t\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId);\n\t\n\t\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\n\t\t\t\t\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\t\n\t\t\t\t\t\t\t\t\tif (nodeCacheSize < 100000000) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tconsole.log('Sub Cache: ' + 'Too Big - ' + subscription.publication + ' - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tlet cacheId = this._cacheId;\n\t\t\t\t\t\t\tthis._cacheId += 1;\n\n\t\t\t\t\t\t\tthis._nodeCache.set(cacheId, JSON.stringify(res));\n\t\t\t\t\t\t\tsubscription.cacheId = cacheId;\n\t\t\t\t\t\t\tsubscription.cacheValid = true;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same data'\n\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\tif (ws) {\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\t\t\tdata: err\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate sendWS(ws: WebSocket, data: ServerResponseModel) {\n\t\tthis._sendQueue.splice(0, 0, {\n\t\t\tid_ws: ws['id_socket'],\n\t\t\tdata: data\n\t\t});\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../src/managers/subscription.manager.ts"],"names":[],"mappings":"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","file":"subscription.manager.js","sourcesContent":["import { ServerResponseModel } from '../models/server-response.model';\nimport { ActiveSubscriptionModel, SubscriptionModel } from '../models/subscription.model';\nimport * as WebSocket from 'ws';\nimport { loadLogPublications } from '../publications/logs';\nimport { loadAppStatusPublications } from '../publications/app-status';\nimport { loadAppVersionPublications } from '../publications/app-version';\nimport { loadFilePublications } from '../publications/files';\nimport { loadSuperAdminPublications } from '../publications/super-admin';\nimport { LoggedInUsers } from '../collections/logged-in-users.collection';\nimport { loadCronJobPublications } from '../publications/cron-jobs';\nimport { loadFlagsPublications } from '../publications/flags';\nimport { loadMethodResponsePublications } from '../publications/method-responses';\nimport ResolveIOMainServer from '../server-app';\nimport { ResolveIOServer } from '../index';\nimport { loadNotificationPublications } from '../publications/notifications';\nimport { loadReportBuilderReportPublications } from '../publications/report-builder-reports';\nimport { LoggedInUserModel } from '../models/logged-in-users.model';\n\nimport { ChangeStream } from 'mongodb';\nimport { loadReportBuilderLibraryPublications } from '../publications/report-builder-libraries';\nimport { loadUserGroupPublications } from '../publications/user-groups';\nimport { loadUserGuidePublications } from '../publications/user-guides';\nimport { loadReportBuilderDashboardBuilderPublications } from '../publications/report-builder-dashboard-builders';\nimport { objectIdHexString } from './mongo.manager';\nimport { dateReviver, deepCopy } from '../util/common';\nimport * as moment from 'moment';\nimport * as NodeCache from 'node-cache';\n\n// Performance Dependencies\n// import * as path from 'path';\n// const { Worker } = require('worker_threads');\n\ninterface MongoQueueModel {\n\t_id: number,\n\ttype: string;\n\tcollection: string;\n\tsubscription: ActiveSubscriptionModel;\n\trunning: boolean;\n\trun_again: boolean;\n}\n\n// interface CurrentPerformanceMonitor {\n// \t_id: number;\n// \tfunction: string;\n// \tpublication: string;\n// \tsubscriptionData: any[];\n// \tdate_start: Date;\n// \tdate_end: Date;\n// \tduration: number;\n// \tresult: string;\n// }\n\nexport class SubscriptionManager {\n\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _publications: SubscriptionModel = {};\n\tprivate _subscriptions: ActiveSubscriptionModel[] = [];\n\tprivate _wss: WebSocket.Server;\n\tprivate _loggedInUsers: LoggedInUserModel[] = [];\n\n\tprivate _mongoQueue: MongoQueueModel[] = [];\n\tprivate _mongoQueueId = 0;\n\n\tprivate _sendQueue = [];\n\tprivate _runningQueue = false;\n\t\n\tprivate _oplog: ChangeStream;\n\n\tprivate _nodeCache;\n\tprivate _cacheId = 1;\n\n\tprivate serverConfig;\n\n\t// private currentPerfomanceMonitor: CurrentPerformanceMonitor[] = [];\n\t// private idPerformance: number = 0;\n\t// private performanceThread;\n\n\tconstructor(mainServer, wss: WebSocket.Server, serverConfig) {\n\t\tthis._mainServer = mainServer;\n\n\t\tthis._nodeCache = new NodeCache( { stdTTL: 0, checkperiod: 0 } );\n\n\t\t// setTimeout(() => {\n\t\t// \tconsole.log('Setting up performance thread');\n\n\t\t// \tthis.performanceThread = new Worker(path.join(__dirname, './subscription.performance.js'));\n\n\t\t// \tthis.performanceThread.on('exit', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD EXITED!!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\n\t\t// \tthis.performanceThread.on('error', code => {\n\t\t// \t\tconsole.error(new Date(), 'THREAD RECV ERROR !!!!!!!!!!!!!!!!!!', code);\n\t\t// \t});\n\t\t// }, 5000);\n\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Post thread msg');\n\t\t// \tthis.performanceThread.postMessage(this.currentPerfomanceMonitor);\n\t\t// \tthis.currentPerfomanceMonitor = [];\n\t\t// }, 10000);\n\n\t\tthis.serverConfig = serverConfig;\n\t\tthis._wss = wss;\n\n\t\t// Publications\n\t\tloadSuperAdminPublications(this);\n\t\tloadAppVersionPublications(this);\n\t\tloadAppStatusPublications(this);\n\t\tloadLogPublications(this);\n\t\tloadFilePublications(this);\n\t\tloadCronJobPublications(this);\n\t\tloadFlagsPublications(this);\n\t\tloadMethodResponsePublications(this);\n\t\tloadNotificationPublications(this);\n\t\tloadReportBuilderReportPublications(this);\n\t\tloadReportBuilderLibraryPublications(this);\n\t\tloadUserGroupPublications(this);\n\t\tloadUserGuidePublications(this);\n\t\tloadReportBuilderDashboardBuilderPublications(this);\n\n\t\tthis.tailOpLog();\n\n\t\t// DEBUG\n\t\t// setInterval(() => {\n\t\t// \tconsole.log('Active Subs:');\n\t\t// \tthis._subscriptions.forEach(sub => {\n\t\t// \t\tconsole.log(sub.publication, sub.cacheId, sub.cacheValid, sub.collections, JSON.stringify(sub.subscriptionData, null, 2), JSON.stringify(sub.clients, null, 2));\n\t\t// \t})\n\t\t// }, 10000);\n\n\t\tsetInterval(async () => {\n\t\t\tif (!this._runningQueue) {\n\t\t\t\tif (this._sendQueue.length) {\n\t\t\t\t\t// let startDate = new Date();\n\n\t\t\t\t\tthis._runningQueue = true;\n\t\t\t\t\tfor (let i = this._sendQueue.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(this._sendQueue[i].id_ws);\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tif (ws.bufferedAmount < 20480) {\n\t\t\t\t\t\t\t\tlet sendItem = this._sendQueue.pop();\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(sendItem.data), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._sendQueue.splice(i, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runningQueue = false;\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendInterval',\n\t\t\t\t\t// \tpublication: '',\n\t\t\t\t\t// \tsubscriptionData: [],\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Done'\n\t\t\t\t\t// });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst queueArr = this._mongoQueue.filter(a => !a.running);\n\t\t\tif (queueArr.length) {\n\t\t\t\tqueueArr.forEach(entry => {\n\t\t\t\t\tentry.running = true;\n\t\t\t\t});\n\n\t\t\t\t// let startDate = new Date();\n\n\t\t\t\tfor (let i = 0; i < queueArr.length; i++) {\n\t\t\t\t\tlet mongoQueue = queueArr[i];\n\n\t\t\t\t\tif (this._publications[mongoQueue.subscription.publication].ws_specific) {\n\t\t\t\t\t\tfor (let j = 0; j < mongoQueue.subscription.clients.length; j++) {\n\t\t\t\t\t\t\tlet client = mongoQueue.subscription.clients[j];\n\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\t\t\t\t\t\t\tif (ws && ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tthis.sendPubDataOnce(ws, client.messageId, mongoQueue.subscription, mongoQueue.type, mongoQueue.collection);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.sendPubData(mongoQueue.subscription, mongoQueue.type, mongoQueue.collection);\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (mongoQueue.run_again) {\n\t\t\t\t\t\tmongoQueue.running = false;\n\t\t\t\t\t\tmongoQueue.run_again = false;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._mongoQueue.splice(this._mongoQueue.map(a => a._id).indexOf(mongoQueue._id), 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'mongoQueue',\n\t\t\t\t// \tpublication: '',\n\t\t\t\t// \tsubscriptionData: queueArr,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Done'\n\t\t\t\t// });\n\t\t\t}\n\t\t}, 10);\n\n\t\tsetInterval(async () => {\n\t\t\tthis._loggedInUsers = await LoggedInUsers.find();\n\t\n\t\t\tlet userCopy = deepCopy(this._loggedInUsers);\n\t\t\tfor (let i = this._loggedInUsers.length - 1; i >= 0; i--) {\n\t\t\t\tlet loggedInUser = userCopy[i];\n\n\t\t\t\tif (!loggedInUser.date || moment().diff(moment(loggedInUser.date), 'seconds') >= 30) {\n\t\t\t\t\tif (this._mainServer.getWS(loggedInUser.id_ws)) {\n\t\t\t\t\t\tthis.unsubscribeAll(this._mainServer.getWS(loggedInUser.id_ws));\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._subscriptions.forEach(sub => {\n\t\t\t\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\t\t\t\tif (client.id_socket === loggedInUser.id_ws) {\n\t\t\t\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\n\t\t\t\t\t\tif (this._loggedInUsers.findIndex(a => a._id === loggedInUser._id) >= 0) {\n\t\t\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.findIndex(a => a._id === loggedInUser._id), 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < this._subscriptions.length; i++) {\n\t\t\t\tlet sub = this._subscriptions[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tlet client = sub.clients[j];\n\n\t\t\t\t\tif (!this._loggedInUsers.some(a => a.id_ws === client.id_socket)) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}, 30000);\n\t}\n\n\tprivate addToQueue(mongoQueue: MongoQueueModel) {\n\t\t// let startDate = new Date();\n\n\t\tlet _mongoQueue = this._mongoQueue.filter(a => a.subscription.publication === mongoQueue.subscription.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(mongoQueue.subscription.subscriptionData))[0];\n\t\t\n\t\tif (_mongoQueue) {\n\t\t\tif (_mongoQueue.running) {\n\t\t\t\t_mongoQueue.run_again = true;\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'addToQueue',\n\t\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t\t// \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Run Again'\n\t\t\t\t// });\n\t\t\t}\n\t\t\t// else {\n\t\t\t// \tlet endDate = new Date();\n\t\t\t// \tthis.currentPerfomanceMonitor.push({\n\t\t\t// \t\t_id: this.idPerformance++,\n\t\t\t// \t\tfunction: 'addToQueue',\n\t\t\t// \t\tpublication: mongoQueue.subscription.publication,\n\t\t\t// \t\tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \t\tdate_start: startDate,\n\t\t\t// \t\tdate_end: endDate,\n\t\t\t// \t\tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \t\tresult: 'Not Running Yet'\n\t\t\t// \t});\n\t\t\t// }\n\t\t}\n\t\telse {\n\t\t\tmongoQueue._id = this._mongoQueueId;\n\t\t\tthis._mongoQueueId += 1;\n\n\t\t\tthis._mongoQueue.push(mongoQueue);\n\t\t\t\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'addToQueue',\n\t\t\t// \tpublication: mongoQueue.subscription.publication,\n\t\t\t// \tsubscriptionData: mongoQueue.subscription.subscriptionData,\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Add to Queue'\n\t\t\t// });\n\t\t}\n\t}\n\n\tpublic invalidatePubsCache(collection, type) {\n\t\t// let startDate = new Date();\n\n\t\tlet collSubs = this._subscriptions.filter(a => a.collections.includes(collection));\n\n\t\tfor (let i = collSubs.length - 1; i >= 0; i--) {\n\t\t\tlet sub = collSubs[i];\n\n\t\t\tsub.cacheValid = false;\n\n\t\t\tthis.addToQueue({\n\t\t\t\t_id: 0,\n\t\t\t\ttype: type,\n\t\t\t\tcollection: collection,\n\t\t\t\tsubscription: sub,\n\t\t\t\trunning: false,\n\t\t\t\trun_again: false\n\t\t\t});\n\t\t}\n\n\t\tResolveIOServer.getMongoManager().invalidateQueryCache(collection);\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'invalidatePubsCache',\n\t\t// \tpublication: collection,\n\t\t// \tsubscriptionData: [],\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Add all files to publications private object\n\tpublic publications(method: SubscriptionModel) {\n\t\tthis._publications = Object.assign(this._publications, method);\n\t}\n\n\tpublic async loggedInLatency(ws: WebSocket) {\n\t\tlet date = new Date();\n\n\t\tlet loggedInUser = this._loggedInUsers.filter(a => a.id_ws === ws['id_socket'])[0];\n\n\t\tif (loggedInUser) {\n\t\t\tloggedInUser.date = date;\n\t\t}\n\n\t\tLoggedInUsers.findOneAndUpdate({id_ws: ws['id_socket']}, {$set: {latency: ws['latency'], date: date}}).then(res => {\n\t\t\tif (!res) {\n\t\t\t\tthis.unsubscribeAll(ws);\n\t\t\t}\n\t\t}, () => {\n\t\t\tthis.unsubscribeAll(ws);\n\t\t});\n\t}\n\n\t// Subscribe to publication\n\tpublic async subscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\t// let startDate = new Date();\n\n\t\tlet pub = this._publications[publication];\n\n\t\tif (!pub) {\n\t\t\tconsole.error(new Date(), 'No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tif (subscriptionData.length > 1 || subscriptionData[0]) {\n\t\t\t\tif (!pub.check) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Function For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse if (!pub.check._schema) {\n\t\t\t\t\tconsole.error(new Date(), 'No Check Schema For Pub ' + publication);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet valObj = {};\n\t\t\t\t\tlet valKeys = Object.keys(pub.check._schema);\n\n\t\t\t\t\tlet rootKeys = valKeys.filter(a => !a.includes('.'));\n\t\t\t\t\t\n\t\t\t\t\tfor (let i = 0; i < subscriptionData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = subscriptionData[i];\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (errors) {\n\t\t\t\t\t\tif (errors) {\n\t\t\t\t\t\t\tconsole.error(new Date(), 'Error in Pub Check (' + publication + ')', errors);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet sub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\n\t\t\t// If sub found (another user watching same data), add client to same sub\n\t\t\tif (sub) {\n\t\t\t\tif (!sub.clients.some(a => a.id_socket === ws['id_socket'] && a.messageId === messageId)) {\n\t\t\t\t\tsub.clients.push({\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If sub not found, create new sub\n\t\t\telse {\n\t\t\t\tthis._subscriptions.push({\n\t\t\t\t\tpublication: publication,\n\t\t\t\t\tsubscriptionData: subscriptionData,\n\t\t\t\t\tcollections: this.getPublicationCollections(publication),\n\t\t\t\t\tclients: [{\n\t\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\tid_socket: ws['id_socket']\n\t\t\t\t\t}],\n\t\t\t\t\tcacheId: 0,\n\t\t\t\t\tcacheValid: false\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!sub) {\n\t\t\t\tsub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\t\t\t}\n\n\t\t\tif (!sub.cacheId && !this._mongoQueue.some(a => a.subscription.publication === sub.publication && JSON.stringify(a.subscription.subscriptionData) === JSON.stringify(sub.subscriptionData))) {\n\t\t\t\tthis.addToQueue({\n\t\t\t\t\t_id: 0,\n\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\tcollection: '',\n\t\t\t\t\tsubscription: sub,\n\t\t\t\t\trunning: false,\n\t\t\t\t\trun_again: false\n\t\t\t\t});\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Add to Queue'\n\t\t\t\t// });\n\t\t\t}\n\t\t\telse if (sub.cacheValid) {\n\t\t\t\tthis.sendPubDataOnce(ws, messageId, sub, 'newSub', publication);\n\n\t\t\t\t// let endDate = new Date();\n\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t// \tfunction: 'subscribe',\n\t\t\t\t// \tpublication: publication,\n\t\t\t\t// \tsubscriptionData: subscriptionData,\n\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t// \tresult: 'Send Pub Data Once'\n\t\t\t\t// });\n\t\t\t}\n\t\t}\n\n\t\tif (publication === 'appversion') {\n\t\t\tlet newLoggedInUser = {\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t__v: 0,\n\t\t\t\tdate: new Date(),\n\t\t\t\tid_user: ws['id_user'],\n\t\t\t\tuser: ws['user'],\n\t\t\t\tid_ws: ws['id_socket']\n\t\t\t};\n\n\t\t\tthis._loggedInUsers.push(newLoggedInUser);\n\n\t\t\tLoggedInUsers.insertOne(newLoggedInUser);\n\n\t\t\tif (ws['user'] !== 'Admin' && this.serverConfig['CLIENT_NAME'] !== 'ResolveIO') {\n\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'supportCreateBillingUser', {\n\t\t\t\t\tid_user: ws['id_user'],\n\t\t\t\t\tuser: ws['user'],\n\t\t\t\t\tdate: new Date(),\n\t\t\t\t\tclient: ResolveIOServer.getClientName()\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Unsubscribe from publication \n\tpublic async unsubscribe(messageDate: Date, ws: WebSocket, messageId: number, publication: string, ...subscriptionData: any[]) {\n\t\t// let startDate = new Date();\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\tif (!this._publications[publication]) {\n\t\t\tconsole.log('No Publication: ' + publication);\n\t\t\treturn;\n\t\t}\n\t\telse {\n\t\t\tlet sub = this._subscriptions.filter(a => a.publication === publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscriptionData))[0];\n\n\t\t\tif (sub) {\n\t\t\t\tfor (let i = sub.clients.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (sub.clients[i].id_user === ws['id_user'] && sub.clients[i].messageId === messageId && sub.clients[i].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(i, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// let endDate = new Date();\n\t\t// this.currentPerfomanceMonitor.push({\n\t\t// \t_id: this.idPerformance++,\n\t\t// \tfunction: 'unsubscribe',\n\t\t// \tpublication: publication,\n\t\t// \tsubscriptionData: subscriptionData,\n\t\t// \tdate_start: startDate,\n\t\t// \tdate_end: endDate,\n\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t// \tresult: 'Done'\n\t\t// });\n\t}\n\n\t// Unsubscribe from publication\n\tpublic async unsubscribeAll(ws: WebSocket) {\n\t\t// console.log('Before');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\n\t\t// let startDate = new Date();\n\n\t\tif (ws) {\n\t\t\tlet loggedInUser = await LoggedInUsers.findOne({id_ws: ws['id_socket']});\n\n\t\t\tif (loggedInUser) {\t\n\t\t\t\tif (this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id) >= 0) {\n\t\t\t\t\tthis._loggedInUsers.splice(this._loggedInUsers.map(a => a._id).indexOf(loggedInUser._id), 1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tLoggedInUsers.deleteOne({_id: loggedInUser._id});\n\t\t\t}\n\n\t\t\tlet userSubs = this._subscriptions.filter(a => a.clients.some(b => b.id_user === ws['id_user'] && b.id_socket === ws['id_socket']));\n\n\t\t\tfor (let i = userSubs.length - 1; i >= 0; i--) {\n\t\t\t\tlet sub = userSubs[i];\n\n\t\t\t\tfor (let j = sub.clients.length - 1; j >= 0; j--) {\n\t\t\t\t\tif (sub.clients[j].id_socket === ws['id_socket']) {\n\t\t\t\t\t\tsub.clients.splice(j, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tws.terminate();\n\n\t\t\t// let endDate = new Date();\n\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t// \t_id: this.idPerformance++,\n\t\t\t// \tfunction: 'unsubscribeAll',\n\t\t\t// \tpublication: '',\n\t\t\t// \tsubscriptionData: [ws['id_socket']],\n\t\t\t// \tdate_start: startDate,\n\t\t\t// \tdate_end: endDate,\n\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t// \tresult: 'Done'\n\t\t\t// });\n\t\t}\n\n\t\t// console.log('After');\n\t\t// console.dir(this._subscriptions.map(a => a.publication));\n\t}\n\n\t// Get publication collection\n\tprivate getPublicationCollections(publication: string) {\n\t\treturn this._publications[publication].collections;\n\t}\n\n\t// Watch (tail) Mongo's operation log on the entire database (all insert/modify/delete will trigger this function)\n\tprivate tailOpLog() {\n\t\tthis._oplog = ResolveIOServer.getMainDB().watch();\n\n\t\tthis._oplog.on('change', (doc: any) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (doc.ns) {\n\t\t\t\tlet collection = doc.ns.coll;\n\t\t\t\t// console.log(new Date(), 'Op log doc', doc.operationType, collection);\n\n\t\t\t\tif (collection && !collection.endsWith('.versions') && !collection.startsWith('monitor-') && collection !== 'logs' && collection !== 'log-method-latencies' && collection !== 'log-subscriptions') {\n\t\t\t\t\tif (doc.operationType === 'insert') {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (collection === 'support-tickets') {\n\t\t\t\t\t\t\tif (this.serverConfig['ROOT_URL'] === 'https://resolveio.com') {\n\t\t\t\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'sendSupportTicketEmail', doc.documentKey._id);\n\t\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'insert');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Insert'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'update' || doc.operationType === 'replace') {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'update');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Update'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t\telse if (doc.operationType === 'delete') {\n\t\t\t\t\t\tif (collection === 'cron-jobs') {\n\t\t\t\t\t\t\tthis._mainServer.getCronManager().checkCronJobsForUpdates();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (collection !== 'method-responses') {\n\t\t\t\t\t\t\tthis.invalidatePubsCache(collection, 'delete');\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'oplog',\n\t\t\t\t\t\t// \tpublication: collection,\n\t\t\t\t\t\t// \tsubscriptionData: [doc.documentKey._id],\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'Delete'\n\t\t\t\t\t\t// });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\t\tthis._oplog.on('error', error => {\n\t\t\tconsole.log('oplog error', error);\n\n\t\t\tprocess.exit(1);\n\t\t});\n\t\t\n\t\tthis._oplog.on('end', () => {\n\t\t\tconsole.log('oplog ended');\n\n\t\t\tprocess.exit(1);\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubDataOnce(ws: WebSocket, messageId: number, subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (!this._publications[subscription.publication].ws_specific) { // Same pub for all users\n\t\t\t\tif (subscription.cacheId && subscription.cacheValid) {\n\t\t\t\t\tlet cacheData = null;\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcacheData = JSON.parse(this._nodeCache.get(subscription.cacheId), dateReviver);\n\t\t\t\t\t}\n\t\t\t\t\tcatch(err) {\n\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cacheData) {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: cacheData\n\t\t\t\t\t\t};\n\t\n\t\t\t\t\t\tif (serverRes.data === undefined) {\n\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\t\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - Invalid Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.addToQueue({\n\t\t\t\t\t\t\t_id: 0,\n\t\t\t\t\t\t\ttype: 'newSub',\n\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\tsubscription: subscription,\n\t\t\t\t\t\t\trunning: false,\n\t\t\t\t\t\t\trun_again: false\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send cache'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During SendPubDataOnce - No Cache! - ' + subscription.publication + '\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2));\n\n\t\t\t\t\tresolve(false);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse { // Pub is different for each user (Look at users publication) [MUCH SLOWER, RE-RUNS FOR EACH USER]\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ws['id_user'], ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubDataOnce - WS)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\tdata: res\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Success', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t// \tfunction: 'sendPubDataOnce',\n\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t// \tresult: 'Send ws spec data'\n\t\t\t\t\t// });\n\n\t\t\t\t\tresolve(true);\n\n\t\t\t\t}, err => {\n\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\tdata: err\n\t\t\t\t\t};\n\n\t\t\t\t\t// console.log('Send Pub Data Once 2', new Date(), 'Error', subscription);\n\n\t\t\t\t\tthis.sendWS(ws, serverRes);\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\t// Fetch pub once, send to all clients linked to this pub\n\tprivate sendPubData(subscription: ActiveSubscriptionModel, type: string, collection: string) {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t// let startDate = new Date();\n\n\t\t\tif (!subscription.clients.length) {\n\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t}\n\n\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\tresolve(false);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (subscription.publication !== 'superadminAPM' && subscription.publication !== 'loggedInUsers') {\n\t\t\t\t\tthis._mainServer.getMethodManager().callMethodInternal.call(this._mainServer.getMethodManager(), 'insertSubscriptionLog', type, subscription.publication, collection, JSON.stringify(subscription.subscriptionData));\n\t\t\t\t}\n\n\t\t\t\tthis._publications[subscription.publication].function.call(Object.assign({}, this, SubscriptionManager.prototype), ...subscription.subscriptionData)\n\t\t\t\t.catch(methodErrs => {\n\t\t\t\t\tthis._mainServer.getMethodManager().sendEmail('dev@resolveio.com', 'SERVER - Error Detected - ' + this.serverConfig['CLIENT_NAME'], 'Error Detected During Subscription ' + subscription.publication + ' - (sendPubData)\\n\\nData \\n' + JSON.stringify(subscription.subscriptionData, null, 2) + '\\n\\nErrors\\n' + JSON.stringify(methodErrs, null, 2));\n\t\t\t\t})\n\t\t\t\t.then(res => {\n\t\t\t\t\tif (!subscription.clients.length) {\n\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._subscriptions.splice(this._subscriptions.findIndex(a => a.publication === subscription.publication && JSON.stringify(a.subscriptionData) === JSON.stringify(subscription.subscriptionData)), 1);\n\n\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t// \tresult: 'No clients'\n\t\t\t\t\t\t// });\n\n\t\t\t\t\t\tresolve(false);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (subscription.cacheId && this._nodeCache.get(subscription.cacheId) === JSON.stringify(res)) {\n\t\t\t\t\t\t\tsubscription.cacheValid = true;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same cache dont send'\n\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\t\t\tif (ws) {\n\t\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\t\t\tdata: res\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\t\tlet nodeCacheSize = this._nodeCache.getStats().vsize;\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tif (nodeCacheSize > 100000000) {\n\t\t\t\t\t\t\t\tlet deleteCount = 0;\n\n\t\t\t\t\t\t\t\tconst subArr = this._subscriptions.filter(a => a.cacheId);\n\t\n\t\t\t\t\t\t\t\tfor (let zz = 0; zz < subArr.length; zz++) {\n\t\t\t\t\t\t\t\t\tthis._nodeCache.del(subArr[zz].cacheId);\n\t\t\t\t\t\t\t\t\tsubscription.cacheId = 0;\n\t\t\t\t\t\t\t\t\tsubscription.cacheValid = false;\n\t\n\t\t\t\t\t\t\t\t\tdeleteCount += 1;\n\n\t\t\t\t\t\t\t\t\tnodeCacheSize = this._nodeCache.getStats().vsize;\n\t\n\t\t\t\t\t\t\t\t\tif (nodeCacheSize < 100000000) {\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tconsole.log('Sub Cache: ' + 'Too Big - ' + subscription.publication + ' - Deleted: ' + deleteCount + ' - ' + nodeCacheSize);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (subscription.cacheId) {\n\t\t\t\t\t\t\t\tthis._nodeCache.del(subscription.cacheId);\n\t\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\t\tlet cacheId = this._cacheId;\n\t\t\t\t\t\t\tthis._cacheId += 1;\n\n\t\t\t\t\t\t\tthis._nodeCache.set(cacheId, JSON.stringify(res));\n\t\t\t\t\t\t\tsubscription.cacheId = cacheId;\n\t\t\t\t\t\t\tsubscription.cacheValid = true;\n\n\t\t\t\t\t\t\t// let endDate = new Date();\n\t\t\t\t\t\t\t// this.currentPerfomanceMonitor.push({\n\t\t\t\t\t\t\t// \t_id: this.idPerformance++,\n\t\t\t\t\t\t\t// \tfunction: 'sendPubData',\n\t\t\t\t\t\t\t// \tpublication: subscription.publication,\n\t\t\t\t\t\t\t// \tsubscriptionData: subscription.subscriptionData,\n\t\t\t\t\t\t\t// \tdate_start: startDate,\n\t\t\t\t\t\t\t// \tdate_end: endDate,\n\t\t\t\t\t\t\t// \tduration: moment(endDate).diff(moment(startDate), 'milliseconds', false),\n\t\t\t\t\t\t\t// \tresult: 'Same data'\n\t\t\t\t\t\t\t// });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tresolve(true);\n\t\t\t\t\t}\n\t\t\t\t}, err => {\n\t\t\t\t\tsubscription.clients.forEach(client => {\n\t\t\t\t\t\tlet ws = this._mainServer.getWS(client.id_socket);\n\n\t\t\t\t\t\tif (ws) {\n\t\t\t\t\t\t\tif (ws['id_socket'] === client.id_socket) {\n\t\t\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\t\t\tmessageId: client.messageId,\n\t\t\t\t\t\t\t\t\thasError: true,\n\t\t\t\t\t\t\t\t\tdata: err\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tthis.sendWS(ws, serverRes);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treject(err);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate sendWS(ws: WebSocket, data: ServerResponseModel) {\n\t\tthis._sendQueue.splice(0, 0, {\n\t\t\tid_ws: ws['id_socket'],\n\t\t\tdata: data\n\t\t});\n\t}\n}\n"]}
@@ -46,7 +46,244 @@ var __1 = require("..");
46
46
  var common_1 = require("../util/common");
47
47
  function loadMonitorMethods(methodManager) {
48
48
  methodManager.methods({
49
- superadminMonitor: {
49
+ superadminMonitorGraphData: {
50
+ function: function (date_start, date_end, collection, instance, client, graphInterval, variable, variableType) {
51
+ var _this = this;
52
+ return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
53
+ var groupId, groupDate, query, graphData;
54
+ var _a, _b;
55
+ return __generator(this, function (_c) {
56
+ switch (_c.label) {
57
+ case 0:
58
+ groupId = {};
59
+ groupDate = {};
60
+ if (graphInterval === 'seconds') {
61
+ groupId = {
62
+ second: {
63
+ $second: {
64
+ date: '$date',
65
+ timezone: "America/Chicago"
66
+ }
67
+ },
68
+ minute: {
69
+ $minute: {
70
+ date: '$date',
71
+ timezone: "America/Chicago"
72
+ }
73
+ },
74
+ hour: {
75
+ $hour: {
76
+ date: '$date',
77
+ timezone: "America/Chicago"
78
+ }
79
+ },
80
+ day: {
81
+ $dayOfMonth: {
82
+ date: '$date',
83
+ timezone: "America/Chicago"
84
+ }
85
+ },
86
+ month: {
87
+ $month: {
88
+ date: '$date',
89
+ timezone: "America/Chicago"
90
+ }
91
+ },
92
+ year: {
93
+ $year: {
94
+ date: '$date',
95
+ timezone: "America/Chicago"
96
+ }
97
+ },
98
+ client: '$client',
99
+ instance: '$instance'
100
+ };
101
+ groupDate = {
102
+ 'year': '$_id.year',
103
+ 'month': '$_id.month',
104
+ 'day': '$_id.day',
105
+ 'hour': '$_id.hour',
106
+ 'minute': '$_id.minute',
107
+ 'second': '$_id.second'
108
+ };
109
+ }
110
+ else if (graphInterval === 'minutes') {
111
+ groupId = {
112
+ minute: {
113
+ $minute: {
114
+ date: '$date',
115
+ timezone: "America/Chicago"
116
+ }
117
+ },
118
+ hour: {
119
+ $hour: {
120
+ date: '$date',
121
+ timezone: "America/Chicago"
122
+ }
123
+ },
124
+ day: {
125
+ $dayOfMonth: {
126
+ date: '$date',
127
+ timezone: "America/Chicago"
128
+ }
129
+ },
130
+ month: {
131
+ $month: {
132
+ date: '$date',
133
+ timezone: "America/Chicago"
134
+ }
135
+ },
136
+ year: {
137
+ $year: {
138
+ date: '$date',
139
+ timezone: "America/Chicago"
140
+ }
141
+ },
142
+ client: '$client',
143
+ instance: '$instance'
144
+ };
145
+ groupDate = {
146
+ 'year': '$_id.year',
147
+ 'month': '$_id.month',
148
+ 'day': '$_id.day',
149
+ 'hour': '$_id.hour',
150
+ 'minute': '$_id.minute'
151
+ };
152
+ }
153
+ else if (graphInterval === 'hours') {
154
+ groupId = {
155
+ hour: {
156
+ $hour: {
157
+ date: '$date',
158
+ timezone: "America/Chicago"
159
+ }
160
+ },
161
+ day: {
162
+ $dayOfMonth: {
163
+ date: '$date',
164
+ timezone: "America/Chicago"
165
+ }
166
+ },
167
+ month: {
168
+ $month: {
169
+ date: '$date',
170
+ timezone: "America/Chicago"
171
+ }
172
+ },
173
+ year: {
174
+ $year: {
175
+ date: '$date',
176
+ timezone: "America/Chicago"
177
+ }
178
+ },
179
+ client: '$client',
180
+ instance: '$instance'
181
+ };
182
+ groupDate = {
183
+ 'year': '$_id.year',
184
+ 'month': '$_id.month',
185
+ 'day': '$_id.day',
186
+ 'hour': '$_id.hour'
187
+ };
188
+ }
189
+ else {
190
+ groupId = {
191
+ day: {
192
+ $dayOfMonth: {
193
+ date: '$date',
194
+ timezone: "America/Chicago"
195
+ }
196
+ },
197
+ month: {
198
+ $month: {
199
+ date: '$date',
200
+ timezone: "America/Chicago"
201
+ }
202
+ },
203
+ year: {
204
+ $year: {
205
+ date: '$date',
206
+ timezone: "America/Chicago"
207
+ }
208
+ },
209
+ client: '$client',
210
+ instance: '$instance'
211
+ };
212
+ groupDate = {
213
+ 'year': '$_id.year',
214
+ 'month': '$_id.month',
215
+ 'day': '$_id.day'
216
+ };
217
+ }
218
+ query = [
219
+ {
220
+ $match: {
221
+ $and: [
222
+ {
223
+ date: { $gte: date_start }
224
+ },
225
+ {
226
+ date: { $lte: date_end }
227
+ }
228
+ ]
229
+ }
230
+ }
231
+ ];
232
+ if (client) {
233
+ query[0]['$match'].$and.push({ client: client });
234
+ }
235
+ if (instance) {
236
+ query[0]['$match'].$and.push({ instance: instance });
237
+ }
238
+ query.push({
239
+ $group: (_a = {
240
+ _id: groupId
241
+ },
242
+ _a[variable] = variableType === 'count' ? { $sum: 1 } : (_b = {},
243
+ _b['$' + variableType] = '$' + variable,
244
+ _b),
245
+ _a)
246
+ });
247
+ query.push({
248
+ $group: {
249
+ _id: groupDate,
250
+ data: {
251
+ $push: { k: { $concat: ['$_id.client', ' - ', { $replaceAll: { input: '$_id.instance', find: ".", replacement: "-" } }] }, v: '$' + variable }
252
+ }
253
+ }
254
+ });
255
+ query.push({
256
+ $addFields: {
257
+ data: {
258
+ $arrayToObject: '$data'
259
+ }
260
+ }
261
+ });
262
+ query.push({
263
+ $replaceRoot: {
264
+ newRoot: {
265
+ $mergeObjects: ['$data', '$$ROOT']
266
+ }
267
+ }
268
+ });
269
+ query.push({
270
+ $project: {
271
+ data: 0
272
+ }
273
+ });
274
+ console.log(JSON.stringify(query, null, 2));
275
+ return [4 /*yield*/, __1.ResolveIOServer.getMongoManager().collection(collection).aggregate(query, { allowDiskUse: true, readPreference: 'secondary' })];
276
+ case 1:
277
+ graphData = _c.sent();
278
+ resolve(graphData);
279
+ return [2 /*return*/];
280
+ }
281
+ });
282
+ }); });
283
+ },
284
+ skipValidation: true
285
+ },
286
+ superadminMonitorTableData: {
50
287
  function: function (date_start, date_end, collection, instance, client, graphInterval, variable, variableType) {
51
288
  var _this = this;
52
289
  return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
@@ -238,6 +475,8 @@ function loadMonitorMethods(methodManager) {
238
475
  firstGroupId = common_1.deepCopy(groupId);
239
476
  if (collection === 'monitor-mongos') {
240
477
  firstGroupId[variable] = '$' + variable;
478
+ groupDate[variable] = '$' + variable;
479
+ groupDate[variable] = '$date';
241
480
  groupDate['data'] = '$data';
242
481
  }
243
482
  if (collection === 'monitor-mongos') {
@@ -277,6 +516,9 @@ function loadMonitorMethods(methodManager) {
277
516
  _c[variable] = {
278
517
  '$sum': '$data.' + variable
279
518
  },
519
+ _c.date = {
520
+ $push: '$date'
521
+ },
280
522
  _c.data = {
281
523
  $push: '$data'
282
524
  },
@@ -317,7 +559,7 @@ function loadMonitorMethods(methodManager) {
317
559
  $group: {
318
560
  _id: groupDate,
319
561
  data: {
320
- $push: { k: { $concat: ['$_id.client', ' - ', '$_id.instance'] }, v: '$' + variable }
562
+ $push: { k: { $concat: ['$_id.client', ' - ', { $replaceAll: { input: '$_id.instance', find: ".", replacement: "-" } }] }, v: '$' + variable }
321
563
  }
322
564
  }
323
565
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/methods/monitor.ts"],"names":[],"mappings":"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","file":"monitor.js","sourcesContent":["import { MethodManager } from '../managers/method.manager';\nimport { MonitorMongos } from '../collections/monitor-mongo.collection';\nimport { MonitorCPUs } from '../collections/monitor-cpu.collection';\nimport { MonitorHTTPSOutbounds } from '../collections/monitor-https-outbound.collection';\nimport { MonitorHTTPSInbounds } from '../collections/monitor-https-inbound.collection';\nimport { MonitorMemorys } from '../collections/monitor-memory.collection';\nimport { ResolveIOServer } from '..';\nimport { deepCopy } from '../util/common';\n\nexport function loadMonitorMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n superadminMonitor: {\n function: function(date_start: Date, date_end: Date, collection: string, instance: string, client: string, graphInterval: string, variable: string, variableType: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet groupId = {};\n\t\t\t\t\tlet groupDate = {};\n\n\t\t\t\t\tif (graphInterval === 'seconds') {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\tsecond: {\n\t\t\t\t\t\t\t\t$second: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tminute: {\n\t\t\t\t\t\t\t\t$minute: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\thour: {\n\t\t\t\t\t\t\t\t$hour: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day',\n\t\t\t\t\t\t\t'hour': '$_id.hour',\n\t\t\t\t\t\t\t'minute': '$_id.minute',\n\t\t\t\t\t\t\t'second': '$_id.second'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse if (graphInterval === 'minutes') {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\tminute: {\n\t\t\t\t\t\t\t\t$minute: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\thour: {\n\t\t\t\t\t\t\t\t$hour: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day',\n\t\t\t\t\t\t\t'hour': '$_id.hour',\n\t\t\t\t\t\t\t'minute': '$_id.minute'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse if (graphInterval === 'hours') {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\thour: {\n\t\t\t\t\t\t\t\t$hour: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day',\n\t\t\t\t\t\t\t'hour': '$_id.hour'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day'\n\t\t\t\t\t\t};\n }\n\n let query = <any>[\n {\n $match: {\n $and: [\n {\n date: {$gte: date_start}\n },\n {\n date: {$lte: date_end}\n }\n ]\n }\n }\n ];\n\n if (client) {\n query[0]['$match'].$and.push({client: client});\n }\n\n if (instance) {\n query[0]['$match'].$and.push({instance: instance});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet firstGroupId = deepCopy(groupId);\n\t\t\t\t\t\n\t\t\t\t\tif (collection === 'monitor-mongos') {\n\t\t\t\t\t\tfirstGroupId[variable] = '$' + variable;\n\t\t\t\t\t\tgroupDate['data'] = '$data';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (collection === 'monitor-mongos') {\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t\t_id: firstGroupId,\n\t\t\t\t\t\t\t\t\t[variable]: {\n\t\t\t\t\t\t\t\t\t\t'$sum': 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t[variable + '_name']: {\n\t\t\t\t\t\t\t\t\t\t$first: '$' + [variable]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\t\t\t\t$first: '$date'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tclient: {\n\t\t\t\t\t\t\t\t\t\t$first: '$client'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tinstance: {\n\t\t\t\t\t\t\t\t\t\t$first: '$instance'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t[variable]: '$' + variable,\n\t\t\t\t\t\t\t\t\t[variable + '_name']: '$' + variable + '_name'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t_id: groupId,\n\t\t\t\t\t\t\t\t[variable]: {\n\t\t\t\t\t\t\t\t\t'$sum': '$data.' + variable\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t$push: '$data'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\t\t[variable]: groupDate\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t\tclient: '$_id.client',\n\t\t\t\t\t\t\t\t\t\tinstance: '$_id.instance'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t$push: '$' + variable\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t[variable]: {\n\t\t\t\t\t\t\t\t\t\t$sum: '$' + variable + '.' + variable\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t\t_id: groupId,\n\t\t\t\t\t\t\t\t\t[variable]: {\n\t\t\t\t\t\t\t\t\t\t['$' + variableType]: '$' + variable\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t\t_id: groupDate,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t$push: {k: {$concat: ['$_id.client', ' - ', '$_id.instance']}, v: '$' + variable}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t$arrayToObject: '$data'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$replaceRoot: {\n\t\t\t\t\t\t\t\t\tnewRoot: {\n\t\t\t\t\t\t\t\t\t\t$mergeObjects: ['$data', '$$ROOT']\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\t\t\tdata: 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconsole.log(JSON.stringify(query, null, 2));\n\n\t\t\t\t\tlet graphData = await ResolveIOServer.getMongoManager().collection(collection).aggregate(query, {allowDiskUse: true, readPreference: 'secondary'});\n\n\t\t\t\t\tresolve(graphData);\n\t\t\t\t});\n\t\t\t},\n\t\t\tskipValidation: true\n },\n monitorMongos: {\n function: function() {\n return MonitorMongos.find({}, {readPreference: 'secondary'});\n }\n },\n monitorCPUs: {\n function: function() {\n return MonitorCPUs.find({}, {readPreference: 'secondary'});\n }\n },\n monitorMemorys: {\n function: function() {\n return MonitorMemorys.find({}, {readPreference: 'secondary'});\n }\n },\n monitorHTTPSOutbounds: {\n function: function() {\n return MonitorHTTPSOutbounds.find({}, {readPreference: 'secondary'});\n }\n },\n monitorHTTPSInbounds: {\n function: function() {\n return MonitorHTTPSInbounds.find({}, {readPreference: 'secondary'});\n }\n },\n\t});\n}"]}
1
+ {"version":3,"sources":["../../src/methods/monitor.ts"],"names":[],"mappings":"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","file":"monitor.js","sourcesContent":["import { MethodManager } from '../managers/method.manager';\nimport { MonitorMongos } from '../collections/monitor-mongo.collection';\nimport { MonitorCPUs } from '../collections/monitor-cpu.collection';\nimport { MonitorHTTPSOutbounds } from '../collections/monitor-https-outbound.collection';\nimport { MonitorHTTPSInbounds } from '../collections/monitor-https-inbound.collection';\nimport { MonitorMemorys } from '../collections/monitor-memory.collection';\nimport { ResolveIOServer } from '..';\nimport { deepCopy } from '../util/common';\n\nexport function loadMonitorMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n superadminMonitorGraphData: {\n function: function(date_start: Date, date_end: Date, collection: string, instance: string, client: string, graphInterval: string, variable: string, variableType: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet groupId = {};\n\t\t\t\t\tlet groupDate = {};\n\n\t\t\t\t\tif (graphInterval === 'seconds') {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\tsecond: {\n\t\t\t\t\t\t\t\t$second: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tminute: {\n\t\t\t\t\t\t\t\t$minute: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\thour: {\n\t\t\t\t\t\t\t\t$hour: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day',\n\t\t\t\t\t\t\t'hour': '$_id.hour',\n\t\t\t\t\t\t\t'minute': '$_id.minute',\n\t\t\t\t\t\t\t'second': '$_id.second'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse if (graphInterval === 'minutes') {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\tminute: {\n\t\t\t\t\t\t\t\t$minute: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\thour: {\n\t\t\t\t\t\t\t\t$hour: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day',\n\t\t\t\t\t\t\t'hour': '$_id.hour',\n\t\t\t\t\t\t\t'minute': '$_id.minute'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse if (graphInterval === 'hours') {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\thour: {\n\t\t\t\t\t\t\t\t$hour: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day',\n\t\t\t\t\t\t\t'hour': '$_id.hour'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day'\n\t\t\t\t\t\t};\n }\n\n let query = <any>[\n {\n $match: {\n $and: [\n {\n date: {$gte: date_start}\n },\n {\n date: {$lte: date_end}\n }\n ]\n }\n }\n ];\n\n if (client) {\n query[0]['$match'].$and.push({client: client});\n }\n\n if (instance) {\n query[0]['$match'].$and.push({instance: instance});\n\t\t\t\t\t}\n\n\t\t\t\t\tquery.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t_id: groupId,\n\t\t\t\t\t\t\t\t[variable]: variableType === 'count' ? {$sum: 1} : {\n\t\t\t\t\t\t\t\t\t['$' + variableType]: '$' + variable\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tquery.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t_id: groupDate,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t$push: {k: {$concat: ['$_id.client', ' - ', {$replaceAll: { input: '$_id.instance', find: \".\", replacement: \"-\" }}]}, v: '$' + variable}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tquery.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t$arrayToObject: '$data'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tquery.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$replaceRoot: {\n\t\t\t\t\t\t\t\tnewRoot: {\n\t\t\t\t\t\t\t\t\t$mergeObjects: ['$data', '$$ROOT']\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tquery.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\t\tdata: 0\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tconsole.log(JSON.stringify(query, null, 2));\n\n\t\t\t\t\tlet graphData = await ResolveIOServer.getMongoManager().collection(collection).aggregate(query, {allowDiskUse: true, readPreference: 'secondary'});\n\n\t\t\t\t\tresolve(graphData);\n\t\t\t\t});\n\t\t\t},\n\t\t\tskipValidation: true\n },\n\t\tsuperadminMonitorTableData: {\n function: function(date_start: Date, date_end: Date, collection: string, instance: string, client: string, graphInterval: string, variable: string, variableType: string) {\n\t\t\t\treturn new Promise(async (resolve, reject) => {\n\t\t\t\t\tlet groupId = {};\n\t\t\t\t\tlet groupDate = {};\n\n\t\t\t\t\tif (graphInterval === 'seconds') {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\tsecond: {\n\t\t\t\t\t\t\t\t$second: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tminute: {\n\t\t\t\t\t\t\t\t$minute: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\thour: {\n\t\t\t\t\t\t\t\t$hour: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day',\n\t\t\t\t\t\t\t'hour': '$_id.hour',\n\t\t\t\t\t\t\t'minute': '$_id.minute',\n\t\t\t\t\t\t\t'second': '$_id.second'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse if (graphInterval === 'minutes') {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\tminute: {\n\t\t\t\t\t\t\t\t$minute: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\thour: {\n\t\t\t\t\t\t\t\t$hour: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day',\n\t\t\t\t\t\t\t'hour': '$_id.hour',\n\t\t\t\t\t\t\t'minute': '$_id.minute'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse if (graphInterval === 'hours') {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\thour: {\n\t\t\t\t\t\t\t\t$hour: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day',\n\t\t\t\t\t\t\t'hour': '$_id.hour'\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tgroupId = {\n\t\t\t\t\t\t\tday: {\n\t\t\t\t\t\t\t\t$dayOfMonth: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tmonth: {\n\t\t\t\t\t\t\t\t$month: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyear: {\n\t\t\t\t\t\t\t\t$year: {\n\t\t\t\t\t\t\t\t\tdate: '$date',\n\t\t\t\t\t\t\t\t\ttimezone: \"America/Chicago\"\n\t\t\t\t\t\t\t\t} \n },\n client: '$client',\n instance: '$instance'\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tgroupDate = {\n\t\t\t\t\t\t\t'year': '$_id.year',\n\t\t\t\t\t\t\t'month': '$_id.month',\n\t\t\t\t\t\t\t'day': '$_id.day'\n\t\t\t\t\t\t};\n }\n\n let query = <any>[\n {\n $match: {\n $and: [\n {\n date: {$gte: date_start}\n },\n {\n date: {$lte: date_end}\n }\n ]\n }\n }\n ];\n\n if (client) {\n query[0]['$match'].$and.push({client: client});\n }\n\n if (instance) {\n query[0]['$match'].$and.push({instance: instance});\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tlet firstGroupId = deepCopy(groupId);\n\t\t\t\t\t\n\t\t\t\t\tif (collection === 'monitor-mongos') {\n\t\t\t\t\t\tfirstGroupId[variable] = '$' + variable;\n\t\t\t\t\t\tgroupDate[variable] = '$' + variable;\n\t\t\t\t\t\tgroupDate[variable] = '$date';\n\t\t\t\t\t\tgroupDate['data'] = '$data';\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif (collection === 'monitor-mongos') {\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t\t_id: firstGroupId,\n\t\t\t\t\t\t\t\t\t[variable]: {\n\t\t\t\t\t\t\t\t\t\t'$sum': 1\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t[variable + '_name']: {\n\t\t\t\t\t\t\t\t\t\t$first: '$' + [variable]\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\t\t\t\t$first: '$date'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tclient: {\n\t\t\t\t\t\t\t\t\t\t$first: '$client'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tinstance: {\n\t\t\t\t\t\t\t\t\t\t$first: '$instance'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t[variable]: '$' + variable,\n\t\t\t\t\t\t\t\t\t[variable + '_name']: '$' + variable + '_name'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t_id: groupId,\n\t\t\t\t\t\t\t\t[variable]: {\n\t\t\t\t\t\t\t\t\t'$sum': '$data.' + variable\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdate: {\n\t\t\t\t\t\t\t\t\t$push: '$date'\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t$push: '$data'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\n\t\t\t\t\t\tquery.push({\n\t\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\t\t[variable]: groupDate\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t\t_id: {\n\t\t\t\t\t\t\t\t\t\tclient: '$_id.client',\n\t\t\t\t\t\t\t\t\t\tinstance: '$_id.instance'\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t$push: '$' + variable\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t[variable]: {\n\t\t\t\t\t\t\t\t\t\t$sum: '$' + variable + '.' + variable\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t\t_id: groupId,\n\t\t\t\t\t\t\t\t\t[variable]: {\n\t\t\t\t\t\t\t\t\t\t['$' + variableType]: '$' + variable\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$group: {\n\t\t\t\t\t\t\t\t\t_id: groupDate,\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t$push: {k: {$concat: ['$_id.client', ' - ', {$replaceAll: { input: '$_id.instance', find: \".\", replacement: \"-\" }}]}, v: '$' + variable}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\t\t$arrayToObject: '$data'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$replaceRoot: {\n\t\t\t\t\t\t\t\t\tnewRoot: {\n\t\t\t\t\t\t\t\t\t\t$mergeObjects: ['$data', '$$ROOT']\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tquery.push(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\t\t\tdata: 0\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconsole.log(JSON.stringify(query, null, 2));\n\n\t\t\t\t\tlet graphData = await ResolveIOServer.getMongoManager().collection(collection).aggregate(query, {allowDiskUse: true, readPreference: 'secondary'});\n\n\t\t\t\t\tresolve(graphData);\n\t\t\t\t});\n\t\t\t},\n\t\t\tskipValidation: true\n },\n monitorMongos: {\n function: function() {\n return MonitorMongos.find({}, {readPreference: 'secondary'});\n }\n },\n monitorCPUs: {\n function: function() {\n return MonitorCPUs.find({}, {readPreference: 'secondary'});\n }\n },\n monitorMemorys: {\n function: function() {\n return MonitorMemorys.find({}, {readPreference: 'secondary'});\n }\n },\n monitorHTTPSOutbounds: {\n function: function() {\n return MonitorHTTPSOutbounds.find({}, {readPreference: 'secondary'});\n }\n },\n monitorHTTPSInbounds: {\n function: function() {\n return MonitorHTTPSInbounds.find({}, {readPreference: 'secondary'});\n }\n },\n\t});\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "9.6.26",
3
+ "version": "9.6.28",
4
4
  "description": "",
5
5
  "main": "index.ts",
6
6
  "scripts": {
package/server-app.js CHANGED
@@ -380,7 +380,7 @@ var ResolveIOMainServer = /** @class */ (function () {
380
380
  });
381
381
  ws['versionTimer'] = setTimeout(function () {
382
382
  _this.unsubscribeWS(ws);
383
- }, 10000);
383
+ }, 20000);
384
384
  // On data received (message)
385
385
  ws.on('message', function (message) { return __awaiter(_this, void 0, void 0, function () {
386
386
  var parseErrorFound, socketData, messageRoute_1, messageDate, messageId, type, subType, pub, serverRes, offlineUpdates, i, update, serverResMethod, i, update, data, updateRoute, updateDate, updateMessageId, updateType, method, methodLatencyId, method, serverRes, methodLatencyId;
package/server-app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/server-app.ts"],"names":[],"mappings":"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","file":"server-app.js","sourcesContent":["import { createServer, Server } from 'http';\nimport * as express from 'express';\nimport * as bodyParser from 'body-parser';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport * as WebSocket from 'ws';\nimport * as jwt from 'jsonwebtoken';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as SegfaultHandler from 'segfault-handler';\nimport * as moment from 'moment';\n\nimport { dateReviver, getBinarySize, deepCopy } from './util/common';\n\nimport { objectIdHexString } from './managers/mongo.manager';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { MonitorManager } from './managers/monitor.manager';\n\nimport { ServerResponseModel } from './models/server-response.model';\n\nimport { MethodResponses } from './collections/method-response.collection';\nimport { Logs } from './collections/log.collection';\nimport { LogMethodLatencies } from './collections/log-method-latency.collection';\nimport { Users } from './collections/user.collection';\n\nimport { setupHomeRoutes } from './http/home';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { ResolveIOServer } from './index';\n\nexport default class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _server: Server;\n\tprivate _port: string | number;\n\tprivate _wss: WebSocket.Server;\n\tprivate _serverConfig;\n\tprivate _clientDir;\n\tprivate _msgQueue = [];\n\tprivate _msgQueueRunning = false;\n\tpublic sesMail = false;\n\tprivate standardProgram = false;\n\n\tprivate LOGGER = 'ERROR'; //ERROR / DEBUG\n\n\tprivate _monitorManager: MonitorManager;\n\tprivate _subscriptionManager: SubscriptionManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _cronManager: CronManager;\n\tprivate _clientRoutes: string[] = [];\n\n\tprivate _serverStartTime: Date;\n\tprivate _lastErrorMsg: Date = null;\n\n\tconstructor(mainServer, monitorAgent, serverConfig, clientRoutes, clientDir, sesMail, standardProgram) {\n\t\tthis._serverConfig = serverConfig;\n\t\tthis._clientRoutes = clientRoutes;\n\t\tthis._clientDir = clientDir;\n\t\tthis.sesMail = sesMail;\n\t\tthis.standardProgram = standardProgram;\n\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\t\n\t\tif (serverConfig['ROOT_URL'] !== 'http://localhost:4200') {\n\t\t\tthis._monitorManager = new MonitorManager(mainServer, monitorAgent, serverConfig);\n\t\t}\n\n\t\tprocess.on('unhandledRejection', async (error, rej) => {\n\t\t\t// console.error(new Date(), 'Unhandled Rejection at Promise', [error, rej]);\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (error && error['name'] === 'MongoError' && error['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error) {\n\t\t\t\tif (error['name'] !== 'StatusError' && error['message'] !== '') {\n\t\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconsole.error(error, 'Uncaught Exception thrown');\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Exception - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t}\n\n\t\t\tprocess.exit(1);\n\t\t});\n\n\t\tSegfaultHandler.registerHandler('crash.log', async (signal, address, stack) => {\n\t\t\t// Do what you want with the signal, address, or stack (array)\n\t\t\t// This callback will execute before the signal is forwarded on.\n\n\t\t\tconsole.log('Segment Fault Detected');\n\t\t\tconsole.log('Signal', JSON.stringify(signal, null, 2));\n\t\t\tconsole.log('Address', JSON.stringify(address, null, 2));\n\t\t\tconsole.log('Stack', JSON.stringify(stack, null, 2));\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Segfault - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([signal, address, stack], null, 2));\n\t\t\t}\n\n\t\t\tprocess.exit(1);\n\t\t});\n\n\t\t//SegfaultHandler.causeSegfault(); // simulates a buggy native module that dereferences NULL\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Starting ResolveIO Server');\n\t\t}\n\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use body parser for http call (login)\n\t\tthis._app.use(bodyParser.json({limit: '50mb', reviver: dateReviver}));\n\t\tthis._app.use(bodyParser.urlencoded({limit: '50mb', extended: true, parameterLimit: 1000000 }));\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._port = process.env.PORT || serverConfig['PORT'];\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\t\t\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\n\t\t\t// Website you wish to allow to connect\n\t\t\t// res.setHeader('Access-Control-Allow-Origin', serverConfig['ROOT_URL']);\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\t\t\n\t\t\t// Request methods you wish to allow\n\t\t\t// res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');\n\t\t\tres.setHeader('Access-Control-Allow-Methods', 'GET, POST');\n\t\t\n\t\t\t// Request headers you wish to allow\n\t\t\tres.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');\n\t\t\n\t\t\t// Set to true if you need the website to include cookies in the requests sent\n\t\t\t// to the API (e.g. in case you use sessions)\n\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'false');\n\t\t\n\t\t\t// Pass to next layer of middleware\n\t\t\tnext();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup cors');\n\t\t}\n\n\t\t// Set up http login route\n\t\tsetupAuthRoutes(this, this._app, serverConfig);\n\t\tsetupHealthRoutes(this._app, serverConfig);\n\n\t\tif (serverConfig['CLIENT_NAME'] === 'ResolveIO' || this.standardProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, serverConfig);\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tpublic getWS(id_ws: string) {\n\t\treturn Array.from(this._wss.clients).filter(a => a['id_socket'] === id_ws)[0];\n\t}\n\n\tpublic getWSList() {\n\t\tlet res = [];\n\n\t\tthis._wss.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_socket']);\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tpublic getWSUserList() {\n\t\tlet res = [];\n\n\t\tthis._wss.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_user']);\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tpublic getHTTPServer() {\n\t\treturn this._server;\n\t}\n\n\tpublic getCronManager() {\n\t\treturn this._cronManager;\n\t}\n\n\tpublic getMethodManager() {\n\t\treturn this._methodManager;\n\t}\n\n\tpublic getSubscriptionManager() {\n\t\treturn this._subscriptionManager;\n\t}\n\n\tpublic getMonitorManager() {\n\t\treturn this._monitorManager;\n\t}\n\n\tprivate createServer(): void {\n\t\t// Start express server\n\t\tthis._server = createServer(this._app);\n\t\tthis._server.keepAliveTimeout = 65000;\n\t\tthis._server.headersTimeout = 66000; // This should be bigger than `keepAliveTimeout + your server's expected response time`\n\n\t\t// Start websocket server\n\t\t// Verify client with token before opening socket\n\t\tthis._wss = new WebSocket.Server({ \n\t\t\tserver: this._server,\n\t\t\tverifyClient: async (info, cb) => {\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Verify Client', info, cb);\n\t\t\t\t}\n\n\t\t\t\tlet infoData = (<string>info.req.headers['sec-websocket-protocol']).split(/,/);\n\n\t\t\t\tif (info.origin !== this._serverConfig['ROOT_URL'] && info.origin !== this._serverConfig['SEC_ROOT_URL'] && info.origin !== this._serverConfig['RESOLVEIO_URL'] && info.origin !== this._serverConfig['RESOLVEIO_SECONDARY_URL']) {\n\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (infoData[1]) { //app version\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, this._serverConfig['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcb(false, 401, 'Invalid Version');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Start MongoDB Connection\n\t\tthis.setUpMongo();\n\t}\n\n\tprivate setUpMongo() {\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Start Managers');\n\t\t}\n\n\t\t// Start Managers\n\t\tthis._subscriptionManager = new SubscriptionManager(this, this._wss, this._serverConfig);\n\t\tthis._methodManager = new MethodManager(this, this._serverConfig, this._clientDir);\n\t\tthis._cronManager = new CronManager(this);\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('End Managers');\n\t\t}\n\n\t\tthis.listen();\n\t}\n\n\t// Listen to port for websocket\n\tprivate listen(): void {\n\t\tthis._server.listen(this._port, () => {\n\t\t\tconsole.log('Running server on port %s', this._port);\n\t\t});\n\n\t\t// On websocket connection (already verified)\n\t\tthis._wss.on('connection', (ws, req) => {\n\n\t\t\t// Get user from token\n\t\t\tws['id_user'] = req['id_user'];\n\t\t\tws['user'] = req['user'];\n\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\tws['doc_user'] = req['doc_user'];\n\t\t\tws['id_socket'] = uuidv4();\n\t\t\tws['retryCnt'] = 0;\n\n\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\tconsole.log('Connection from: ' + req['user']);\n\t\t\t}\n\t\t\t\n\t\t\t// Use for keeping connection alive (ping/pong)\n\t\t\tws['isAlive'] = true;\n\t\t\tws.on('pong', () => {\n\t\t\t\tws['isAlive'] = true;\n\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t});\n\n\t\t\tws['versionTimer'] = setTimeout(() => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t}, 10000);\n\n\t\t\t// On data received (message)\n\t\t\tws.on('message', async (message: string) => {\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Message from: ' + ws['user'], message);\n\t\t\t\t}\n\n\t\t\t\tlet parseErrorFound = false;\n\n\t\t\t\tlet socketData = [];\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tsocketData = JSON.parse(message, dateReviver);\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\tconsole.log('Error - JSON.parse', message);\n\t\t\t\t\t\n\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - JSON Parse Error - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([message, e]));\n\n\t\t\t\t\tparseErrorFound = true;\n\t\t\t\t}\n\n\t\t\t\tif (!parseErrorFound) {\n\t\t\t\t\tif (socketData[0] === 'ping') {\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send('pong', (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet messageRoute = socketData[0];\n\n\t\t\t\t\tif (this._clientRoutes.some(a => messageRoute.includes(a)) && !ws['doc_user'].roles.groups.some(a => a.views.some(b => messageRoute.includes(b))) && !ws['doc_user'].roles.super_admin) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet messageDate = socketData[1];\n\t\t\t\t\tlet messageId = socketData[2]\n\t\t\t\t\tlet type = socketData[3]\n\n\t\t\t\t\tif (type === 'subscription') {\n\t\t\t\t\t\tlet subType = socketData[4];\n\t\t\t\t\t\tlet pub = socketData[5];\n\t\t\n\t\t\t\t\t\t// Subscribe\n\t\t\t\t\t\tif (subType === 'sub') {\n\t\t\t\t\t\t\tthis._subscriptionManager.subscribe(messageDate, ws, messageId, pub, ...socketData.slice(6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Unsubscribe\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._subscriptionManager.unsubscribe(messageDate, ws, messageId, pub, ...socketData.slice(6));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (type === 'offline') {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet offlineUpdates = socketData[4];\n\t\t\t\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\t\t\t\tmessageId: update.data[2],\n\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(serverResMethod), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\t\t\t\tlet update = offlineUpdates[i];\n\t\t\t\t\t\t\tlet data = update.data;\n\n\t\t\t\t\t\t\tif (update.oldData) {\n\t\t\t\t\t\t\t\tdata.push(update.oldData);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t\t\t\tlet updateDate = data.shift();\n\t\t\t\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t\t\t\tlet updateType = data.shift();\n\t\t\t\t\t\t\tlet method = data.shift();\n\t\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'setWSAppVersion' && method !== 'getDrivers') {\n\t\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\t\tawait this._methodManager.callMethodInternal.call(Object.assign({}, this._methodManager, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\n\t\t\t\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (type === 'method' && socketData[4] === 'setWSAppVersion') {\n\t\t\t\t\t\tclearTimeout(ws['versionTimer']);\n\n\t\t\t\t\t\tlet method = socketData[4];\n\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\tthis._methodManager.callMethod(methodLatencyId, <any>ws, messageDate, messageId, method, ...socketData.slice(5));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('Could not find method: ' + method);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._msgQueue.splice(0, 0, {\n\t\t\t\t\t\t\tws: ws,\n\t\t\t\t\t\t\tdata: socketData\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tws.on('close', () => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t});\n\n\t\t\tws.on('error', error => {\n\t\t\t\tconsole.log(new Date(), ws['user'], ws['id_socket'], error);\n\t\t\t\t\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t});\n\t\t});\n\n\t\t// Keep alive timer to ping/pong\n\t\tsetInterval(() => {\n\t\t\tthis._wss.clients.forEach((ws: WebSocket) => {\n\t\t\t\tif (ws['isAlive'] === false) {\n\t\t\t\t\tws['retryCnt']++;\n\n\t\t\t\t\tif (ws['retryCnt'] >= 60) {\n\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\tws.ping(() => {});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\tws['isAlive'] = false;\n\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\tws.ping(() => {});\n\t\t\t\t}\n\t\t\t});\n\t\t}, 15000);\n\n\t\tsetInterval(async () => {\n\t\t\t// console.log(data);\n\n\t\t\tif (!this._msgQueueRunning) {\n\t\t\t\tthis._msgQueueRunning = true;\n\t\t\t\t\n\t\t\t\tfor (let i = this._msgQueue.length - 1; i >= 0; i--) {\n\t\t\t\t\tlet msg = this._msgQueue.pop();\n\t\t\t\t\tlet data = msg.data;\n\t\t\t\t\tlet ws = msg.ws;\n\t\t\n\t\t\t\t\tlet messageRoute: string = data.shift();\n\t\t\t\t\tlet messageDate: Date = data.shift();\n\t\t\t\t\tlet messageId: number = data.shift();\n\t\t\t\t\tlet type: string = data.shift();\n\t\t\n\t\t\t\t\t// Method call\n\t\t\t\t\tif (type === 'method') {\n\t\t\t\t\t\tlet method = data.shift();\n\n\t\t\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers') {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\tthis._methodManager.callMethod(methodLatencyId, ws, messageDate, messageId, method, ...data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('Could not find method: ' + method);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (type === 'methodResponse') {\n\t\t\t\t\t\tlet method = data.shift();\n\t\t\n\t\t\t\t\t\tMethodResponses.findOne({$and: [\n\t\t\t\t\t\t\t{id_user: ws['id_user']}, \n\t\t\t\t\t\t\t{message_id: messageId},\n\t\t\t\t\t\t\t{method: method},\n\t\t\t\t\t\t\t{date: messageDate}\n\t\t\t\t\t\t]}).then(res => {\n\t\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\t\tws.send(JSON.stringify(res.response), (error) => {\n\t\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._msgQueueRunning = false;\n\t\t\t}\n\t\t}, 10);\n\t}\n\n\tpublic unsubscribeWS(ws: WebSocket) {\n\t\tthis._subscriptionManager.unsubscribeAll(ws);\n\t}\n\n\tpublic getApp() {\n\t\treturn this._app;\n\t}\n}"]}
1
+ {"version":3,"sources":["../../src/server-app.ts"],"names":[],"mappings":"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","file":"server-app.js","sourcesContent":["import { createServer, Server } from 'http';\nimport * as express from 'express';\nimport * as bodyParser from 'body-parser';\nimport * as xmlParser from 'express-xml-bodyparser';\nimport * as WebSocket from 'ws';\nimport * as jwt from 'jsonwebtoken';\nimport { v4 as uuidv4 } from 'uuid';\nimport * as SegfaultHandler from 'segfault-handler';\nimport * as moment from 'moment';\n\nimport { dateReviver, getBinarySize, deepCopy } from './util/common';\n\nimport { objectIdHexString } from './managers/mongo.manager';\nimport { CronManager } from './managers/cron.manager';\nimport { MethodManager } from './managers/method.manager';\nimport { SubscriptionManager } from './managers/subscription.manager';\nimport { MonitorManager } from './managers/monitor.manager';\n\nimport { ServerResponseModel } from './models/server-response.model';\n\nimport { MethodResponses } from './collections/method-response.collection';\nimport { Logs } from './collections/log.collection';\nimport { LogMethodLatencies } from './collections/log-method-latency.collection';\nimport { Users } from './collections/user.collection';\n\nimport { setupHomeRoutes } from './http/home';\nimport { setupAuthRoutes } from './http/auth';\nimport { setupHealthRoutes } from './http/health';\nimport { ResolveIOServer } from './index';\n\nexport default class ResolveIOMainServer {\n\tprivate _app: express.Application;\n\tprivate _server: Server;\n\tprivate _port: string | number;\n\tprivate _wss: WebSocket.Server;\n\tprivate _serverConfig;\n\tprivate _clientDir;\n\tprivate _msgQueue = [];\n\tprivate _msgQueueRunning = false;\n\tpublic sesMail = false;\n\tprivate standardProgram = false;\n\n\tprivate LOGGER = 'ERROR'; //ERROR / DEBUG\n\n\tprivate _monitorManager: MonitorManager;\n\tprivate _subscriptionManager: SubscriptionManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _cronManager: CronManager;\n\tprivate _clientRoutes: string[] = [];\n\n\tprivate _serverStartTime: Date;\n\tprivate _lastErrorMsg: Date = null;\n\n\tconstructor(mainServer, monitorAgent, serverConfig, clientRoutes, clientDir, sesMail, standardProgram) {\n\t\tthis._serverConfig = serverConfig;\n\t\tthis._clientRoutes = clientRoutes;\n\t\tthis._clientDir = clientDir;\n\t\tthis.sesMail = sesMail;\n\t\tthis.standardProgram = standardProgram;\n\n\t\tthis._serverStartTime = new Date();\n\t\tthis._lastErrorMsg = null;\n\t\t\n\t\tif (serverConfig['ROOT_URL'] !== 'http://localhost:4200') {\n\t\t\tthis._monitorManager = new MonitorManager(mainServer, monitorAgent, serverConfig);\n\t\t}\n\n\t\tprocess.on('unhandledRejection', async (error, rej) => {\n\t\t\t// console.error(new Date(), 'Unhandled Rejection at Promise', [error, rej]);\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (error && error['name'] === 'MongoError' && error['message'] === 'not master') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error && error['name'] === 'MongoError' && error['message'] === 'not master and slaveOk=false') {\n\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t}, 60000);\n\n\t\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - Quitting NodeJS - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t}\n\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\telse if (error) {\n\t\t\t\tif (error['name'] !== 'StatusError' && error['message'] !== '') {\n\t\t\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t\t\t}, 60000);\n\n\t\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Rejection - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tprocess.on('uncaughtException', async error => {\n\t\t\tconsole.error(error, 'Uncaught Exception thrown');\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tthis._lastErrorMsg = new Date();\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis._lastErrorMsg = null;\n\t\t\t\t}, 60000);\n\t\t\t\t\n\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Unhandled Exception - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([error['name'], error['message'], error['stack']], null, 2));\n\t\t\t}\n\n\t\t\tprocess.exit(1);\n\t\t});\n\n\t\tSegfaultHandler.registerHandler('crash.log', async (signal, address, stack) => {\n\t\t\t// Do what you want with the signal, address, or stack (array)\n\t\t\t// This callback will execute before the signal is forwarded on.\n\n\t\t\tconsole.log('Segment Fault Detected');\n\t\t\tconsole.log('Signal', JSON.stringify(signal, null, 2));\n\t\t\tconsole.log('Address', JSON.stringify(address, null, 2));\n\t\t\tconsole.log('Stack', JSON.stringify(stack, null, 2));\n\n\t\t\tlet diffTimeSec = moment().diff(this._serverStartTime, 'seconds');\n\n\t\t\tif (diffTimeSec > 60 && !this._lastErrorMsg) {\n\t\t\t\tawait this._methodManager.sendEmail('dev@resolveio.com', 'SERVER - Segfault - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([signal, address, stack], null, 2));\n\t\t\t}\n\n\t\t\tprocess.exit(1);\n\t\t});\n\n\t\t//SegfaultHandler.causeSegfault(); // simulates a buggy native module that dereferences NULL\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Starting ResolveIO Server');\n\t\t}\n\n\t\t// Start express app\n\t\tthis._app = express();\n\n\t\t// Use body parser for http call (login)\n\t\tthis._app.use(bodyParser.json({limit: '50mb', reviver: dateReviver}));\n\t\tthis._app.use(bodyParser.urlencoded({limit: '50mb', extended: true, parameterLimit: 1000000 }));\n\t\tthis._app.use(xmlParser());\n\t\t\n\t\t// Set port\n\t\tthis._port = process.env.PORT || serverConfig['PORT'];\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup ports');\n\t\t}\n\n\t\t// Create http server and websock server\n\t\tthis.createServer();\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Create server');\n\t\t}\n\t\t\n\t\t// Set CORS\n\t\tthis._app.use(function (req, res, next) {\n\n\t\t\t// Website you wish to allow to connect\n\t\t\t// res.setHeader('Access-Control-Allow-Origin', serverConfig['ROOT_URL']);\n\t\t\tres.setHeader('Access-Control-Allow-Origin', '*');\n\t\t\n\t\t\t// Request methods you wish to allow\n\t\t\t// res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');\n\t\t\tres.setHeader('Access-Control-Allow-Methods', 'GET, POST');\n\t\t\n\t\t\t// Request headers you wish to allow\n\t\t\tres.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');\n\t\t\n\t\t\t// Set to true if you need the website to include cookies in the requests sent\n\t\t\t// to the API (e.g. in case you use sessions)\n\t\t\tres.setHeader('Access-Control-Allow-Credentials', 'false');\n\t\t\n\t\t\t// Pass to next layer of middleware\n\t\t\tnext();\n\t\t});\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup cors');\n\t\t}\n\n\t\t// Set up http login route\n\t\tsetupAuthRoutes(this, this._app, serverConfig);\n\t\tsetupHealthRoutes(this._app, serverConfig);\n\n\t\tif (serverConfig['CLIENT_NAME'] === 'ResolveIO' || this.standardProgram) {\n\t\t\tsetupHomeRoutes(this, this._app, serverConfig);\n\t\t}\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Setup express routes');\n\t\t}\n\t}\n\n\tpublic getWS(id_ws: string) {\n\t\treturn Array.from(this._wss.clients).filter(a => a['id_socket'] === id_ws)[0];\n\t}\n\n\tpublic getWSList() {\n\t\tlet res = [];\n\n\t\tthis._wss.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_socket']);\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tpublic getWSUserList() {\n\t\tlet res = [];\n\n\t\tthis._wss.clients.forEach((ws: WebSocket) => {\n\t\t\tres.push(ws['id_user']);\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tpublic getHTTPServer() {\n\t\treturn this._server;\n\t}\n\n\tpublic getCronManager() {\n\t\treturn this._cronManager;\n\t}\n\n\tpublic getMethodManager() {\n\t\treturn this._methodManager;\n\t}\n\n\tpublic getSubscriptionManager() {\n\t\treturn this._subscriptionManager;\n\t}\n\n\tpublic getMonitorManager() {\n\t\treturn this._monitorManager;\n\t}\n\n\tprivate createServer(): void {\n\t\t// Start express server\n\t\tthis._server = createServer(this._app);\n\t\tthis._server.keepAliveTimeout = 65000;\n\t\tthis._server.headersTimeout = 66000; // This should be bigger than `keepAliveTimeout + your server's expected response time`\n\n\t\t// Start websocket server\n\t\t// Verify client with token before opening socket\n\t\tthis._wss = new WebSocket.Server({ \n\t\t\tserver: this._server,\n\t\t\tverifyClient: async (info, cb) => {\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Verify Client', info, cb);\n\t\t\t\t}\n\n\t\t\t\tlet infoData = (<string>info.req.headers['sec-websocket-protocol']).split(/,/);\n\n\t\t\t\tif (info.origin !== this._serverConfig['ROOT_URL'] && info.origin !== this._serverConfig['SEC_ROOT_URL'] && info.origin !== this._serverConfig['RESOLVEIO_URL'] && info.origin !== this._serverConfig['RESOLVEIO_SECONDARY_URL']) {\n\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (infoData[1]) { //app version\n\t\t\t\t\t\tlet token = infoData[0];\n\t\t\t\t\t\tif (!token) {\n\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tjwt.verify(token, this._serverConfig['JWT_SECRET'], async (err, decoded) => {\n\t\t\t\t\t\t\t\tif (err) {\n\t\t\t\t\t\t\t\t\tcb(false, 401, 'Unauthorized');\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tinfo.req['id_user'] = decoded['id_user'];\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tlet user = await Users.findById(decoded['id_user']);\n\t\t\t\t\t\t\t\t\t\tif (user) {\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user'] = user.fullname;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['user_readonly'] = user.readonly || false;\n\t\t\t\t\t\t\t\t\t\t\tinfo.req['doc_user'] = user;\n\t\t\t\t\t\t\t\t\t\t\tcb(true);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcatch (err) {\n\t\t\t\t\t\t\t\t\t\tcb(false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcb(false, 401, 'Invalid Version');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Start MongoDB Connection\n\t\tthis.setUpMongo();\n\t}\n\n\tprivate setUpMongo() {\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('Start Managers');\n\t\t}\n\n\t\t// Start Managers\n\t\tthis._subscriptionManager = new SubscriptionManager(this, this._wss, this._serverConfig);\n\t\tthis._methodManager = new MethodManager(this, this._serverConfig, this._clientDir);\n\t\tthis._cronManager = new CronManager(this);\n\n\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\tconsole.log('End Managers');\n\t\t}\n\n\t\tthis.listen();\n\t}\n\n\t// Listen to port for websocket\n\tprivate listen(): void {\n\t\tthis._server.listen(this._port, () => {\n\t\t\tconsole.log('Running server on port %s', this._port);\n\t\t});\n\n\t\t// On websocket connection (already verified)\n\t\tthis._wss.on('connection', (ws, req) => {\n\n\t\t\t// Get user from token\n\t\t\tws['id_user'] = req['id_user'];\n\t\t\tws['user'] = req['user'];\n\t\t\tws['user_readonly'] = req['user_readonly'];\n\t\t\tws['doc_user'] = req['doc_user'];\n\t\t\tws['id_socket'] = uuidv4();\n\t\t\tws['retryCnt'] = 0;\n\n\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\tconsole.log('Connection from: ' + req['user']);\n\t\t\t}\n\t\t\t\n\t\t\t// Use for keeping connection alive (ping/pong)\n\t\t\tws['isAlive'] = true;\n\t\t\tws.on('pong', () => {\n\t\t\t\tws['isAlive'] = true;\n\t\t\t\tws['pongTime'] = new Date();\n\t\t\t\tws['latency'] = moment.duration(moment(ws['pongTime']).diff(ws['pingTime'])).asMilliseconds();\n\t\t\t\tthis._subscriptionManager.loggedInLatency(ws);\n\t\t\t});\n\n\t\t\tws['versionTimer'] = setTimeout(() => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t}, 20000);\n\n\t\t\t// On data received (message)\n\t\t\tws.on('message', async (message: string) => {\n\t\t\t\tif (this.LOGGER === 'DEBUG') {\n\t\t\t\t\tconsole.log('Message from: ' + ws['user'], message);\n\t\t\t\t}\n\n\t\t\t\tlet parseErrorFound = false;\n\n\t\t\t\tlet socketData = [];\n\t\t\t\t\n\t\t\t\ttry {\n\t\t\t\t\tsocketData = JSON.parse(message, dateReviver);\n\t\t\t\t}\n\t\t\t\tcatch(e) {\n\t\t\t\t\tconsole.log('Error - JSON.parse', message);\n\t\t\t\t\t\n\t\t\t\t\tthis._methodManager.sendEmail('dev@resolveio.com', 'SERVER - JSON Parse Error - ' + this._serverConfig['CLIENT_NAME'], JSON.stringify([message, e]));\n\n\t\t\t\t\tparseErrorFound = true;\n\t\t\t\t}\n\n\t\t\t\tif (!parseErrorFound) {\n\t\t\t\t\tif (socketData[0] === 'ping') {\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send('pong', (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet messageRoute = socketData[0];\n\n\t\t\t\t\tif (this._clientRoutes.some(a => messageRoute.includes(a)) && !ws['doc_user'].roles.groups.some(a => a.views.some(b => messageRoute.includes(b))) && !ws['doc_user'].roles.super_admin) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tlet messageDate = socketData[1];\n\t\t\t\t\tlet messageId = socketData[2]\n\t\t\t\t\tlet type = socketData[3]\n\n\t\t\t\t\tif (type === 'subscription') {\n\t\t\t\t\t\tlet subType = socketData[4];\n\t\t\t\t\t\tlet pub = socketData[5];\n\t\t\n\t\t\t\t\t\t// Subscribe\n\t\t\t\t\t\tif (subType === 'sub') {\n\t\t\t\t\t\t\tthis._subscriptionManager.subscribe(messageDate, ws, messageId, pub, ...socketData.slice(6));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Unsubscribe\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis._subscriptionManager.unsubscribe(messageDate, ws, messageId, pub, ...socketData.slice(6));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (type === 'offline') {\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet offlineUpdates = socketData[4];\n\t\t\t\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\t\t\t\tlet update = offlineUpdates[i];\n\n\t\t\t\t\t\t\tlet serverResMethod: ServerResponseModel = {\n\t\t\t\t\t\t\t\tmessageId: update.data[2],\n\t\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t\t};\n\t\t\t\n\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\tws.send(JSON.stringify(serverResMethod), (error) => {\n\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (let i = 0; i < offlineUpdates.length; i++) {\n\t\t\t\t\t\t\tlet update = offlineUpdates[i];\n\t\t\t\t\t\t\tlet data = update.data;\n\n\t\t\t\t\t\t\tif (update.oldData) {\n\t\t\t\t\t\t\t\tdata.push(update.oldData);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlet updateRoute = data.shift();\n\t\t\t\t\t\t\tlet updateDate = data.shift();\n\t\t\t\t\t\t\tlet updateMessageId = data.shift();\n\t\t\t\t\t\t\tlet updateType = data.shift();\n\t\t\t\t\t\t\tlet method = data.shift();\n\t\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t\t});\n\t\t\t\n\t\t\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'setWSAppVersion' && method !== 'getDrivers') {\n\t\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\t\tawait this._methodManager.callMethodInternal.call(Object.assign({}, this._methodManager, {id_user: ws['id_user'], user: ws['user'], id_ws: ws['id_socket']}), method, ...data);\n\n\t\t\t\t\t\t\t\tif (method === 'updateDocumentOffline' || method === 'updateDocumentPropsOffline') {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMongoManager().invalidateQueryCache(data[0]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconsole.log('Offline - Could not find method: ' + method);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (type === 'method' && socketData[4] === 'setWSAppVersion') {\n\t\t\t\t\t\tclearTimeout(ws['versionTimer']);\n\n\t\t\t\t\t\tlet method = socketData[4];\n\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\tthis._methodManager.callMethod(methodLatencyId, <any>ws, messageDate, messageId, method, ...socketData.slice(5));\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('Could not find method: ' + method);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._msgQueue.splice(0, 0, {\n\t\t\t\t\t\t\tws: ws,\n\t\t\t\t\t\t\tdata: socketData\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tws.on('close', () => {\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t});\n\n\t\t\tws.on('error', error => {\n\t\t\t\tconsole.log(new Date(), ws['user'], ws['id_socket'], error);\n\t\t\t\t\n\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t});\n\t\t});\n\n\t\t// Keep alive timer to ping/pong\n\t\tsetInterval(() => {\n\t\t\tthis._wss.clients.forEach((ws: WebSocket) => {\n\t\t\t\tif (ws['isAlive'] === false) {\n\t\t\t\t\tws['retryCnt']++;\n\n\t\t\t\t\tif (ws['retryCnt'] >= 60) {\n\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\t\tws.ping(() => {});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tws['retryCnt'] = 0;\n\t\t\t\t\tws['isAlive'] = false;\n\t\t\t\t\tws['pingTime'] = new Date();\n\t\t\t\t\tws.ping(() => {});\n\t\t\t\t}\n\t\t\t});\n\t\t}, 15000);\n\n\t\tsetInterval(async () => {\n\t\t\t// console.log(data);\n\n\t\t\tif (!this._msgQueueRunning) {\n\t\t\t\tthis._msgQueueRunning = true;\n\t\t\t\t\n\t\t\t\tfor (let i = this._msgQueue.length - 1; i >= 0; i--) {\n\t\t\t\t\tlet msg = this._msgQueue.pop();\n\t\t\t\t\tlet data = msg.data;\n\t\t\t\t\tlet ws = msg.ws;\n\t\t\n\t\t\t\t\tlet messageRoute: string = data.shift();\n\t\t\t\t\tlet messageDate: Date = data.shift();\n\t\t\t\t\tlet messageId: number = data.shift();\n\t\t\t\t\tlet type: string = data.shift();\n\t\t\n\t\t\t\t\t// Method call\n\t\t\t\t\tif (type === 'method') {\n\t\t\t\t\t\tlet method = data.shift();\n\n\t\t\t\t\t\tif (ws['user_readonly']) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlet methodLatencyId = objectIdHexString();\n\n\t\t\t\t\t\tLogMethodLatencies.create({\n\t\t\t\t\t\t\t_id: methodLatencyId,\n\t\t\t\t\t\t\t__v: 0,\n\t\t\t\t\t\t\tdate_start: new Date(),\n\t\t\t\t\t\t\tdate_end: null,\n\t\t\t\t\t\t\tlatency_ms: 0,\n\t\t\t\t\t\t\tmethod: method\n\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\tif (method !== 'reportBuilderGetResults' && method !== 'reportBuilderGetDistinctValue' && method !== 'reportBuilderBuildTree' && method !== 'generatePDF' && method !== 'getWOOfflineData' && method !== 'countQuery' && method !== 'countWithQuery' && method !== 'countCollectionWithQuery' && method !== 'find' && method !== 'findOne' && method !== 'findWithOptions' && method !== 'getDrivers') {\n\t\t\t\t\t\t\tLogs.insertOne({\n\t\t\t\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\t\t\t\ttype: 'client-request',\n\t\t\t\t\t\t\t\tcollection: '',\n\t\t\t\t\t\t\t\tid_document: '',\n\t\t\t\t\t\t\t\tpayload: getBinarySize(JSON.stringify(data)) < 200000 ? JSON.stringify(data, null, 2) : 'Too Big',\n\t\t\t\t\t\t\t\tmethod: method,\n\t\t\t\t\t\t\t\tid_user: ws['id_user'] || '',\n\t\t\t\t\t\t\t\tuser: ws['user'] || '',\n\t\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\t\troute: messageRoute\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\tlet serverRes: ServerResponseModel = {\n\t\t\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\t\t\thasError: false,\n\t\t\t\t\t\t\tdata: 'ACK'\n\t\t\t\t\t\t};\n\t\t\n\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\tws.send(JSON.stringify(serverRes), (error) => {\n\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\n\t\t\t\t\t\tif (this._methodManager._methods[method]) {\n\t\t\t\t\t\t\tthis._methodManager.callMethod(methodLatencyId, ws, messageDate, messageId, method, ...data);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconsole.log('Could not find method: ' + method);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse if (type === 'methodResponse') {\n\t\t\t\t\t\tlet method = data.shift();\n\t\t\n\t\t\t\t\t\tMethodResponses.findOne({$and: [\n\t\t\t\t\t\t\t{id_user: ws['id_user']}, \n\t\t\t\t\t\t\t{message_id: messageId},\n\t\t\t\t\t\t\t{method: method},\n\t\t\t\t\t\t\t{date: messageDate}\n\t\t\t\t\t\t]}).then(res => {\n\t\t\t\t\t\t\tif (res) {\n\t\t\t\t\t\t\t\tif (ws && ws.readyState === ws.OPEN) {\n\t\t\t\t\t\t\t\t\tws.send(JSON.stringify(res.response), (error) => {\n\t\t\t\t\t\t\t\t\t\tif (error) {\n\t\t\t\t\t\t\t\t\t\t\tconsole.log('Error on WS: ', error);\n\t\t\t\t\t\t\t\t\t\t\tthis.unsubscribeWS(ws);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, err => {});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis._msgQueueRunning = false;\n\t\t\t}\n\t\t}, 10);\n\t}\n\n\tpublic unsubscribeWS(ws: WebSocket) {\n\t\tthis._subscriptionManager.unsubscribeAll(ws);\n\t}\n\n\tpublic getApp() {\n\t\treturn this._app;\n\t}\n}"]}