@resolveio/server-lib 11.0.3 → 11.1.0

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.
@@ -56,13 +56,37 @@ var MonitorManager = /** @class */ (function () {
56
56
  this.setupIntervals();
57
57
  this.setupEventLoop();
58
58
  }
59
+ //Create function to get CPU information
60
+ MonitorManager.prototype.cpuAverage = function () {
61
+ //Initialise sum of idle and time of cores and fetch CPU info
62
+ var totalIdle = 0, totalTick = 0;
63
+ var cpus = os.cpus();
64
+ //Loop through CPU cores
65
+ for (var i = 0, len = cpus.length; i < len; i++) {
66
+ //Select CPU core
67
+ var cpu = cpus[i];
68
+ //Total up the time in the cores tick
69
+ for (var type in cpu.times) {
70
+ totalTick += cpu.times[type];
71
+ }
72
+ //Total up the idle time of the core
73
+ totalIdle += cpu.times.idle;
74
+ }
75
+ //Return the average Idle and Tick times
76
+ return { idle: totalIdle / cpus.length, total: totalTick / cpus.length };
77
+ };
59
78
  MonitorManager.prototype.setupIntervals = function () {
60
79
  var _this = this;
61
- this._lastTime = new Date();
62
- this._lastCPU = process.cpuUsage();
80
+ var lastCPU = this.cpuAverage();
63
81
  setInterval(function () {
64
82
  var now = new Date();
65
- var cpuUsage = process.cpuUsage(_this._lastCPU);
83
+ //Grab second Measure
84
+ var endMeasure = _this.cpuAverage();
85
+ //Calculate the difference in idle and total time between the measures
86
+ var idleDifference = endMeasure.idle - lastCPU.idle;
87
+ var totalDifference = endMeasure.total - lastCPU.total;
88
+ //Calculate the average percentage CPU usage
89
+ var percentageCPU = 1 - idleDifference / totalDifference;
66
90
  if (_this._serverConfig['ROOT_URL'] === 'https://resolveio.com' || _this._serverConfig['ROOT_URL'] === 'http://localhost:4200') {
67
91
  monitor_cpu_collection_1.MonitorCPUs.create({
68
92
  _id: mongo_manager_1.objectIdHexString(),
@@ -71,8 +95,8 @@ var MonitorManager = /** @class */ (function () {
71
95
  client: _this._serverConfig['CLIENT_NAME']
72
96
  },
73
97
  date: now,
74
- app: (cpuUsage.user - _this._lastCPU.user) / (1000 * (now.getTime() - _this._lastTime.getTime())),
75
- system: (cpuUsage.system - _this._lastCPU.system) / (1000 * (now.getTime() - _this._lastTime.getTime()))
98
+ app: percentageCPU,
99
+ system: os.loadavg()[0]
76
100
  });
77
101
  }
78
102
  else {
@@ -82,12 +106,12 @@ var MonitorManager = /** @class */ (function () {
82
106
  client: _this._serverConfig['CLIENT_NAME']
83
107
  },
84
108
  date: now,
85
- app: (cpuUsage.user - _this._lastCPU.user) / (1000 * (now.getTime() - _this._lastTime.getTime())),
86
- system: (cpuUsage.system - _this._lastCPU.system) / (1000 * (now.getTime() - _this._lastTime.getTime())),
109
+ app: percentageCPU,
110
+ system: os.loadavg()[0],
87
111
  type: 'cpu'
88
112
  });
89
113
  }
90
- _this._lastCPU = cpuUsage;
114
+ lastCPU = endMeasure;
91
115
  var memUsage = process.memoryUsage();
92
116
  if (_this._serverConfig['ROOT_URL'] === 'https://resolveio.com' || _this._serverConfig['ROOT_URL'] === 'http://localhost:4200') {
93
117
  monitor_memory_collection_1.MonitorMemorys.create({
@@ -97,12 +121,12 @@ var MonitorManager = /** @class */ (function () {
97
121
  client: _this._serverConfig['CLIENT_NAME']
98
122
  },
99
123
  date: now,
100
- physical_total: memUsage.heapTotal / 1024 / 1024,
101
- physical_used: memUsage.heapUsed / 1024 / 1024,
102
- physical_free: os.freemem() / 1024 / 1024,
103
- virtual: memUsage.rss / 1024 / 1024,
104
- private: memUsage.external / 1024 / 1024,
105
- physical: os.totalmem() / 1024 / 1024
124
+ physical_total: memUsage.heapTotal,
125
+ physical_used: memUsage.heapUsed,
126
+ physical_free: os.freemem(),
127
+ virtual: memUsage.rss,
128
+ private: memUsage.external,
129
+ physical: os.totalmem()
106
130
  });
107
131
  }
108
132
  else {
@@ -112,16 +136,15 @@ var MonitorManager = /** @class */ (function () {
112
136
  client: _this._serverConfig['CLIENT_NAME']
113
137
  },
114
138
  date: now,
115
- physical_total: memUsage.heapTotal / 1024 / 1024,
116
- physical_used: memUsage.heapUsed / 1024 / 1024,
117
- physical_free: os.freemem() / 1024 / 1024,
118
- virtual: memUsage.rss / 1024 / 1024,
119
- private: memUsage.external / 1024 / 1024,
120
- physical: os.totalmem() / 1024 / 1024,
139
+ physical_total: memUsage.heapTotal,
140
+ physical_used: memUsage.heapUsed,
141
+ physical_free: os.freemem(),
142
+ virtual: memUsage.rss,
143
+ private: memUsage.external,
144
+ physical: os.totalmem(),
121
145
  type: 'memory'
122
146
  });
123
147
  }
124
- _this._lastTime = new Date();
125
148
  }, 3000);
126
149
  };
127
150
  MonitorManager.prototype.addMongoTracker = function (data) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/monitor.manager.ts"],"names":[],"mappings":"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","file":"monitor.manager.js","sourcesContent":["import ResolveIOMainServer from '../server-app';\nimport * as bent from 'bent';\nimport { MonitorCPUs } from '../collections/monitor-cpu.collection';\nimport { MonitorMemorys } from '../collections/monitor-memory.collection';\nimport { MonitorMongos } from '../collections/monitor-mongo.collection';\nimport { ResolveIOServer } from '../index';\nimport { deepCopy } from '../util/common';\nimport { objectIdHexString } from './mongo.manager';\nimport * as moment from 'moment';\nconst os = require('os');\n\nexport class MonitorManager {\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _serverConfig;\n\tprivate _instanceHostname = '';\n\tprivate _monitorData = [];\n\n\tprivate _lastTime;\n\tprivate _lastCPU: {user: number, system: number};\n\n\tconstructor(mainServer, serverConfig) {\n\t\tthis._mainServer = mainServer;\n\t\tthis._serverConfig = serverConfig;\n\t\tthis._instanceHostname = os.hostname().replace(/\\./g, '-');\n\n\t\tthis.setupIntervals();\n\t\tthis.setupEventLoop();\n\t}\n\n\tsetupIntervals() {\n\t\tthis._lastTime = new Date();\n\t\tthis._lastCPU = process.cpuUsage();\n\t\t\n\t\tsetInterval(() => {\n\t\t\tlet now = new Date();\n\n\t\t\tconst cpuUsage = process.cpuUsage(this._lastCPU);\n\n\t\t\tif (this._serverConfig['ROOT_URL'] === 'https://resolveio.com' || this._serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\t\tMonitorCPUs.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tapp: (cpuUsage.user - this._lastCPU.user) / (1000 * (now.getTime() - this._lastTime.getTime())),\n\t\t\t\t\tsystem: (cpuUsage.system - this._lastCPU.system) / (1000 * (now.getTime() - this._lastTime.getTime()))\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._monitorData.push({\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tapp: (cpuUsage.user - this._lastCPU.user) / (1000 * (now.getTime() - this._lastTime.getTime())),\n\t\t\t\t\tsystem: (cpuUsage.system - this._lastCPU.system) / (1000 * (now.getTime() - this._lastTime.getTime())),\n\t\t\t\t\ttype: 'cpu'\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis._lastCPU = cpuUsage;\n\n\t\t\tconst memUsage = process.memoryUsage();\n\n\t\t\tif (this._serverConfig['ROOT_URL'] === 'https://resolveio.com' || this._serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\t\tMonitorMemorys.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tphysical_total: memUsage.heapTotal / 1024 / 1024,\n\t\t\t\t\tphysical_used: memUsage.heapUsed / 1024 / 1024,\n\t\t\t\t\tphysical_free: os.freemem() / 1024 / 1024,\n\t\t\t\t\tvirtual: memUsage.rss / 1024 / 1024,\n\t\t\t\t\tprivate: memUsage.external / 1024 / 1024,\n\t\t\t\t\tphysical: os.totalmem() / 1024 / 1024\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._monitorData.push({\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tphysical_total: memUsage.heapTotal / 1024 / 1024,\n\t\t\t\t\tphysical_used: memUsage.heapUsed / 1024 / 1024,\n\t\t\t\t\tphysical_free: os.freemem() / 1024 / 1024,\n\t\t\t\t\tvirtual: memUsage.rss / 1024 / 1024,\n\t\t\t\t\tprivate: memUsage.external / 1024 / 1024,\n\t\t\t\t\tphysical: os.totalmem() / 1024 / 1024,\n\t\t\t\t\ttype: 'memory'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis._lastTime = new Date();\n\t\t}, 3000);\n\t}\n\n\t\n\n\taddMongoTracker(data: MongoMonitorModel) {\n\t\tif (this._serverConfig['ROOT_URL'] === 'https://resolveio.com' || this._serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\tif (!data.collection.startsWith('monitor-')) {\n\t\t\t\tMonitorMongos.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: new Date(data.date),\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tdoc_collection: data.collection,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t\tquery: data.query\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (this._instanceHostname) {\n\t\t\t\tthis._monitorData.push({\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: new Date(data.date),\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tdoc_collection: data.collection,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t\tquery: data.query,\n\t\t\t\t\ttype: 'mongo'\n\t\t\t\t});\n\t\t\t}\n\t\t}\t\n\t}\n\n\tsetupEventLoop() {\n\t\tsetTimeout(async () => {\n\t\t\tif (this._monitorData.length) {\n\t\t\t\tconst post = bent('https://backend.resolveio.com', 'POST', 'json', 200);\n\n\t\t\t\tlet monitorData = deepCopy(this._monitorData);\n\t\t\t\tthis._monitorData = [];\n\n\t\t\t\tlet size = JSON.stringify(monitorData).replace(/[\\[\\]\\,\\\"]/g,'').length * 8;\n\n\t\t\t\tif (size < 45000000) { // 50 MB size limit\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst response = await post('/api/monitor', monitorData);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\tif (e.statusCode !== 500 && e.statusCode !== 501 && e.statusCode !== 502 && e.statusCode !== 503 && e.statusCode !== 504) {\n\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'RESOLVEIO MONITOR HTTP - Error Detected', JSON.stringify(e, null, 2));\n\n\t\t\t\t\t\t\tconsole.log(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet tmpData = [];\n\t\t\t\t\tfor (let i = 0; i < monitorData.length; i++) {\n\t\t\t\t\t\ttmpData.push(monitorData[i]);\n\t\t\t\t\t\tsize = JSON.stringify(tmpData).replace(/[\\[\\]\\,\\\"]/g,'').length * 8;\n\n\t\t\t\t\t\tif (size > 45000000) {\n\t\t\t\t\t\t\ttmpData.pop();\n\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst response = await post('/api/monitor', tmpData);\n\n\t\t\t\t\t\t\t\ttmpData = [monitorData[i]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\t\tif (e.statusCode !== 500 && e.statusCode !== 501 && e.statusCode !== 502 && e.statusCode !== 503 && e.statusCode !== 504) {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'RESOLVEIO MONITOR HTTP - Error Detected', JSON.stringify(e, null, 2));\n\t\t\n\t\t\t\t\t\t\t\t\tconsole.log(e);\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\tif (tmpData.length) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst response = await post('/api/monitor', tmpData);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\tif (e.statusCode !== 500 && e.statusCode !== 501 && e.statusCode !== 502 && e.statusCode !== 503 && e.statusCode !== 504) {\n\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'RESOLVEIO MONITOR HTTP - Error Detected', JSON.stringify(e, null, 2));\n\t\n\t\t\t\t\t\t\t\tconsole.log(e);\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}\n\t\t\t}\n\n\t\t\tthis.setupEventLoop();\n\t\t}, 60000);\n\t}\n}\n\nexport interface MongoMonitorModel {\n\tdate: Date, \n\tmethod: string,\n\tcollection: string,\n\tduration: number,\n\tquery: string\n}\n\nexport class MonitorMongo {\n\tprivate _startTime = 0;\n\tprivate _method = '';\n\tprivate _collection = '';\n\tprivate _query = '';\n\n\tconstructor(method: string, collection: string, query: string) {\n\t\tthis._startTime = Date.now();\n\t\tthis._method = method;\n\t\tthis._collection = collection;\n\t\tthis._query = query;\n\t}\n\n\tpublic finish() {\n\t\tlet endTime = Date.now();\n\n\t\tlet mongoMonitor: MongoMonitorModel = {\n\t\t\tdate: new Date(endTime),\n\t\t\tmethod: this._method,\n\t\t\tcollection: this._collection,\n\t\t\tquery: this._query,\n\t\t\tduration: endTime - this._startTime\n\t\t};\n\n\t\tResolveIOServer.getMainServer().getMonitorManager().addMongoTracker(mongoMonitor);\n\t}\n}\n\nexport type MonitorFunctionType = 'Cron Method' | 'Internal Method' | 'Method' | 'User Specific Publication' | 'Publication';\nexport class MonitorFunction {\n\tprivate _timer: NodeJS.Timeout = null;\n\tprivate _lastTime: Date = null;\n\tprivate _maxDiff: number = 0;\n\tprivate _functionType: MonitorFunctionType;\n\tprivate _functionName: string;\n\tprivate _user: string;\n\tprivate _data: any;\n\n\tconstructor(functionType: MonitorFunctionType, functionName: string, user: string, data: any) {\n\t\tthis._lastTime = new Date();\n\t\tthis._functionType = functionType;\n\t\tthis._functionName = functionName;\n\t\tthis._user = user;\n\t\tthis._data = data;\n\n\t\tthis._timer = setInterval(() => {\n\t\t\tlet diff = moment().diff(moment(this._lastTime), 'milliseconds');\n\t\t\tif (diff > this._maxDiff) {\n\t\t\t\tthis._maxDiff = diff;\n\t\t\t}\n\n\t\t\tthis._lastTime = new Date();\n\t\t}, 1);\n\t}\n\n\tpublic finish() {\n\t\tif (this._timer) {\n\t\t\tclearInterval(this._timer);\n\t\t\tthis._timer = null;\n\t\t}\n\n\t\tif (this._maxDiff >= 1000) {\n\t\t\tResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', ResolveIOServer.getMainServer().getServerConfig()['CLIENT_NAME'] + ' - Slow ' + this._functionType + ' Detected', '', (this._user ? 'User: ' + this._user + '\\n' : '') + this._functionType + ': ' + this._functionName + '\\n' + 'During this function the event loop did not run for ' + this._maxDiff + ' ms (' + this._maxDiff / 1000 + ' sec)' + (this._data ? '\\n\\nData: ' + JSON.stringify(this._data, null, 2) : ''));\n\t\t}\n\t}\n}"]}
1
+ {"version":3,"sources":["../../src/managers/monitor.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,2BAA6B;AAC7B,gFAAoE;AACpE,sFAA0E;AAC1E,oFAAwE;AACxE,kCAA2C;AAC3C,yCAA0C;AAC1C,iDAAoD;AACpD,+BAAiC;AACjC,IAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEzB;IAMC,wBAAY,UAAU,EAAE,YAAY;QAH5B,sBAAiB,GAAG,EAAE,CAAC;QACvB,iBAAY,GAAG,EAAE,CAAC;QAGzB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAE3D,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;IACvB,CAAC;IAED,wCAAwC;IACxC,mCAAU,GAAV;QACC,6DAA6D;QAC7D,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QAErB,wBAAwB;QACxB,KAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC/C,iBAAiB;YACjB,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAElB,qCAAqC;YACrC,KAAI,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE;gBAC1B,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAC7B;YAED,oCAAoC;YACpC,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;SAC5B;QAED,wCAAwC;QACxC,OAAO,EAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,EAAG,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM,EAAC,CAAC;IACzE,CAAC;IAED,uCAAc,GAAd;QAAA,iBA8EC;QA7EA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAEhC,WAAW,CAAC;YACX,IAAI,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YAErB,qBAAqB;YACrB,IAAI,UAAU,GAAG,KAAI,CAAC,UAAU,EAAE,CAAC;YAEnC,sEAAsE;YACtE,IAAI,cAAc,GAAG,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YACpD,IAAI,eAAe,GAAG,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAEvD,4CAA4C;YAC5C,IAAI,aAAa,GAAG,CAAC,GAAG,cAAc,GAAG,eAAe,CAAC;YAEzD,IAAI,KAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,uBAAuB,IAAI,KAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,uBAAuB,EAAE;gBAC7H,oCAAW,CAAC,MAAM,CAAC;oBAClB,GAAG,EAAE,iCAAiB,EAAE;oBACxB,QAAQ,EAAE;wBACT,QAAQ,EAAE,KAAI,CAAC,iBAAiB;wBAChC,MAAM,EAAE,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC;qBACzC;oBACD,IAAI,EAAE,GAAG;oBACT,GAAG,EAAE,aAAa;oBAClB,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;iBACvB,CAAC,CAAC;aACH;iBACI;gBACJ,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACtB,QAAQ,EAAE;wBACT,QAAQ,EAAE,KAAI,CAAC,iBAAiB;wBAChC,MAAM,EAAE,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC;qBACzC;oBACD,IAAI,EAAE,GAAG;oBACT,GAAG,EAAE,aAAa;oBAClB,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACvB,IAAI,EAAE,KAAK;iBACX,CAAC,CAAA;aACF;YAED,OAAO,GAAG,UAAU,CAAC;YAErB,IAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAEvC,IAAI,KAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,uBAAuB,IAAI,KAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,uBAAuB,EAAE;gBAC7H,0CAAc,CAAC,MAAM,CAAC;oBACrB,GAAG,EAAE,iCAAiB,EAAE;oBACxB,QAAQ,EAAE;wBACT,QAAQ,EAAE,KAAI,CAAC,iBAAiB;wBAChC,MAAM,EAAE,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC;qBACzC;oBACD,IAAI,EAAE,GAAG;oBACT,cAAc,EAAE,QAAQ,CAAC,SAAS;oBAClC,aAAa,EAAE,QAAQ,CAAC,QAAQ;oBAChC,aAAa,EAAE,EAAE,CAAC,OAAO,EAAE;oBAC3B,OAAO,EAAE,QAAQ,CAAC,GAAG;oBACrB,OAAO,EAAE,QAAQ,CAAC,QAAQ;oBAC1B,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;iBACvB,CAAC,CAAC;aACH;iBACI;gBACJ,KAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACtB,QAAQ,EAAE;wBACT,QAAQ,EAAE,KAAI,CAAC,iBAAiB;wBAChC,MAAM,EAAE,KAAI,CAAC,aAAa,CAAC,aAAa,CAAC;qBACzC;oBACD,IAAI,EAAE,GAAG;oBACT,cAAc,EAAE,QAAQ,CAAC,SAAS;oBAClC,aAAa,EAAE,QAAQ,CAAC,QAAQ;oBAChC,aAAa,EAAE,EAAE,CAAC,OAAO,EAAE;oBAC3B,OAAO,EAAE,QAAQ,CAAC,GAAG;oBACrB,OAAO,EAAE,QAAQ,CAAC,QAAQ;oBAC1B,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;oBACvB,IAAI,EAAE,QAAQ;iBACd,CAAC,CAAC;aACH;QACF,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAID,wCAAe,GAAf,UAAgB,IAAuB;QACtC,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,uBAAuB,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,uBAAuB,EAAE;YAC7H,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBAC5C,wCAAa,CAAC,MAAM,CAAC;oBACpB,GAAG,EAAE,iCAAiB,EAAE;oBACxB,QAAQ,EAAE;wBACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;wBAChC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;qBACzC;oBACD,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,cAAc,EAAE,IAAI,CAAC,UAAU;oBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;iBACjB,CAAC,CAAC;aACH;SACD;aACI;YACJ,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACtB,QAAQ,EAAE;wBACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;wBAChC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;qBACzC;oBACD,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,cAAc,EAAE,IAAI,CAAC,UAAU;oBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,OAAO;iBACb,CAAC,CAAC;aACH;SACD;IACF,CAAC;IAED,uCAAc,GAAd;QAAA,iBA+DC;QA9DA,UAAU,CAAC;;;;;6BACN,IAAI,CAAC,YAAY,CAAC,MAAM,EAAxB,yBAAwB;wBACrB,IAAI,GAAG,IAAI,CAAC,+BAA+B,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;wBAEpE,WAAW,GAAG,iBAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;wBAC9C,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;wBAEnB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,aAAa,EAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;6BAExE,CAAA,IAAI,GAAG,QAAQ,CAAA,EAAf,wBAAe;;;;wBAEA,qBAAM,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,EAAA;;wBAAlD,QAAQ,GAAG,SAAuC;;;;wBAGxD,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,EAAE;4BACzH,uBAAe,CAAC,aAAa,EAAE,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;4BAEzJ,OAAO,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC;yBACf;;;;wBAIE,OAAO,GAAG,EAAE,CAAC;wBACR,CAAC,GAAG,CAAC;;;6BAAE,CAAA,CAAC,GAAG,WAAW,CAAC,MAAM,CAAA;wBACrC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC7B,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,aAAa,EAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;6BAEhE,CAAA,IAAI,GAAG,QAAQ,CAAA,EAAf,yBAAe;wBAClB,OAAO,CAAC,GAAG,EAAE,CAAC;;;;wBAGI,qBAAM,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAA;;wBAA9C,QAAQ,GAAG,SAAmC;wBAEpD,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;;;;wBAG3B,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,EAAE;4BACzH,uBAAe,CAAC,aAAa,EAAE,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;4BAEzJ,OAAO,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC;yBACf;;;wBAjBoC,CAAC,EAAE,CAAA;;;6BAsBvC,OAAO,CAAC,MAAM,EAAd,yBAAc;;;;wBAEC,qBAAM,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAA;;wBAA9C,QAAQ,GAAG,SAAmC;;;;wBAGpD,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,IAAI,GAAC,CAAC,UAAU,KAAK,GAAG,EAAE;4BACzH,uBAAe,CAAC,aAAa,EAAE,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,yCAAyC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;4BAEzJ,OAAO,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC;yBACf;;;wBAML,IAAI,CAAC,cAAc,EAAE,CAAC;;;;aACtB,EAAE,KAAK,CAAC,CAAC;IACX,CAAC;IACF,qBAAC;AAAD,CA5NA,AA4NC,IAAA;AA5NY,wCAAc;AAsO3B;IAMC,sBAAY,MAAc,EAAE,UAAkB,EAAE,KAAa;QALrD,eAAU,GAAG,CAAC,CAAC;QACf,YAAO,GAAG,EAAE,CAAC;QACb,gBAAW,GAAG,EAAE,CAAC;QACjB,WAAM,GAAG,EAAE,CAAC;QAGnB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,6BAAM,GAAb;QACC,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,IAAI,YAAY,GAAsB;YACrC,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC;YACvB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU;SACnC,CAAC;QAEF,uBAAe,CAAC,aAAa,EAAE,CAAC,iBAAiB,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACnF,CAAC;IACF,mBAAC;AAAD,CA1BA,AA0BC,IAAA;AA1BY,oCAAY;AA6BzB;IASC,yBAAY,YAAiC,EAAE,YAAoB,EAAE,IAAY,EAAE,IAAS;QAA5F,iBAeC;QAvBO,WAAM,GAAmB,IAAI,CAAC;QAC9B,cAAS,GAAS,IAAI,CAAC;QACvB,aAAQ,GAAW,CAAC,CAAC;QAO5B,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;YACzB,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAI,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;YACjE,IAAI,IAAI,GAAG,KAAI,CAAC,QAAQ,EAAE;gBACzB,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;aACrB;YAED,KAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC7B,CAAC,EAAE,CAAC,CAAC,CAAC;IACP,CAAC;IAEM,gCAAM,GAAb;QACC,IAAI,IAAI,CAAC,MAAM,EAAE;YAChB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACnB;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;YAC1B,uBAAe,CAAC,aAAa,EAAE,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,uBAAe,CAAC,aAAa,EAAE,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC,aAAa,GAAG,WAAW,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,sDAAsD,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAC/e;IACF,CAAC;IACF,sBAAC;AAAD,CApCA,AAoCC,IAAA;AApCY,0CAAe","file":"monitor.manager.js","sourcesContent":["import ResolveIOMainServer from '../server-app';\nimport * as bent from 'bent';\nimport { MonitorCPUs } from '../collections/monitor-cpu.collection';\nimport { MonitorMemorys } from '../collections/monitor-memory.collection';\nimport { MonitorMongos } from '../collections/monitor-mongo.collection';\nimport { ResolveIOServer } from '../index';\nimport { deepCopy } from '../util/common';\nimport { objectIdHexString } from './mongo.manager';\nimport * as moment from 'moment';\nconst os = require('os');\n\nexport class MonitorManager {\n\tprivate _mainServer: ResolveIOMainServer;\n\tprivate _serverConfig;\n\tprivate _instanceHostname = '';\n\tprivate _monitorData = [];\n\n\tconstructor(mainServer, serverConfig) {\n\t\tthis._mainServer = mainServer;\n\t\tthis._serverConfig = serverConfig;\n\t\tthis._instanceHostname = os.hostname().replace(/\\./g, '-');\n\n\t\tthis.setupIntervals();\n\t\tthis.setupEventLoop();\n\t}\n\n\t//Create function to get CPU information\n\tcpuAverage() {\n\t\t//Initialise sum of idle and time of cores and fetch CPU info\n\t\tvar totalIdle = 0, totalTick = 0;\n\t\tvar cpus = os.cpus();\n\t\n\t\t//Loop through CPU cores\n\t\tfor(var i = 0, len = cpus.length; i < len; i++) {\n\t\t\t//Select CPU core\n\t\t\tvar cpu = cpus[i];\n\t\t\n\t\t\t//Total up the time in the cores tick\n\t\t\tfor(let type in cpu.times) {\n\t\t\t\ttotalTick += cpu.times[type];\n\t\t\t}\n\t\t\n\t\t\t//Total up the idle time of the core\n\t\t\ttotalIdle += cpu.times.idle;\n\t\t}\n\t\n\t\t//Return the average Idle and Tick times\n\t\treturn {idle: totalIdle / cpus.length, total: totalTick / cpus.length};\n\t}\n\n\tsetupIntervals() {\n\t\tlet lastCPU = this.cpuAverage();\n\t\t\n\t\tsetInterval(() => {\n\t\t\tlet now = new Date();\n\n\t\t\t//Grab second Measure\n\t\t\tvar endMeasure = this.cpuAverage(); \n\n\t\t\t//Calculate the difference in idle and total time between the measures\n\t\t\tvar idleDifference = endMeasure.idle - lastCPU.idle;\n\t\t\tvar totalDifference = endMeasure.total - lastCPU.total;\n\n\t\t\t//Calculate the average percentage CPU usage\n\t\t\tvar percentageCPU = 1 - idleDifference / totalDifference;\n\t\t\t\n\t\t\tif (this._serverConfig['ROOT_URL'] === 'https://resolveio.com' || this._serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\t\tMonitorCPUs.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tapp: percentageCPU,\n\t\t\t\t\tsystem: os.loadavg()[0]\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._monitorData.push({\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tapp: percentageCPU,\n\t\t\t\t\tsystem: os.loadavg()[0],\n\t\t\t\t\ttype: 'cpu'\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tlastCPU = endMeasure;\n\n\t\t\tconst memUsage = process.memoryUsage();\n\n\t\t\tif (this._serverConfig['ROOT_URL'] === 'https://resolveio.com' || this._serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\t\tMonitorMemorys.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tphysical_total: memUsage.heapTotal,\n\t\t\t\t\tphysical_used: memUsage.heapUsed,\n\t\t\t\t\tphysical_free: os.freemem(),\n\t\t\t\t\tvirtual: memUsage.rss,\n\t\t\t\t\tprivate: memUsage.external,\n\t\t\t\t\tphysical: os.totalmem()\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._monitorData.push({\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tphysical_total: memUsage.heapTotal,\n\t\t\t\t\tphysical_used: memUsage.heapUsed,\n\t\t\t\t\tphysical_free: os.freemem(),\n\t\t\t\t\tvirtual: memUsage.rss,\n\t\t\t\t\tprivate: memUsage.external,\n\t\t\t\t\tphysical: os.totalmem(),\n\t\t\t\t\ttype: 'memory'\n\t\t\t\t});\n\t\t\t}\n\t\t}, 3000);\n\t}\n\n\t\n\n\taddMongoTracker(data: MongoMonitorModel) {\n\t\tif (this._serverConfig['ROOT_URL'] === 'https://resolveio.com' || this._serverConfig['ROOT_URL'] === 'http://localhost:4200') {\n\t\t\tif (!data.collection.startsWith('monitor-')) {\n\t\t\t\tMonitorMongos.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: new Date(data.date),\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tdoc_collection: data.collection,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t\tquery: data.query\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (this._instanceHostname) {\n\t\t\t\tthis._monitorData.push({\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: this._serverConfig['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: new Date(data.date),\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tdoc_collection: data.collection,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t\tquery: data.query,\n\t\t\t\t\ttype: 'mongo'\n\t\t\t\t});\n\t\t\t}\n\t\t}\t\n\t}\n\n\tsetupEventLoop() {\n\t\tsetTimeout(async () => {\n\t\t\tif (this._monitorData.length) {\n\t\t\t\tconst post = bent('https://backend.resolveio.com', 'POST', 'json', 200);\n\n\t\t\t\tlet monitorData = deepCopy(this._monitorData);\n\t\t\t\tthis._monitorData = [];\n\n\t\t\t\tlet size = JSON.stringify(monitorData).replace(/[\\[\\]\\,\\\"]/g,'').length * 8;\n\n\t\t\t\tif (size < 45000000) { // 50 MB size limit\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst response = await post('/api/monitor', monitorData);\n\t\t\t\t\t}\n\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\tif (e.statusCode !== 500 && e.statusCode !== 501 && e.statusCode !== 502 && e.statusCode !== 503 && e.statusCode !== 504) {\n\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'RESOLVEIO MONITOR HTTP - Error Detected', JSON.stringify(e, null, 2));\n\n\t\t\t\t\t\t\tconsole.log(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlet tmpData = [];\n\t\t\t\t\tfor (let i = 0; i < monitorData.length; i++) {\n\t\t\t\t\t\ttmpData.push(monitorData[i]);\n\t\t\t\t\t\tsize = JSON.stringify(tmpData).replace(/[\\[\\]\\,\\\"]/g,'').length * 8;\n\n\t\t\t\t\t\tif (size > 45000000) {\n\t\t\t\t\t\t\ttmpData.pop();\n\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst response = await post('/api/monitor', tmpData);\n\n\t\t\t\t\t\t\t\ttmpData = [monitorData[i]];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\t\tif (e.statusCode !== 500 && e.statusCode !== 501 && e.statusCode !== 502 && e.statusCode !== 503 && e.statusCode !== 504) {\n\t\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'RESOLVEIO MONITOR HTTP - Error Detected', JSON.stringify(e, null, 2));\n\t\t\n\t\t\t\t\t\t\t\t\tconsole.log(e);\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\tif (tmpData.length) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst response = await post('/api/monitor', tmpData);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\t\tif (e.statusCode !== 500 && e.statusCode !== 501 && e.statusCode !== 502 && e.statusCode !== 503 && e.statusCode !== 504) {\n\t\t\t\t\t\t\t\tResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', 'RESOLVEIO MONITOR HTTP - Error Detected', JSON.stringify(e, null, 2));\n\t\n\t\t\t\t\t\t\t\tconsole.log(e);\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}\n\t\t\t}\n\n\t\t\tthis.setupEventLoop();\n\t\t}, 60000);\n\t}\n}\n\nexport interface MongoMonitorModel {\n\tdate: Date, \n\tmethod: string,\n\tcollection: string,\n\tduration: number,\n\tquery: string\n}\n\nexport class MonitorMongo {\n\tprivate _startTime = 0;\n\tprivate _method = '';\n\tprivate _collection = '';\n\tprivate _query = '';\n\n\tconstructor(method: string, collection: string, query: string) {\n\t\tthis._startTime = Date.now();\n\t\tthis._method = method;\n\t\tthis._collection = collection;\n\t\tthis._query = query;\n\t}\n\n\tpublic finish() {\n\t\tlet endTime = Date.now();\n\n\t\tlet mongoMonitor: MongoMonitorModel = {\n\t\t\tdate: new Date(endTime),\n\t\t\tmethod: this._method,\n\t\t\tcollection: this._collection,\n\t\t\tquery: this._query,\n\t\t\tduration: endTime - this._startTime\n\t\t};\n\n\t\tResolveIOServer.getMainServer().getMonitorManager().addMongoTracker(mongoMonitor);\n\t}\n}\n\nexport type MonitorFunctionType = 'Cron Method' | 'Internal Method' | 'Method' | 'User Specific Publication' | 'Publication';\nexport class MonitorFunction {\n\tprivate _timer: NodeJS.Timeout = null;\n\tprivate _lastTime: Date = null;\n\tprivate _maxDiff: number = 0;\n\tprivate _functionType: MonitorFunctionType;\n\tprivate _functionName: string;\n\tprivate _user: string;\n\tprivate _data: any;\n\n\tconstructor(functionType: MonitorFunctionType, functionName: string, user: string, data: any) {\n\t\tthis._lastTime = new Date();\n\t\tthis._functionType = functionType;\n\t\tthis._functionName = functionName;\n\t\tthis._user = user;\n\t\tthis._data = data;\n\n\t\tthis._timer = setInterval(() => {\n\t\t\tlet diff = moment().diff(moment(this._lastTime), 'milliseconds');\n\t\t\tif (diff > this._maxDiff) {\n\t\t\t\tthis._maxDiff = diff;\n\t\t\t}\n\n\t\t\tthis._lastTime = new Date();\n\t\t}, 1);\n\t}\n\n\tpublic finish() {\n\t\tif (this._timer) {\n\t\t\tclearInterval(this._timer);\n\t\t\tthis._timer = null;\n\t\t}\n\n\t\tif (this._maxDiff >= 1000) {\n\t\t\tResolveIOServer.getMainServer().getMethodManager().sendEmail('dev@resolveio.com', ResolveIOServer.getMainServer().getServerConfig()['CLIENT_NAME'] + ' - Slow ' + this._functionType + ' Detected', '', (this._user ? 'User: ' + this._user + '\\n' : '') + this._functionType + ': ' + this._functionName + '\\n' + 'During this function the event loop did not run for ' + this._maxDiff + ' ms (' + this._maxDiff / 1000 + ' sec)' + (this._data ? '\\n\\nData: ' + JSON.stringify(this._data, null, 2) : ''));\n\t\t}\n\t}\n}"]}
package/methods/aws.js CHANGED
@@ -41,6 +41,8 @@ var file_collection_1 = require("../collections/file.collection");
41
41
  var simpl_schema_1 = require("simpl-schema");
42
42
  var index_1 = require("../index");
43
43
  var mongo_manager_1 = require("../managers/mongo.manager");
44
+ var client_s3_1 = require("@aws-sdk/client-s3");
45
+ var s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
44
46
  var request = require('request').defaults({ encoding: null });
45
47
  var fs = require('fs');
46
48
  var pdfCnt = 1000000;
@@ -69,26 +71,33 @@ function loadAWSMethods(methodManager) {
69
71
  }),
70
72
  function: function (fileName, fileData, fileSize, fileOrder, fileType, compress) {
71
73
  var _this = this;
72
- var that = this;
73
74
  return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
74
- var key_1, newParams;
75
+ var key_1, aws;
75
76
  return __generator(this, function (_a) {
76
77
  if (fileName) {
77
78
  key_1 = 'uploads/' + Date.now() + '-' + (pdfCnt++) + '-' + fileName;
78
- newParams = { Bucket: that.serverConfig.AWSBUCKET, Key: key_1, Body: Buffer.from(fileData.replace('data:' + fileData.split(',')[0].split(':')[1].split(';')[0] + ';base64,', ''), 'base64'), ACL: 'private', ContentType: fileData.split(',')[0].split(':')[1].split(';')[0], ContentDisposition: 'inline' };
79
- that.getAWS().upload(newParams, function (err, res) {
80
- if (err) {
81
- reject(err);
82
- }
83
- else if (res) {
79
+ aws = this.getAWS();
80
+ aws.s3.putObject({
81
+ Bucket: this.serverConfig.AWSBUCKET,
82
+ Key: key_1,
83
+ Body: Buffer.from(fileData.replace('data:' + fileData.split(',')[0].split(':')[1].split(';')[0] + ';base64,', ''), 'base64'),
84
+ ACL: 'private',
85
+ ContentType: fileData.split(',')[0].split(':')[1].split(';')[0],
86
+ ContentDisposition: 'inline'
87
+ }).then(function (res) {
88
+ if (res) {
84
89
  file_collection_1.Files.create({
85
90
  _id: mongo_manager_1.objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key_1, order: fileOrder, type: fileType
86
91
  }).then(function (resFile) {
87
92
  resolve(resFile);
88
93
  }, function (errFile) { return reject(errFile); });
89
94
  }
95
+ else {
96
+ resolve(null);
97
+ }
98
+ }, function (err) {
99
+ reject(err);
90
100
  });
91
- // }
92
101
  }
93
102
  return [2 /*return*/];
94
103
  });
@@ -118,18 +127,27 @@ function loadAWSMethods(methodManager) {
118
127
  return new Promise(function (resolve, reject) {
119
128
  if (fileName) {
120
129
  var key_2 = 'uploads/' + Date.now() + '-' + fileName;
121
- var newParams = { Bucket: _this.serverConfig.AWSBUCKET, Key: key_2, Body: Buffer.from(fileData), ACL: 'private', ContentType: 'application/gzip', ContentDisposition: 'inline' };
122
- _this.getAWS().upload(newParams, function (err, res) {
123
- if (err) {
124
- reject(err);
125
- }
126
- else if (res) {
130
+ var aws = _this.getAWS();
131
+ aws.s3.putObject({
132
+ Bucket: _this.serverConfig.AWSBUCKET,
133
+ Key: key_2,
134
+ Body: Buffer.from(fileData),
135
+ ACL: 'private',
136
+ ContentType: 'application/gzip',
137
+ ContentDisposition: 'inline'
138
+ }).then(function (res) {
139
+ if (res) {
127
140
  file_collection_1.Files.create({
128
141
  _id: mongo_manager_1.objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key_2, order: fileOrder, type: fileType
129
142
  }).then(function (resFile) {
130
143
  resolve(resFile);
131
144
  }, function (errFile) { return reject(errFile); });
132
145
  }
146
+ else {
147
+ resolve(null);
148
+ }
149
+ }, function (err) {
150
+ reject(err);
133
151
  });
134
152
  }
135
153
  });
@@ -158,18 +176,27 @@ function loadAWSMethods(methodManager) {
158
176
  return new Promise(function (resolve, reject) {
159
177
  if (fileName) {
160
178
  var key_3 = 'uploads/' + Date.now() + '-' + fileName;
161
- var newParams = { Bucket: _this.serverConfig.AWSBUCKET, Key: key_3, Body: fileData, ACL: 'private', ContentType: 'application/gzip', ContentDisposition: 'inline' };
162
- _this.getAWS().upload(newParams, function (err, res) {
163
- if (err) {
164
- reject(err);
165
- }
166
- else if (res) {
179
+ var aws = _this.getAWS();
180
+ aws.s3.putObject({
181
+ Bucket: _this.serverConfig.AWSBUCKET,
182
+ Key: key_3,
183
+ Body: fileData,
184
+ ACL: 'private',
185
+ ContentType: 'application/gzip',
186
+ ContentDisposition: 'inline'
187
+ }).then(function (res) {
188
+ if (res) {
167
189
  file_collection_1.Files.create({
168
190
  _id: mongo_manager_1.objectIdHexString(), __v: 0, name: fileName, size: fileSize, key: key_3, order: fileOrder, type: fileType
169
191
  }).then(function (resFile) {
170
192
  resolve(resFile);
171
193
  }, function (errFile) { return reject(errFile); });
172
194
  }
195
+ else {
196
+ resolve(null);
197
+ }
198
+ }, function (err) {
199
+ reject(err);
173
200
  });
174
201
  }
175
202
  });
@@ -195,18 +222,27 @@ function loadAWSMethods(methodManager) {
195
222
  return new Promise(function (resolve, reject) {
196
223
  if (fileName) {
197
224
  var key_4 = 'uploads/' + Date.now() + '-' + fileName;
198
- var newParams = { Bucket: _this.serverConfig.AWSBUCKET, Key: key_4, Body: fs.createReadStream(fileData), ACL: 'private', ContentType: 'application/gzip', ContentDisposition: 'inline' };
199
- _this.getAWS().upload(newParams, function (err, res) {
200
- if (err) {
201
- reject(err);
202
- }
203
- else if (res) {
225
+ var aws = _this.getAWS();
226
+ aws.s3.putObject({
227
+ Bucket: _this.serverConfig.AWSBUCKET,
228
+ Key: key_4,
229
+ Body: fs.createReadStream(fileData),
230
+ ACL: 'private',
231
+ ContentType: 'application/gzip',
232
+ ContentDisposition: 'inline'
233
+ }).then(function (res) {
234
+ if (res) {
204
235
  file_collection_1.Files.create({
205
236
  _id: mongo_manager_1.objectIdHexString(), __v: 0, name: fileName, size: 1, key: key_4, order: fileOrder, type: fileType
206
237
  }).then(function (resFile) {
207
238
  resolve(resFile);
208
239
  }, function (errFile) { return reject(errFile); });
209
240
  }
241
+ else {
242
+ resolve(null);
243
+ }
244
+ }, function (err) {
245
+ reject(err);
210
246
  });
211
247
  }
212
248
  });
@@ -234,12 +270,12 @@ function loadAWSMethods(methodManager) {
234
270
  deleteCnt = files.length;
235
271
  files.forEach(function (file) {
236
272
  file_collection_1.Files.deleteOne({ _id: file._id });
237
- var delParams = { Bucket: _this.serverConfig.AWSBUCKET, Key: file.key };
238
- _this.getAWS().deleteObject(delParams, function (err, res) {
239
- if (err) {
240
- reject(err);
241
- }
242
- else {
273
+ var aws = _this.getAWS();
274
+ aws.s3.deleteObject({
275
+ Bucket: _this.serverConfig.AWSBUCKET,
276
+ Key: file.key
277
+ }).then(function (res) {
278
+ if (res) {
243
279
  deleteCnt--;
244
280
  if (!deleteCnt) {
245
281
  resolve(files.length);
@@ -262,7 +298,7 @@ function loadAWSMethods(methodManager) {
262
298
  function: function (key) {
263
299
  var _this = this;
264
300
  return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
265
- var file, delParams;
301
+ var file, aws;
266
302
  return __generator(this, function (_a) {
267
303
  switch (_a.label) {
268
304
  case 0: return [4 /*yield*/, file_collection_1.Files.findOne({ key: key })];
@@ -271,9 +307,14 @@ function loadAWSMethods(methodManager) {
271
307
  if (file) {
272
308
  file_collection_1.Files.deleteOne({ _id: file._id });
273
309
  }
274
- delParams = { Bucket: this.serverConfig['AWSBUCKET'], Key: key };
275
- this.getAWS().deleteObject(delParams, function (err, res) {
310
+ aws = this.getAWS();
311
+ aws.s3.deleteObject({
312
+ Bucket: this.serverConfig['AWSBUCKET'],
313
+ Key: key
314
+ }).then(function (res) {
276
315
  resolve(res);
316
+ }, function (err) {
317
+ reject(err);
277
318
  });
278
319
  return [2 /*return*/];
279
320
  }
@@ -290,7 +331,7 @@ function loadAWSMethods(methodManager) {
290
331
  function: function (id_file) {
291
332
  var _this = this;
292
333
  return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
293
- var file, delParams;
334
+ var file, aws;
294
335
  return __generator(this, function (_a) {
295
336
  switch (_a.label) {
296
337
  case 0: return [4 /*yield*/, file_collection_1.Files.findOne({ _id: id_file })];
@@ -299,14 +340,14 @@ function loadAWSMethods(methodManager) {
299
340
  if (!file) {
300
341
  reject('Could not find file');
301
342
  }
302
- delParams = { Bucket: this.serverConfig['AWSBUCKET'], Key: file.key };
303
- this.getAWS().deleteObject(delParams, function (err, res) {
304
- if (err) {
305
- reject(err);
306
- }
307
- else {
308
- resolve(res);
309
- }
343
+ aws = this.getAWS();
344
+ aws.s3.deleteObject({
345
+ Bucket: this.serverConfig['AWSBUCKET'],
346
+ Key: file.key
347
+ }).then(function (res) {
348
+ resolve(res);
349
+ }, function (err) {
350
+ reject(err);
310
351
  });
311
352
  file_collection_1.Files.deleteOne({ _id: file._id });
312
353
  return [2 /*return*/];
@@ -330,20 +371,34 @@ function loadAWSMethods(methodManager) {
330
371
  function: function (ids, expires) {
331
372
  var _this = this;
332
373
  return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
333
- var res, fileArray, files;
334
- var _this = this;
335
- return __generator(this, function (_a) {
336
- switch (_a.label) {
374
+ var res, fileArray, files, i, file, aws, getCommand, _a, _b;
375
+ return __generator(this, function (_c) {
376
+ switch (_c.label) {
337
377
  case 0:
338
378
  res = [];
339
379
  fileArray = [];
340
380
  return [4 /*yield*/, file_collection_1.Files.find({ _id: { $in: ids } })];
341
381
  case 1:
342
- files = _a.sent();
343
- files.forEach(function (file) {
344
- var params = { Bucket: _this.serverConfig.AWSBUCKET, Key: file.key, Expires: expires };
345
- res.push(_this.getAWS().getSignedUrl('getObject', params));
382
+ files = _c.sent();
383
+ i = 0;
384
+ _c.label = 2;
385
+ case 2:
386
+ if (!(i < files.length)) return [3 /*break*/, 5];
387
+ file = files[i];
388
+ aws = this.getAWS();
389
+ getCommand = new client_s3_1.GetObjectCommand({
390
+ Bucket: this.serverConfig.AWSBUCKET,
391
+ Key: file.key
346
392
  });
393
+ _b = (_a = res).push;
394
+ return [4 /*yield*/, s3_request_presigner_1.getSignedUrl(aws.s3, getCommand, { expiresIn: expires })];
395
+ case 3:
396
+ _b.apply(_a, [_c.sent()]);
397
+ _c.label = 4;
398
+ case 4:
399
+ i++;
400
+ return [3 /*break*/, 2];
401
+ case 5:
347
402
  resolve({ res: res, fileArray: files.map(function (a) { return a.name; }) });
348
403
  return [2 /*return*/];
349
404
  }
@@ -363,20 +418,21 @@ function loadAWSMethods(methodManager) {
363
418
  function: function (id_file, expires) {
364
419
  var _this = this;
365
420
  return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
366
- var file, params;
421
+ var file, aws, getCommand;
367
422
  return __generator(this, function (_a) {
368
423
  switch (_a.label) {
369
424
  case 0: return [4 /*yield*/, file_collection_1.Files.findOne({ _id: id_file })];
370
425
  case 1:
371
426
  file = _a.sent();
372
- params = { Bucket: this.serverConfig.AWSBUCKET, Key: file.key, Expires: expires };
373
- this.getAWS().getSignedUrl('getObject', params, function (err, res) {
374
- if (err) {
375
- reject(err);
376
- }
377
- else {
378
- resolve(res);
379
- }
427
+ aws = this.getAWS();
428
+ getCommand = new client_s3_1.GetObjectCommand({
429
+ Bucket: this.serverConfig.AWSBUCKET,
430
+ Key: file.key
431
+ });
432
+ s3_request_presigner_1.getSignedUrl(aws.s3, getCommand, { expiresIn: expires }).then(function (res) {
433
+ resolve(res);
434
+ }, function (err) {
435
+ reject(err);
380
436
  });
381
437
  return [2 /*return*/];
382
438
  }
@@ -396,14 +452,15 @@ function loadAWSMethods(methodManager) {
396
452
  function: function (key, expires) {
397
453
  var _this = this;
398
454
  return new Promise(function (resolve, reject) {
399
- var params = { Bucket: _this.serverConfig.AWSBUCKET, Key: key, Expires: expires };
400
- _this.getAWS().getSignedUrl('getObject', params, function (err, res) {
401
- if (err) {
402
- reject(err);
403
- }
404
- else {
405
- resolve(res);
406
- }
455
+ var aws = _this.getAWS();
456
+ var getCommand = new client_s3_1.GetObjectCommand({
457
+ Bucket: _this.serverConfig.AWSBUCKET,
458
+ Key: key
459
+ });
460
+ s3_request_presigner_1.getSignedUrl(aws.s3, getCommand, { expiresIn: expires }).then(function (res) {
461
+ resolve(res);
462
+ }, function (err) {
463
+ reject(err);
407
464
  });
408
465
  });
409
466
  }
@@ -422,14 +479,36 @@ function loadAWSMethods(methodManager) {
422
479
  }),
423
480
  function: function (keys, expires) {
424
481
  var _this = this;
425
- return new Promise(function (resolve, reject) {
426
- var res = [];
427
- keys.forEach(function (key) {
428
- var params = { Bucket: _this.serverConfig.AWSBUCKET, Key: key, Expires: expires };
429
- res.push(_this.getAWS().getSignedUrl('getObject', params));
482
+ return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
483
+ var res, i, key, aws, getCommand, _a, _b;
484
+ return __generator(this, function (_c) {
485
+ switch (_c.label) {
486
+ case 0:
487
+ res = [];
488
+ i = 0;
489
+ _c.label = 1;
490
+ case 1:
491
+ if (!(i < keys.length)) return [3 /*break*/, 4];
492
+ key = keys[i];
493
+ aws = this.getAWS();
494
+ getCommand = new client_s3_1.GetObjectCommand({
495
+ Bucket: this.serverConfig.AWSBUCKET,
496
+ Key: key
497
+ });
498
+ _b = (_a = res).push;
499
+ return [4 /*yield*/, s3_request_presigner_1.getSignedUrl(aws.s3, getCommand, { expiresIn: expires })];
500
+ case 2:
501
+ _b.apply(_a, [_c.sent()]);
502
+ _c.label = 3;
503
+ case 3:
504
+ i++;
505
+ return [3 /*break*/, 1];
506
+ case 4:
507
+ resolve(res);
508
+ return [2 /*return*/];
509
+ }
430
510
  });
431
- resolve(res);
432
- });
511
+ }); });
433
512
  }
434
513
  },
435
514
  getDataURIfromURL: {
@@ -466,9 +545,9 @@ function loadAWSMethods(methodManager) {
466
545
  }),
467
546
  function: function (id_file, email, additional_message) {
468
547
  var _this = this;
469
- var that = this;
470
548
  return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
471
549
  var file;
550
+ var _this = this;
472
551
  return __generator(this, function (_a) {
473
552
  switch (_a.label) {
474
553
  case 0: return [4 /*yield*/, file_collection_1.Files.findById(id_file)];
@@ -478,18 +557,18 @@ function loadAWSMethods(methodManager) {
478
557
  reject('Could not find file');
479
558
  return [2 /*return*/];
480
559
  }
481
- that.callMethodInternal.call(that, 'getSignedUrl', file.key, 259200, function (errPDF, resPDF) {
560
+ this.callMethodInternal('getSignedUrl', file.key, 259200, function (errPDF, resPDF) {
482
561
  if (resPDF) {
483
562
  if (file.size < 5000000) {
484
563
  var emailMessage = 'Attached is the file requested for email.\n' + (additional_message !== '' ? '\nAdditional Mesasge:\n' + additional_message + '\n' : '');
485
- that.sendEmail(email, index_1.ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage, '', [{
564
+ _this.sendEmail(email, index_1.ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage, '', [{
486
565
  filename: file.name,
487
566
  path: resPDF
488
567
  }]);
489
568
  }
490
569
  else {
491
570
  var emailMessage = 'Please click the link to the requested file.\n' + (additional_message !== '' ? '\nAdditional Mesasge:\n' + additional_message + '\n' : '');
492
- that.sendEmail(email, index_1.ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage + resPDF, '');
571
+ _this.sendEmail(email, index_1.ResolveIOServer.getClientName() + ' File - ' + file.name, emailMessage + resPDF, '');
493
572
  }
494
573
  resolve(true);
495
574
  }