15ebaa17084f3ceb1585d21a811d747d3fe239d9
[motion2.git] / server / config / schedule / index.js
1 // *************************************************************************
2 // *                                                                       *
3 // * xCALLY Motion -  The Omnichannel Contact Center                       *
4 // * Copyright (c) Xenialab s.r.l. All Rights Reserved                     *
5 // *                                                                       *
6 // *************************************************************************
7 // *                                                                       *
8 // * Email: info@xcally.com                                                *
9 // * Website: https://www.xcally.com                                       *
10 // *                                                                       *
11 // *************************************************************************
12 // *                                                                       *
13 // * The SOFTWARE PRODUCT is protected by copyright laws and international *
14 // * copyright treaties, as well as other intellectual property laws and   *
15 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                         *
16 // *                                                                       *
17 // *************************************************************************
18 var _0x98a8=['CloudProvider','keys','jobs','toString','keyBy','difference','length','exists','delete\x20cron','toRun','resolve','cron','isBetween','startAt','endAt','start','add\x20cron','active','update\x20cron','stop\x20cron','run','path','lodash','moment','cron-job-manager','jayson/promise','../logger','schedule','../../mysqldb','../../api/analyticCustomReport/analyticCustomReport.controller','../../api/analyticDefaultReport/analyticDefaultReport.controller','client','http','AnalyticExtractedReport','findOne','then','catch','error','info','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','getSmtpOptions','name','Smtp','bcc','format','Report\x20%s\x20last\x20%s\x20%s','subtractNumber','subtractUnit','join','../../files/reports','savename','%s.%s','basename','zip','existsSync','status','Sent','attachments','message','text','Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a','stringify','Empty','Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','sendIfEmpty','empty\x20file,\x20email\x20not\x20sent','Loading','Completed','Report\x20file\x20creation\x20still\x20running\x20after\x20timeout.\x0aYou\x20can\x20find\x20the\x20report\x20when\x20it\x20will\x20be\x20completed\x20in\x20Analytics\x20->\x20Extracted\x20Reports.\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a','Failed','request','SendMail','error\x20mail','email\x20sent','case\x20loading','currentAttempt','retryOptions','retries','job','data','operation','stop','retry','still\x20loading','case\x20completed','case\x20empty','case\x20failed','Unrecognized\x20status:','entity','dataValues','attempt','Job\x20ID\x20','\x20Attempt\x20#:','report\x20status:','sendMail','isNil','subtractUnit\x20null\x20or\x20undefined','subtract','scheduled','output','DefaultReportId','runReport','CustomReportId','no\x20report\x20id','findAll','MailServerOut'];(function(_0x398335,_0x3b5910){var _0x5b32d0=function(_0x522a3d){while(--_0x522a3d){_0x398335['push'](_0x398335['shift']());}};_0x5b32d0(++_0x3b5910);}(_0x98a8,0x81));var _0x898a=function(_0x76cd73,_0x2e3ea9){_0x76cd73=_0x76cd73-0x0;var _0x44bc2b=_0x98a8[_0x76cd73];return _0x44bc2b;};'use strict';var fs=require('fs');var util=require('util');var path=require(_0x898a('0x0'));var _=require(_0x898a('0x1'));var moment=require(_0x898a('0x2'));var CronJobManager=require(_0x898a('0x3'));var jayson=require(_0x898a('0x4'));var BPromise=require('bluebird');var logger=require(_0x898a('0x5'))(_0x898a('0x6'));var db=require(_0x898a('0x7'))['db'];const retry=require('retry');var analyticCustomReportController=require(_0x898a('0x8'));var analyticDefaultReportController=require(_0x898a('0x9'));var client=jayson[_0x898a('0xa')][_0x898a('0xb')]({'port':0x232b});var manager=new CronJobManager();function getReportData(_0x34e9bc){const _0x50dfae={};if(typeof _0x34e9bc==='number'){_0x50dfae['id']=_0x34e9bc;}return db[_0x898a('0xc')][_0x898a('0xd')]({'where':_0x50dfae})[_0x898a('0xe')](function(_0x30be2a){return _0x30be2a;})[_0x898a('0xf')](function(_0x2778a1){logger[_0x898a('0x10')](_0x2778a1);});}function handleSendEmail(_0x4c310b,_0x1c6d42){logger[_0x898a('0x11')](_0x898a('0x12'),_0x4c310b[_0x898a('0x13')]);var _0x2c0e9a=!![];var _0x518570=_0x4c310b[_0x898a('0x14')][_0x898a('0x15')]();var _0x597138={'account':_0x518570,'message':{'from':util['format']('\x22%s\x22\x20<%s>',_0x4c310b[_0x898a('0x14')][_0x898a('0x16')],_0x4c310b[_0x898a('0x14')][_0x898a('0x13')]||_0x4c310b[_0x898a('0x14')][_0x898a('0x17')]['user']),'to':_0x4c310b[_0x898a('0x13')],'cc':_0x4c310b['cc'],'bcc':_0x4c310b[_0x898a('0x18')],'subject':util[_0x898a('0x19')](_0x898a('0x1a'),_0x1c6d42['name'],_0x4c310b[_0x898a('0x1b')],_0x4c310b[_0x898a('0x1c')])}};var _0x7bcf74=path[_0x898a('0x1d')](__dirname,_0x898a('0x1e'));var _0x22f031=_0x1c6d42[_0x898a('0x1f')];var _0x299a07=util[_0x898a('0x19')](_0x898a('0x20'),path[_0x898a('0x21')](_0x1c6d42['savename'],path['extname'](_0x1c6d42[_0x898a('0x1f')])),_0x898a('0x22'));var _0x458175=path[_0x898a('0x1d')](_0x7bcf74,_0x22f031);var _0x32499b=path[_0x898a('0x1d')](_0x7bcf74,_0x299a07);if(fs[_0x898a('0x23')](_0x458175)){_0x1c6d42[_0x898a('0x24')]=_0x898a('0x25');_0x597138['message'][_0x898a('0x26')]=[{'filename':_0x22f031,'path':_0x458175}];_0x597138[_0x898a('0x27')][_0x898a('0x28')]=util['format'](_0x898a('0x29'),JSON[_0x898a('0x2a')](_0x1c6d42,null,0x2));}else if(fs['existsSync'](_0x32499b)){_0x1c6d42[_0x898a('0x24')]=_0x898a('0x25');_0x597138[_0x898a('0x27')]['attachments']=[{'filename':_0x299a07,'path':_0x32499b}];}else{if(_0x1c6d42[_0x898a('0x24')]===_0x898a('0x2b')){_0x597138[_0x898a('0x27')][_0x898a('0x28')]=_0x898a('0x2c');if(!_0x4c310b[_0x898a('0x2d')]){_0x2c0e9a=![];logger[_0x898a('0x11')](_0x898a('0x2e'));}}else if(_0x1c6d42[_0x898a('0x24')]===_0x898a('0x2f')){_0x597138['message']['text']='Report\x20still\x20running\x20after\x20timeout.\x0aYou\x20can\x20find\x20the\x20report\x20when\x20it\x20will\x20be\x20completed\x20in\x20Analytics\x20->\x20Extracted\x20Reports.\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a';}else if(_0x1c6d42[_0x898a('0x24')]===_0x898a('0x30')){_0x597138[_0x898a('0x27')]['text']=_0x898a('0x31');}else if(_0x1c6d42['status']===_0x898a('0x32')){_0x597138[_0x898a('0x27')][_0x898a('0x28')]='Report\x20extraction\x20procedure\x20has\x20run\x20into\x20an\x20unexpected\x20error.\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a';}else{logger[_0x898a('0x10')]('[handleSendEmail]\x20Unrecognized\x20status:',_0x1c6d42[_0x898a('0x24')]);}}if(_0x2c0e9a){return client[_0x898a('0x33')](_0x898a('0x34'),_0x597138)[_0x898a('0xe')](function(_0x141f85){if(_0x141f85[_0x898a('0x10')]){return logger[_0x898a('0x10')](_0x898a('0x35'),JSON['stringify'](_0x141f85));}return logger[_0x898a('0x11')](_0x898a('0x36'));})['catch'](function(_0x13c755){return logger['error']('error\x20mail',JSON[_0x898a('0x2a')](_0x13c755));});}}function handleError(){return function(_0x7fb80e){return logger[_0x898a('0x10')](JSON[_0x898a('0x2a')](_0x7fb80e));};}function loading(_0x332888){logger[_0x898a('0x11')](_0x898a('0x37'));if(_0x332888[_0x898a('0x38')]===_0x332888[_0x898a('0x39')][_0x898a('0x3a')]){handleSendEmail(_0x332888[_0x898a('0x3b')],_0x332888[_0x898a('0x3c')]);_0x332888[_0x898a('0x3d')][_0x898a('0x3e')]();}else{_0x332888[_0x898a('0x3d')][_0x898a('0x3f')](_0x898a('0x40'));}}function completed(_0x186a29){logger[_0x898a('0x11')](_0x898a('0x41'));handleSendEmail(_0x186a29['job'],_0x186a29[_0x898a('0x3c')]);_0x186a29[_0x898a('0x3d')][_0x898a('0x3e')]();}function empty(_0x514c50){logger[_0x898a('0x11')](_0x898a('0x42'));handleSendEmail(_0x514c50[_0x898a('0x3b')],_0x514c50[_0x898a('0x3c')]);_0x514c50[_0x898a('0x3d')][_0x898a('0x3e')]();}function failed(_0x36410e){logger[_0x898a('0x11')](_0x898a('0x43'));handleSendEmail(_0x36410e[_0x898a('0x3b')],_0x36410e[_0x898a('0x3c')]);_0x36410e['operation']['stop']();}function urecognized(_0xe0737b){logger[_0x898a('0x10')](_0x898a('0x44'),_0xe0737b[_0x898a('0x45')][_0x898a('0x46')][_0x898a('0x24')]);_0xe0737b[_0x898a('0x3d')][_0x898a('0x3e')]();}const reportStatusStrategies={'Loading':loading,'Completed':completed,'Empty':empty,'Failed':failed,'Unrecognized':urecognized};function retryer(_0x32c3ea,_0x3551d9){const _0x2b45d5={'retries':0x3,'factor':0x2,'minTimeout':0x5b*0x3e8,'maxTimeout':0xa*0x3c*0x3e8};const _0x8bb855=retry['operation'](_0x2b45d5);_0x8bb855[_0x898a('0x47')](_0x1ae982=>{logger['info'](_0x898a('0x48')+_0x32c3ea['id']+_0x898a('0x49')+_0x1ae982);try{getReportData(_0x3551d9['id'])[_0x898a('0xe')](function(_0xbc50f0){_0x3551d9=_0xbc50f0;logger[_0x898a('0x11')](_0x898a('0x4a'),_0xbc50f0[_0x898a('0x46')][_0x898a('0x24')]);if(!reportStatusStrategies[_0xbc50f0[_0x898a('0x46')][_0x898a('0x24')]]){logger[_0x898a('0x10')](_0x898a('0x4a'),_0xbc50f0[_0x898a('0x46')]['status']);_0x8bb855[_0x898a('0x3f')]();}reportStatusStrategies[_0xbc50f0['dataValues'][_0x898a('0x24')]]({'operation':_0x8bb855,'currentAttempt':_0x1ae982,'retryOptions':_0x2b45d5,'job':_0x32c3ea,'data':_0x3551d9,'entity':_0xbc50f0});});}catch(_0x4685a6){_0x8bb855['retry'](_0x4685a6);}});}function handleResult(_0x15bdb0){return function(_0x4597ad){if(_0x15bdb0[_0x898a('0x4b')]&&_0x15bdb0['MailAccount']&&_0x15bdb0[_0x898a('0x14')][_0x898a('0x17')]&&!_[_0x898a('0x4c')](_0x15bdb0[_0x898a('0x13')])){retryer(_0x15bdb0,_0x4597ad);}};}function handleJob(_0x1a212d){return function(){try{if(_['isNil'](_0x1a212d['subtractNumber'])){return logger[_0x898a('0x11')]('subtractNumber\x20null\x20or\x20undefined');}if(_[_0x898a('0x4c')](_0x1a212d[_0x898a('0x1c')])){return logger[_0x898a('0x11')](_0x898a('0x4d'));}var _0x233124={'startDate':moment()[_0x898a('0x4e')](_0x1a212d[_0x898a('0x1b')],_0x1a212d[_0x898a('0x1c')])[_0x898a('0x19')]('YYYY-MM-DD\x20HH:mm:ss'),'endDate':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'type':_0x898a('0x4f'),'output':_0x1a212d[_0x898a('0x50')],'name':_0x1a212d['name']};if(!_[_0x898a('0x4c')](_0x1a212d[_0x898a('0x51')])){logger[_0x898a('0x11')]('exec\x20defaul\x20report\x20id:%s',_0x1a212d[_0x898a('0x51')]);return analyticDefaultReportController[_0x898a('0x52')]({'id':_0x1a212d[_0x898a('0x51')]},_0x233124)[_0x898a('0xe')](handleResult(_0x1a212d))['catch'](handleError());}if(!_[_0x898a('0x4c')](_0x1a212d['CustomReportId'])){logger['info']('exec\x20custom\x20report\x20id:%s',_0x1a212d[_0x898a('0x53')]);return analyticCustomReportController[_0x898a('0x52')]({'id':_0x1a212d['CustomReportId']},_0x233124)[_0x898a('0xe')](handleResult(_0x1a212d))['catch'](handleError());}}catch(_0x46fd34){logger[_0x898a('0x10')](JSON[_0x898a('0x2a')](_0x46fd34));}return logger[_0x898a('0x11')](_0x898a('0x54'));};}function getJobs(_0x1a4391){var _0x4c2a6e={};if(_0x1a4391){_0x4c2a6e['id']=_0x1a4391;}return db['Schedule'][_0x898a('0x55')]({'where':_0x4c2a6e,'include':[{'model':db[_0x898a('0x14')],'attributes':['id',_0x898a('0x16'),_0x898a('0x13')],'include':[{'model':db[_0x898a('0x56')],'as':_0x898a('0x17'),'include':[{'model':db[_0x898a('0x57')],'as':_0x898a('0x57')}]}]}]})[_0x898a('0xe')](function(_0x1ae984){var _0x118f47=_[_0x898a('0x58')](manager[_0x898a('0x59')]);var _0x2f09ad=_['map'](_0x1ae984,function(_0x1e2c66){return _0x1e2c66['id'][_0x898a('0x5a')]();});var _0x2e70f2=_[_0x898a('0x5b')](_0x1ae984,function(_0x4dddf5){return _0x4dddf5['id']['toString']();});var _0x56bbdb=_0x1a4391?_0x2f09ad:_[_0x898a('0x5c')](_0x2f09ad,_0x118f47);var _0x14b27b=_['intersection'](_0x2f09ad,_0x118f47);var _0x1798f7=_[_0x898a('0x5c')](_0x118f47,_0x2f09ad);var _0x163ce2;var _0x358bbc;for(_0x163ce2=0x0;_0x163ce2<_0x1798f7[_0x898a('0x5d')]&&!_0x1a4391;_0x163ce2+=0x1){_0x358bbc=_0x1798f7[_0x163ce2]['toString']();if(manager[_0x898a('0x5e')](_0x358bbc)){manager[_0x898a('0x3e')](_0x358bbc);manager['deleteJob'](_0x358bbc);logger['info'](_0x898a('0x5f'),_0x358bbc);}}logger[_0x898a('0x11')](_0x898a('0x60'),JSON[_0x898a('0x2a')](_0x56bbdb));for(_0x163ce2=0x0;_0x163ce2<_0x56bbdb['length'];_0x163ce2+=0x1){_0x358bbc=_0x56bbdb[_0x163ce2][_0x898a('0x5a')]();if(_0x1a4391){logger[_0x898a('0x11')](JSON[_0x898a('0x2a')](_0x2e70f2[_0x358bbc]));BPromise[_0x898a('0x61')]()[_0x898a('0xe')](handleJob(_0x2e70f2[_0x358bbc]));logger['info']('run\x20job',_0x2e70f2[_0x358bbc][_0x898a('0x16')],_0x2e70f2[_0x358bbc][_0x898a('0x62')]);}else if(_0x2e70f2[_0x358bbc][_0x898a('0x62')]&&_0x2e70f2[_0x358bbc]['active']&&moment()[_0x898a('0x63')](_0x2e70f2[_0x358bbc][_0x898a('0x64')],_0x2e70f2[_0x358bbc][_0x898a('0x65')])){manager['add'](_0x358bbc,_0x2e70f2[_0x358bbc][_0x898a('0x62')],handleJob(_0x2e70f2[_0x358bbc]));manager[_0x898a('0x66')](_0x358bbc);logger[_0x898a('0x11')](_0x898a('0x67'),_0x2e70f2[_0x358bbc]['name'],_0x2e70f2[_0x358bbc][_0x898a('0x62')]);}else if(manager[_0x898a('0x5e')](_0x358bbc)){manager[_0x898a('0x3e')](_0x358bbc);manager['deleteJob'](_0x358bbc);logger['info']('stop\x20cron',_0x2e70f2[_0x358bbc]['name'],_0x2e70f2[_0x358bbc][_0x898a('0x62')]);}}for(_0x163ce2=0x0,_0x358bbc;_0x163ce2<_0x14b27b['length']&&!_0x1a4391;_0x163ce2+=0x1){_0x358bbc=_0x14b27b[_0x163ce2][_0x898a('0x5a')]();if(manager[_0x898a('0x5e')](_0x358bbc)){if(_0x2e70f2[_0x358bbc][_0x898a('0x62')]&&_0x2e70f2[_0x358bbc][_0x898a('0x68')]&&moment()[_0x898a('0x63')](_0x2e70f2[_0x358bbc][_0x898a('0x64')],_0x2e70f2[_0x358bbc][_0x898a('0x65')])){manager['update'](_0x358bbc,_0x2e70f2[_0x358bbc][_0x898a('0x62')],handleJob(_0x2e70f2[_0x358bbc]));logger[_0x898a('0x11')](_0x898a('0x69'),_0x2e70f2[_0x358bbc]['name'],_0x2e70f2[_0x358bbc][_0x898a('0x62')]);}else{manager[_0x898a('0x3e')](_0x358bbc);manager['deleteJob'](_0x358bbc);logger['info'](_0x898a('0x6a'),_0x2e70f2[_0x358bbc][_0x898a('0x16')],_0x2e70f2[_0x358bbc][_0x898a('0x62')]);}}}})['catch'](function(_0x4eb091){logger[_0x898a('0x10')](JSON[_0x898a('0x2a')](_0x4eb091));});}exports[_0x898a('0x6b')]=function(_0x228bd9){return getJobs(_0x228bd9);};exports['start']=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};