Built motion from commit 3c2ce842.|2.6.31
[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 _0xe0d5=['CustomReportId','exec\x20custom\x20report\x20id:%s','no\x20report\x20id','Schedule','findAll','MailServerOut','keys','jobs','map','toString','keyBy','difference','intersection','exists','delete\x20cron','toRun','length','resolve','run\x20job','active','startAt','add','add\x20cron','cron','deleteJob','isBetween','endAt','update','update\x20cron','stop\x20cron','run','start','path','lodash','moment','cron-job-manager','jayson/promise','../logger','../../mysqldb','../../api/analyticDefaultReport/analyticDefaultReport.controller','client','http','AnalyticExtractedReport','findOne','then','error','info','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','getSmtpOptions','\x22%s\x22\x20<%s>','Smtp','bcc','format','name','subtractNumber','subtractUnit','join','../../files/reports','savename','%s.%s','basename','extname','zip','status','message','attachments','text','stringify','existsSync','Sent','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','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','Completed','[handleSendEmail]\x20Unrecognized\x20status:','error\x20mail','email\x20sent','catch','currentAttempt','retryOptions','retries','job','data','operation','retry','still\x20loading','case\x20empty','stop','case\x20failed','Unrecognized\x20status:','entity','attempt','Job\x20ID\x20','\x20Attempt\x20#:','report\x20status:','dataValues','sendMail','isNil','subtractNumber\x20null\x20or\x20undefined','subtractUnit\x20null\x20or\x20undefined','subtract','YYYY-MM-DD\x20HH:mm:ss','output','DefaultReportId','exec\x20defaul\x20report\x20id:%s','runReport'];(function(_0x2d0b66,_0x43cc5e){var _0x21b7f5=function(_0x183e13){while(--_0x183e13){_0x2d0b66['push'](_0x2d0b66['shift']());}};_0x21b7f5(++_0x43cc5e);}(_0xe0d5,0xfe));var _0x5e0d=function(_0x3fce6c,_0x5c5440){_0x3fce6c=_0x3fce6c-0x0;var _0x229d62=_0xe0d5[_0x3fce6c];return _0x229d62;};'use strict';var fs=require('fs');var util=require('util');var path=require(_0x5e0d('0x0'));var _=require(_0x5e0d('0x1'));var moment=require(_0x5e0d('0x2'));var CronJobManager=require(_0x5e0d('0x3'));var jayson=require(_0x5e0d('0x4'));var BPromise=require('bluebird');var logger=require(_0x5e0d('0x5'))('schedule');var db=require(_0x5e0d('0x6'))['db'];const retry=require('retry');var analyticCustomReportController=require('../../api/analyticCustomReport/analyticCustomReport.controller');var analyticDefaultReportController=require(_0x5e0d('0x7'));var client=jayson[_0x5e0d('0x8')][_0x5e0d('0x9')]({'port':0x232b});var manager=new CronJobManager();function getReportData(_0x579d1d){const _0x5bceb8={};if(typeof _0x579d1d==='number'){_0x5bceb8['id']=_0x579d1d;}return db[_0x5e0d('0xa')][_0x5e0d('0xb')]({'where':_0x5bceb8})[_0x5e0d('0xc')](function(_0x352ba8){return _0x352ba8;})['catch'](function(_0x214258){logger[_0x5e0d('0xd')](_0x214258);});}function handleSendEmail(_0x5655c0,_0x5d5e8c){logger[_0x5e0d('0xe')](_0x5e0d('0xf'),_0x5655c0[_0x5e0d('0x10')]);var _0x43f42c=!![];var _0x16e11a=_0x5655c0[_0x5e0d('0x11')][_0x5e0d('0x12')]();var _0x4ef682={'account':_0x16e11a,'message':{'from':util['format'](_0x5e0d('0x13'),_0x5655c0[_0x5e0d('0x11')]['name'],_0x5655c0[_0x5e0d('0x11')]['email']||_0x5655c0['MailAccount'][_0x5e0d('0x14')]['user']),'to':_0x5655c0[_0x5e0d('0x10')],'cc':_0x5655c0['cc'],'bcc':_0x5655c0[_0x5e0d('0x15')],'subject':util[_0x5e0d('0x16')]('Report\x20%s\x20last\x20%s\x20%s',_0x5d5e8c[_0x5e0d('0x17')],_0x5655c0[_0x5e0d('0x18')],_0x5655c0[_0x5e0d('0x19')])}};var _0xc840ce=path[_0x5e0d('0x1a')](__dirname,_0x5e0d('0x1b'));var _0x488731=_0x5d5e8c[_0x5e0d('0x1c')];var _0x458bf6=util['format'](_0x5e0d('0x1d'),path[_0x5e0d('0x1e')](_0x5d5e8c[_0x5e0d('0x1c')],path[_0x5e0d('0x1f')](_0x5d5e8c[_0x5e0d('0x1c')])),_0x5e0d('0x20'));var _0x1b0e72=path[_0x5e0d('0x1a')](_0xc840ce,_0x488731);var _0x4a5c1b=path[_0x5e0d('0x1a')](_0xc840ce,_0x458bf6);if(fs['existsSync'](_0x1b0e72)){_0x5d5e8c[_0x5e0d('0x21')]='Sent';_0x4ef682[_0x5e0d('0x22')][_0x5e0d('0x23')]=[{'filename':_0x488731,'path':_0x1b0e72}];_0x4ef682[_0x5e0d('0x22')][_0x5e0d('0x24')]=util[_0x5e0d('0x16')]('Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a',JSON[_0x5e0d('0x25')](_0x5d5e8c,null,0x2));}else if(fs[_0x5e0d('0x26')](_0x4a5c1b)){_0x5d5e8c[_0x5e0d('0x21')]=_0x5e0d('0x27');_0x4ef682[_0x5e0d('0x22')]['attachments']=[{'filename':_0x458bf6,'path':_0x4a5c1b}];}else{if(_0x5d5e8c['status']===_0x5e0d('0x28')){_0x4ef682[_0x5e0d('0x22')][_0x5e0d('0x24')]=_0x5e0d('0x29');if(!_0x5655c0[_0x5e0d('0x2a')]){_0x43f42c=![];logger[_0x5e0d('0xe')](_0x5e0d('0x2b'));}}else if(_0x5d5e8c[_0x5e0d('0x21')]===_0x5e0d('0x2c')){_0x4ef682[_0x5e0d('0x22')][_0x5e0d('0x24')]=_0x5e0d('0x2d');}else if(_0x5d5e8c['status']===_0x5e0d('0x2e')){_0x4ef682[_0x5e0d('0x22')][_0x5e0d('0x24')]='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';}else if(_0x5d5e8c['status']==='Failed'){_0x4ef682[_0x5e0d('0x22')]['text']='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[_0x5e0d('0xd')](_0x5e0d('0x2f'),_0x5d5e8c[_0x5e0d('0x21')]);}}if(_0x43f42c){return client['request']('SendMail',_0x4ef682)[_0x5e0d('0xc')](function(_0x677ee9){if(_0x677ee9['error']){return logger[_0x5e0d('0xd')](_0x5e0d('0x30'),JSON[_0x5e0d('0x25')](_0x677ee9));}return logger[_0x5e0d('0xe')](_0x5e0d('0x31'));})[_0x5e0d('0x32')](function(_0x3fac58){return logger[_0x5e0d('0xd')](_0x5e0d('0x30'),JSON[_0x5e0d('0x25')](_0x3fac58));});}}function handleError(){return function(_0x4d4d8d){return logger[_0x5e0d('0xd')](JSON['stringify'](_0x4d4d8d));};}function loading(_0x3107aa){logger[_0x5e0d('0xe')]('case\x20loading');if(_0x3107aa[_0x5e0d('0x33')]===_0x3107aa[_0x5e0d('0x34')][_0x5e0d('0x35')]){handleSendEmail(_0x3107aa[_0x5e0d('0x36')],_0x3107aa[_0x5e0d('0x37')]);_0x3107aa[_0x5e0d('0x38')]['stop']();}else{_0x3107aa[_0x5e0d('0x38')][_0x5e0d('0x39')](_0x5e0d('0x3a'));}}function completed(_0x158453){logger['info']('case\x20completed');handleSendEmail(_0x158453['job'],_0x158453[_0x5e0d('0x37')]);_0x158453[_0x5e0d('0x38')]['stop']();}function empty(_0x3a731c){logger['info'](_0x5e0d('0x3b'));handleSendEmail(_0x3a731c[_0x5e0d('0x36')],_0x3a731c[_0x5e0d('0x37')]);_0x3a731c[_0x5e0d('0x38')][_0x5e0d('0x3c')]();}function failed(_0x249769){logger[_0x5e0d('0xe')](_0x5e0d('0x3d'));handleSendEmail(_0x249769['job'],_0x249769[_0x5e0d('0x37')]);_0x249769[_0x5e0d('0x38')][_0x5e0d('0x3c')]();}function urecognized(_0x47d489){logger[_0x5e0d('0xd')](_0x5e0d('0x3e'),_0x47d489[_0x5e0d('0x3f')]['dataValues'][_0x5e0d('0x21')]);_0x47d489[_0x5e0d('0x38')][_0x5e0d('0x3c')]();}const reportStatusStrategies={'Loading':loading,'Completed':completed,'Empty':empty,'Failed':failed,'Unrecognized':urecognized};function retryer(_0x1f14b2,_0xebbb9e){const _0x4cbcd9={'retries':0x3,'factor':0x2,'minTimeout':0x5b*0x3e8,'maxTimeout':0xa*0x3c*0x3e8};const _0x4aca66=retry['operation'](_0x4cbcd9);_0x4aca66[_0x5e0d('0x40')](_0x57fb25=>{logger[_0x5e0d('0xe')](_0x5e0d('0x41')+_0x1f14b2['id']+_0x5e0d('0x42')+_0x57fb25);try{getReportData(_0xebbb9e['id'])[_0x5e0d('0xc')](function(_0x4114fc){_0xebbb9e=_0x4114fc;logger[_0x5e0d('0xe')](_0x5e0d('0x43'),_0x4114fc['dataValues'][_0x5e0d('0x21')]);if(!reportStatusStrategies[_0x4114fc[_0x5e0d('0x44')]['status']]){logger['error'](_0x5e0d('0x43'),_0x4114fc[_0x5e0d('0x44')]['status']);_0x4aca66['retry']();}reportStatusStrategies[_0x4114fc[_0x5e0d('0x44')][_0x5e0d('0x21')]]({'operation':_0x4aca66,'currentAttempt':_0x57fb25,'retryOptions':_0x4cbcd9,'job':_0x1f14b2,'data':_0xebbb9e,'entity':_0x4114fc});});}catch(_0x593c08){_0x4aca66[_0x5e0d('0x39')](_0x593c08);}});}function handleResult(_0x427dc3){return function(_0x4d139f){if(_0x427dc3[_0x5e0d('0x45')]&&_0x427dc3[_0x5e0d('0x11')]&&_0x427dc3['MailAccount'][_0x5e0d('0x14')]&&!_[_0x5e0d('0x46')](_0x427dc3[_0x5e0d('0x10')])){retryer(_0x427dc3,_0x4d139f);}};}function handleJob(_0x2216a1){return function(){try{if(_[_0x5e0d('0x46')](_0x2216a1[_0x5e0d('0x18')])){return logger[_0x5e0d('0xe')](_0x5e0d('0x47'));}if(_['isNil'](_0x2216a1[_0x5e0d('0x19')])){return logger[_0x5e0d('0xe')](_0x5e0d('0x48'));}var _0x12afd0={'startDate':moment()[_0x5e0d('0x49')](_0x2216a1[_0x5e0d('0x18')],_0x2216a1[_0x5e0d('0x19')])[_0x5e0d('0x16')](_0x5e0d('0x4a')),'endDate':moment()['format'](_0x5e0d('0x4a')),'type':'scheduled','output':_0x2216a1[_0x5e0d('0x4b')],'name':_0x2216a1[_0x5e0d('0x17')]};if(!_['isNil'](_0x2216a1[_0x5e0d('0x4c')])){logger[_0x5e0d('0xe')](_0x5e0d('0x4d'),_0x2216a1[_0x5e0d('0x4c')]);return analyticDefaultReportController[_0x5e0d('0x4e')]({'id':_0x2216a1[_0x5e0d('0x4c')]},_0x12afd0)[_0x5e0d('0xc')](handleResult(_0x2216a1))[_0x5e0d('0x32')](handleError());}if(!_[_0x5e0d('0x46')](_0x2216a1[_0x5e0d('0x4f')])){logger[_0x5e0d('0xe')](_0x5e0d('0x50'),_0x2216a1[_0x5e0d('0x4f')]);return analyticCustomReportController[_0x5e0d('0x4e')]({'id':_0x2216a1[_0x5e0d('0x4f')]},_0x12afd0)[_0x5e0d('0xc')](handleResult(_0x2216a1))[_0x5e0d('0x32')](handleError());}}catch(_0x54c4c8){logger['error'](JSON[_0x5e0d('0x25')](_0x54c4c8));}return logger['info'](_0x5e0d('0x51'));};}function getJobs(_0x3ea8f4){var _0x26393c={};if(_0x3ea8f4){_0x26393c['id']=_0x3ea8f4;}return db[_0x5e0d('0x52')][_0x5e0d('0x53')]({'where':_0x26393c,'include':[{'model':db[_0x5e0d('0x11')],'attributes':['id',_0x5e0d('0x17'),_0x5e0d('0x10')],'include':[{'model':db[_0x5e0d('0x54')],'as':_0x5e0d('0x14'),'include':[{'model':db['CloudProvider'],'as':'CloudProvider'}]}]}]})['then'](function(_0x59529f){var _0x4821ef=_[_0x5e0d('0x55')](manager[_0x5e0d('0x56')]);var _0x41000f=_[_0x5e0d('0x57')](_0x59529f,function(_0x2279d6){return _0x2279d6['id'][_0x5e0d('0x58')]();});var _0x6783bd=_[_0x5e0d('0x59')](_0x59529f,function(_0xcc4029){return _0xcc4029['id'][_0x5e0d('0x58')]();});var _0x21e372=_0x3ea8f4?_0x41000f:_[_0x5e0d('0x5a')](_0x41000f,_0x4821ef);var _0x7d2790=_[_0x5e0d('0x5b')](_0x41000f,_0x4821ef);var _0x240ebd=_['difference'](_0x4821ef,_0x41000f);var _0x2b3a1b;var _0x9638b8;for(_0x2b3a1b=0x0;_0x2b3a1b<_0x240ebd['length']&&!_0x3ea8f4;_0x2b3a1b+=0x1){_0x9638b8=_0x240ebd[_0x2b3a1b][_0x5e0d('0x58')]();if(manager[_0x5e0d('0x5c')](_0x9638b8)){manager[_0x5e0d('0x3c')](_0x9638b8);manager['deleteJob'](_0x9638b8);logger['info'](_0x5e0d('0x5d'),_0x9638b8);}}logger['info'](_0x5e0d('0x5e'),JSON[_0x5e0d('0x25')](_0x21e372));for(_0x2b3a1b=0x0;_0x2b3a1b<_0x21e372[_0x5e0d('0x5f')];_0x2b3a1b+=0x1){_0x9638b8=_0x21e372[_0x2b3a1b][_0x5e0d('0x58')]();if(_0x3ea8f4){logger['info'](JSON[_0x5e0d('0x25')](_0x6783bd[_0x9638b8]));BPromise[_0x5e0d('0x60')]()[_0x5e0d('0xc')](handleJob(_0x6783bd[_0x9638b8]));logger[_0x5e0d('0xe')](_0x5e0d('0x61'),_0x6783bd[_0x9638b8]['name'],_0x6783bd[_0x9638b8]['cron']);}else if(_0x6783bd[_0x9638b8]['cron']&&_0x6783bd[_0x9638b8][_0x5e0d('0x62')]&&moment()['isBetween'](_0x6783bd[_0x9638b8][_0x5e0d('0x63')],_0x6783bd[_0x9638b8]['endAt'])){manager[_0x5e0d('0x64')](_0x9638b8,_0x6783bd[_0x9638b8]['cron'],handleJob(_0x6783bd[_0x9638b8]));manager['start'](_0x9638b8);logger[_0x5e0d('0xe')](_0x5e0d('0x65'),_0x6783bd[_0x9638b8][_0x5e0d('0x17')],_0x6783bd[_0x9638b8][_0x5e0d('0x66')]);}else if(manager['exists'](_0x9638b8)){manager[_0x5e0d('0x3c')](_0x9638b8);manager[_0x5e0d('0x67')](_0x9638b8);logger[_0x5e0d('0xe')]('stop\x20cron',_0x6783bd[_0x9638b8][_0x5e0d('0x17')],_0x6783bd[_0x9638b8]['cron']);}}for(_0x2b3a1b=0x0,_0x9638b8;_0x2b3a1b<_0x7d2790[_0x5e0d('0x5f')]&&!_0x3ea8f4;_0x2b3a1b+=0x1){_0x9638b8=_0x7d2790[_0x2b3a1b][_0x5e0d('0x58')]();if(manager['exists'](_0x9638b8)){if(_0x6783bd[_0x9638b8][_0x5e0d('0x66')]&&_0x6783bd[_0x9638b8][_0x5e0d('0x62')]&&moment()[_0x5e0d('0x68')](_0x6783bd[_0x9638b8]['startAt'],_0x6783bd[_0x9638b8][_0x5e0d('0x69')])){manager[_0x5e0d('0x6a')](_0x9638b8,_0x6783bd[_0x9638b8]['cron'],handleJob(_0x6783bd[_0x9638b8]));logger[_0x5e0d('0xe')](_0x5e0d('0x6b'),_0x6783bd[_0x9638b8]['name'],_0x6783bd[_0x9638b8]['cron']);}else{manager['stop'](_0x9638b8);manager[_0x5e0d('0x67')](_0x9638b8);logger[_0x5e0d('0xe')](_0x5e0d('0x6c'),_0x6783bd[_0x9638b8][_0x5e0d('0x17')],_0x6783bd[_0x9638b8]['cron']);}}}})['catch'](function(_0x5cc9b3){logger[_0x5e0d('0xd')](JSON[_0x5e0d('0x25')](_0x5cc9b3));});}exports[_0x5e0d('0x6d')]=function(_0x4c9212){return getJobs(_0x4c9212);};exports[_0x5e0d('0x6e')]=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};